代码编织梦想

一、用户交互Scanner

1.基本语法:

Scanner scanner=new Scanner(System.in);

2.作用:

类似python中的input用于获取用户输入

3.获取字符串:

通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取之前一般使用hasNext()和hasNextLine()判断是否还有输入数据

1.用next()方法获取字符串

package com.javastudy.Scancer;
import java.util.Scanner;
public class Demo01 {
    public static void main(String[] args) {
        //创建一个扫描对象,用于接收键盘数据
        Scanner scanner=new Scanner(System.in);
        System.out.println("使用next方式接收:");
        //判断用户有没有输入字符串
        if (scanner.hasNext()){//如果还有输入执行下面的操作
            String str=scanner.next();
            System.out.println("输入的内容为:"+str);
        }
        scanner.close();//凡是属于IO流的类如果不关闭会一直占用资源
    }
}
输出:
    使用next方式接收:
	hello world!  //这行是我输入的
	输入的内容为:hello //可以看到他值输出了空格前面的字符串

关于next()方法获取字符串:

  • 在输入字符串之前,程序一直执行
  • 输入有效字符串之前输入的空格会被next()自动去掉,也就是说你一开始输入个空格然后再输入字符串,输出的时候这个空格是没用的,直接被去掉了。
  • 只有输入有效字符串后才将其后输入的空白作为分隔符或者结束符
  • next()不能得到带有空格的字符串

ps:关于scanner.close()这个地方还是要规范操作

2.用nextLine方法获取输入的字符串

package com.javastudy.Scancer;
import java.util.Scanner;
public class Demo02 {
    public static void main(String[] args) {
        //创建一个扫描对象,用于接收键盘数据
        Scanner scanner=new Scanner(System.in);
        System.out.println("使用nextline方式接收:");
        if (scanner.hasNextLine()){//判断用户有没有输入字符串
            String str=scanner.nextLine();
            System.out.println("输出内容为:"+str);
        }
        scanner.close();
    }
}
输出:
    使用nextline方式接收:
	hello world!
	输出内容为:hello world! //可以看到没有受空格的影响

关于nextLine()方法获取字符串:

  • nextLine()以回车作为结束
  • 可以获取空白

3.进一步理解Scaner

进一步再去理解一下,下面两个代码块可以更好的理解Scanner方法。

同时下面这段代码中有一行没有对齐,不要受python影响

package com.javastudy.Scancer;
import java.util.Scanner;
public class Demo03 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);//创建一个Scanner对象用于接收用户输入
        System.out.println("请输入数据:");
      String str=scanner.nextLine();//这里相当于调用了你创建的Scanner对象中的一个方法来接收数据,然后把接收的数据给str
        System.out.println(str);
        scanner.close();//凡是属于IO流的类如果不关闭会一直占用资源
    }
}
输出;
请输入数据:
hello world //输入
hello world

可以看到如下代码,我把

​ String str=scanner.nextLine();
​ System.out.println(“请输入数据:”);

这两行代码换一下位置可以看出来真正让程序在哪等着你去输入的其实是你调用Scanner中nextLine()方法这一行代码。

package com.javastudy.Scancer;
import java.util.Scanner;
public class Demo03 {
    public static void main(String[] args) {
        //创建一个扫描对象,用于接收键盘数据
        Scanner scanner=new Scanner(System.in);
        String str=scanner.nextLine();
        System.out.println("请输入数据:");
        System.out.println(str);
        scanner.close();//凡是属于IO流的类如果不关闭会一直占用资源
    }
}
输出:
    hello world //实际这行是我出入的
	请输入数据:
	hello world

4.小练习

输入多个数字,求其和与平均数,没输入一个数字用回车确认,通过输入非数字来结束输入输出执行结果

package com.javastudy.Scancer;
import java.util.Scanner;
//小练习:输入多个数字,求其和与平均数,没输入一个数字用回车确认,
// 通过输入非数字来结束输入输出执行结果
public class Demo05 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        System.out.println("请输入数据:");
        //和
        double sum=0;
        //计算输入了多少个数字
        int m=0;
        //通过循环判断是否还有输入,并且对每一次进行求和和统计
        while (scanner.hasNextDouble()){
            Double x= scanner.nextDouble();
            m++;
            sum+=x;
            System.out.println("你输入了第"+m+"个数据,当前结果sum="+sum);
        }
        System.out.println(m+"个数的和为:"+sum);
        System.out.println(m+"个数的平均值是:"+sum/m);
        scanner.close();
    }
}
输出;
请输入数据:
1
你输入了第1个数据,当前结果sum=1.0
2
你输入了第2个数据,当前结果sum=3.0
3
你输入了第3个数据,当前结果sum=6.0
4
你输入了第4个数据,当前结果sum=10.0
x
4个数的和为:10.0
4个数的平均值是:2.5

ps;scanner里面有很多方法字面意思容易理解

在这里插入图片描述

二、Java的流程控制

1.顺序结构

程序从上到下依次执行

2.选择结构

2.1 if选择结构

2.1.1 if单选择结构

语法:

if(判断语句){
    代码
}

2.1.2 if双选择结构

语法:

if(判断语句){
    代码
}else{
    代码
}

2.1.3 if多选择结构

语法:

