Java流程控制学习
用户交互Scanner
-
通过Scanner类来获取用户的输入
-
基本语法(固定)
//开头:创建scanner对象,接收键盘输入 Scanner scanner=new Scanner(System.in); //结尾:IO流需要及时关闭,防止占用资源 scanner.close();
-
通过Scanner类的next()或nextLine()方法获取输入的字符串
String str1=scanner.next();//用next()方法读取键盘输入,赋值给字符串str1 String str2=scanner.nextLine();//用nextLine()方法读取键盘输入,赋值给字符串str2
-
next()或nextLine()方法区别
-
next()方法一定要读取到有效字符输入后才可以结束输入
-
对输入有效字符之前遇到的空白,next()方法会自动将其忽略、
-
next()方法一旦输入有效字符后,遇到的空格或回车会作为结束符(后面内容就截断了)
-
因此next()方法不能得到带有空格的字符串
-
以回车(\n)作为结束符,nextLine()方法返回的就是回车之前的所有字符
-
因此nextLine()方法可以获得空白
-
-
在读取前可以使用hasNext()与hasNextLine()判断是否还有输入的数据(详见While循环)
if(scanner.hasNext()){ String str=scanner.next(); System.out.println("使用Next方法接收:"+str); }
Scanner进阶使用
可以使用hasNextInt()方法判断输入的是否是一个整数,以此类推其他方法……(详见if选择结构)
if(scanner.hasNextInt()) {
int i=scanner.nextInt();
System.out.println("输入的是整数:"+i);
}else{
System.out.println("输入的不是整数");
}
例题:输入多个数值,计算其总和及平均值,每输入一个数字用回车确认,通过输入非数字来结束运算并输出计算结果
Scanner scanner=new Scanner(System.in);//创建scanner对象,接收键盘输入
double sum=0;//初始化sum计算总和
int n=0;//初始化n计算输入的数值个数
while(scanner.hasNextDouble()){//详见While循环,判断是否输入了数值,当输入非数字时结束while循环
sum+= scanner.nextDouble();//sum=sum+scanner.nextDouble(),将输入数值与sum相加并将结果赋值给sum
n++;//n自增,计算输入的数值个数
}
System.out.println("总和="+sum+"\n平均值="+sum/n);//输出总和及平均值,"\n"是转义字符,表示换行
scanner.close();//IO流需要及时关闭,防止占用资源
顺序结构
从上到下一行一行执行就是顺序结构……
If选择结构
语法:
if(/*布尔表达式1*/){
//如果布尔表达式1为true将执行的语句
}else if(/*布尔表达式2*/){
//如果布尔表达式2为true将执行的语句
}else if(/*布尔表达式3*/){
//如果布尔表达式3为true将执行的语句
}else{
//如果以上所有布尔表达式都为false将执行的语句
}
以上是最全的结构,使用时可以不写全,也可以嵌套:
if(/*布尔表达式1*/){
//如果布尔表达式1为true将执行的语句
if(/*布尔表达式2*/){
//如果布尔表达式1为true且布尔表达式2为true将执行的语句
}
}
Switch多选择结构
- switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
- switch语句中的变量类型可以是:
- byte、short、int或char
- 从Java SE7 开始支持字符串String类型(每个对象都对应一个HashCode,可通过反编译来查看)
- case标签必须为字符串常量或字面量
switch(变量){
case 值1:
//语句
break;
case 值2:
//语句
break;
default:
//语句
break;
switch将变量与值进行匹配(每个值互不相等),当匹配到相等时进入case执行语句,若遇到break则跳出switch,执行switch后面的语句,若不遇到break则会一直执行后面case里的语句。default表示当所有case都不匹配时执行的语句,可不写default。注意:switch匹配不会按照从上到下的顺序,因此default不必须写在所有case之后(但不建议)。
While循环
while循环(先判断,后执行)
while(布尔表达式){
//循环内容
}
- 只要布尔表达式为true,循环就会一直执行下去
- 大多数情况需要让循环停止下来,因此要考虑一个方法来让布尔表达式为false
- 少数情况下需要循环一直执行,比如服务器的请求响应监听等
- 循环条件一直为true会造成死循环,影响程序性能或者造成程序卡死崩溃
DoWhile循环
DoWhile循环(先执行,再判断)
do{
//循环内容
}while(布尔表达式)
注意和while的区别
For循环
for循环语句
for(初始化条件;布尔表达式;更新){
//代码语句
}
- 初始化条件:开始执行for循环前执行的语句
- 布尔表达式:和while相同
- 更新:每次执行完代码语句后都要执行的语句
- 初始化条件、布尔表达式、更新都可以不写,但分号必须写
打印九九乘法表
for(int i=1;i<=9;i++){
for(int j=1;j<=i;j++){
System.out.print(i+"*"+j+"="+i*j+"\t");
}
System.out.println();//效果等于System.out.print("\n");
}
/*输出结果
1*1=1
2*1=2 2*2=4
3*1=3 3*2=6 3*3=9
4*1=4 4*2=8 4*3=12 4*4=16
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81
*/
增强for循环(详见数组)
增强for循环
for(声明语句:表达式){
//代码语句
}
- 声明语句:声明新的局部变量,该变量的类型必须和数组元素的类型匹配,其作用域自然也就限定在for循环语句块中,其值与对应的数组元素的值相等
- 表达式:表达式是要访问的数组名,或者是返回值为数组的方法
break、continue、goto
- break:用于强行退出当前循环或switch,执行循环下面的语句,注意:只可退出一层循环
- continue:用于跳过当前循环语句中剩下未执行的语句,直接进入循环判断,注意:对于for循环无法跳过"更新"
- goto:略
打印三角形及Debug
for (int i = 1; i <= 5; i++) {
for (int j = 5; j>i; j--) {
System.out.print(" ");
}
for (int j = 0; j < i; j++) {
System.out.print("*");
}
for (int j = 1; j < i; j++) {
System.out.print("*");
}
System.out.println();
}
/*输出结果
*
***
*****
*******
*********
*/
debug:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GgBiUbJL-1612595159707)(D:\课件\科创\截图\Debug.png)]