Java学习——流程控制篇
流程控制
Scanner与用户交互
public static void main(String[] args) {
//创建扫描器对象,接收输入
System.out.println("请输入:");
Scanner s=new Scanner(System.in);
//可以用next()或nextline()获取字符串
//在获取之前何以用hasNext()或hasNextLine()进行判断
if(s.hasNext()){
String s1=s.next();
System.out.println("next取得:"+s1);
}
//创建扫描器对象,接收输入
System.out.println("请输入:");
Scanner ss=new Scanner(System.in);
//可以用next()或nextline()获取字符串
//在获取之前何以用hasNext()或hasNextLine()进行判断
if(s.hasNextLine()){
String s1=ss.nextLine();
System.out.println("nextLine取得:"+s1);
}
//IO类对象在使用结束之后关闭,节省资源
ss.close();
}
运行结果为:

可以看到:
-
next()以空格为结束符,并且会自动去除有效字符前的空格
-
nextLine()以enter回车为结束符,可以识别带有空格的字符串
关于Scanner,它还有其他方法,对输入数据做出更为详细的判断:
-
hasNextInt与nextInt,获得整数数据
-
hasNextFloat与nextFloat,获得小数
-
......
实训:
/**
* 输入多个数字,求和以及其平均数
* 如果每输入一个数字用回车确认
* 如果输入非数字,直接输出结果
*/
//方法1:
public static void main(String[] args) {
Scanner scanner=new Scanner(System.in);
double sum=0;
int num=0;
while(scanner.hasNextLine()){
if(scanner.hasNextInt()){
sum+=scanner.nextInt();
num+=1;
}
else if(scanner.hasNextLong()){
sum+=(double)scanner.nextLong();
num+=1;
}
else if(scanner.hasNextShort()){
sum+=scanner.nextShort();
num+=1;
}
else if(scanner.hasNextByte()){
sum+=scanner.nextByte();
num+=1;
}
else if(scanner.hasNextFloat()){
sum+=scanner.nextFloat();
num+=1;
}
else if(scanner.hasNextDouble()){
sum+=scanner.nextDouble();
num+=1;
}
else{
break;
}
}
System.out.println("和:"+sum);
System.out.println("平均数:"+sum/num);
}
//方法2:
//这段代码过于冗长,只需要将while中的判断条件修改为hasNextDouble()即可去掉后续的判断语句
三大结构
顺序结构
- Java的基本结构,从上到下,一句一句执行
判断结构
-
if单选择
-
if-else双选择
-
if-else if-else多选择结构
-
switch-case结构
- 在case语句中若没有break;,会继续打印后续所有case中的语句
循环结构(避免死循环)
-
while循环结构:先判断,再运行
-
//输出1+2+...+100 public static void main(String[] args) { int num=1; int sum=0; String s=""; while(num<=100){ if(num==100){ s=s+num; }else{ s=s+num+'+'; } sum+=num++; } System.out.println(sum); System.out.println(s+'='+sum); }
-
-
DoWhile循环结构:先运行,再判断;循环体至少会被执行一次
-
for循环结构:循环次数在执行前就已经被确定
-
//计算0到100间的奇数和和偶数和 public static void main(String[] args) { int oddSum=0; int evenSum=0; for(int i=0,j=1;i<=100&&j<100;i+=2,j+=2){ oddSum+=j; evenSum+=i; } System.out.println("奇数和:"+oddSum); System.out.println("偶数和:"+evenSum); } //奇数和:2500 //偶数和:2450 -
public static void main(String[] args) { //输出1-1000内能被5整除的数字,每3个1行 int j=0; for (int i = 1; i <= 1000; i++) { if(i%5==0){ System.out.print(i); System.out.print(' ');//可以用'\t'代替 j++; } if(j==3){ j=0; System.out.println('\n');//可以用 System.out.println()代替 } } } -
public static void main(String[] args) { //打印九九乘法表 for (int i = 1; i < 10; i++) { for (int j = 1; j < 10&&j<=i; j++) { System.out.print(j); System.out.print('*'); System.out.print(i); System.out.print('='); System.out.print(i*j); System.out.print('\t'); } System.out.println(); } } -
可用于数组或集合的增强for循环
-
public static void main(String[] args) { int[] numbers={10,20,30,40}; for(int item:numbers){ item+=1; System.out.println(item); } }
-
-
break和continue
-
break强制退出循环,跳出循环体
-
continue终止本次循环,进入下一次循环
练习
public static void main(String[] args) {
//打印三角形,5行
for (int i = 1; i <= 5; i++) {
//先打印空格
for (int i1 = 0; i1 < 5 - i; i1++) {
System.out.print(" ");
}
//打印数字
for (int i1 = 0; i1 < i-1; i1++) {
System.out.print(i+" ");
}
System.out.print(i);
//打印空格
for (int i1 = 0; i1 < 5 - i; i1++) {
System.out.print(" ");
}
System.out.println();
}
}

浙公网安备 33010602011771号