一、用户交互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值虽然可以是字符串但是本质上还是数字,采用了哈希编码。