if(判断语句1){
    代码
}else if(判断语句2){
    代码
}else if(判断语句3){
    代码
}else{
    上面都不对,执行这里的代码
}

2.1.4 if嵌套结构

语法:

if (判断语句1){
    代码
        if(判断语句2){
            代码
                if(判断语句3){
                    代码
                }
        }
}

2.2 switch选择结构

2.2.1语法:

switch(变量){
    case value:
        //代码
        break;//可选
    case value:
        //代码
        break;//可选
    default:
        //代码
}

2.2.2case的穿透:

package com.javastudy.struct;
//case穿透
public class SwitchDemo01 {
    public static void main(String[] args) {
        char grade='B';
        switch (grade){
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
            case 'C':
                System.out.println("及格");
            case 'D':
                System.out.println("不及格");
            default:
                System.out.println("未知等级");
        }
    }
}
输出结果:
良好
及格
不及格
未知等级 //结果全部都输出了

上面这个代码可以看出来,我这里grade='B’匹配到第二个,但是第二个没有break语句,所以后边的一起输出了。

package com.javastudy.struct;
//case穿透
public class SwitchDemo01 {
    public static void main(String[] args) {
        char grade='B';
        switch (grade){
            case 'A':
                System.out.println("优秀");
                break;
            case 'B':
                System.out.println("良好");
            case 'C':
                System.out.println("及格");
            case 'D':
                System.out.println("不及格");
                break;
            default:
                System.out.println("未知等级");
        }
    }
}
输出:
良好
及格
不及格

上面这段代码,我在D的那一栏里面加了个break,输出就到这停止了。

2.2.3 case的值为字符串的源码

一般case的value值是八大基本类型,但是从JDK7开始case可以支持字符串类型,下面代码举例:

package com.javastudy.struct;
public class SwitchDemo02 {
    public static void main(String[] args) {
        String name="郭英虎";
        switch (name){
            case "郭英虎"://这里主要说明一下case里面是可以用字符串的从JDK7以后才支持的
                System.out.println("郭英虎");
                break;
            case "中国":
                System.out.println("中国");
                break;
            default:
                System.out.println("实名羡慕");
        }
    }
}
输出;
郭英虎

查看源码:

.java文件在执行的时候首先会编译成一个.class文件,而这个.class文件是一个字节码文件我们是看不懂的,但是可以通过IDEA反编译成我们能看得懂的源码

  • 首先打开项目结构

在这里插入图片描述

  • 可以看到项目编译之后输出的路径

在这里插入图片描述

  • 复制路径找到所在文件夹

在这里插入图片描述

  • 找到项目文件

在这里插入图片描述

  • 打开我们的项目文件中的包所在的位置

在这里插入图片描述

  • 把需要查看源码的.class文件复制到项目包所在的文件夹里

在这里插入图片描述

  • 可以看到目录里面就有这个.class文件源码了

在这里插入图片描述

  • 可以看到case的value值虽然可以是字符串但是本质上还是数字,采用了哈希编码。

在这里插入图片描述

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_50356899/article/details/109104934

substring的用法详解 java-爱代码爱编程

substring(int beginIndex) 这个方法截取的字符串是从索引beginIndex开始的,到整个字符串的末尾, abcde 索引: 01234 从第2个开始,索引:2 开始 结果是cde substring(int beginIndex, int endIndex) 这个方法截取的字符串从beginIndex开始

JSP:servlet实验-使用servlet分解单词-爱代码爱编程

实验要求 用户在JSP页面输人英文句子提交给servlet,servlet可以统计出英文句子中的单词数目。 ●JSP页面具体要求 inputWord. jsp页面提供个表单,用户使用该表单中的文本区输 人英文句子,然后提 交给名字是word的servlet。 ● Servlet的具体要求 编写一个Servlet 类Decompose,该类创建的servle

JAVA-内部类-爱代码爱编程

成员内部类(非静态内部类,静态内部类),匿名内部类 非静态内部类 public class 内部类 { public static void main(String[] args) { //先创建外部类实例,再用外部类实例创建内部类实例 Outer.Inner inner =new Outer().new Inner(); inner.sh

码农翻身部分章节连接,小说式编程,java,数据库。。。-爱代码爱编程

大话编程 我是一个java class张大胖学数据库TCP/IP 之 大明王朝的邮差TCP/IP 之 大明内阁TCP/IP 之 蓟辽督师CPU 阿甘CPU 阿甘之烦恼 CPU 阿甘:函数调用的秘密张大胖的socket张大胖学递归学习面向对象的令狐冲数据库村的旺财和小强小李的数据库之旅(上)小李的数据库之旅(下)漫画:什么是机器学习那些烦人的同步和互斥问

蓝桥杯十一届模拟赛-爱代码爱编程

15.125GB是多少MB?package 十一届; /* * 在计算机存储中,15.125GB是多少MB? 答案:15488 思路:1GM=1024MB */ public class _015125GB是多少MB { public static void main(String[] args) { double gb=1024*15.125;

java.sql.SQLException: The server time zone value ‘Öйú±ê׼ʱ¼ä‘ is unrecognized or represents more-爱代码爱编程

java.sql.SQLException: The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one time zone. 这个问题是由于时间问题导致的 java.sql.SQLException: The server time zone