Java流程控制
Scanner对象
-
java给我们提供了一个工具类,用来获取用户的输入,java.util.Scanner
-
基本语法:
Scanner s = new Scanner(System.in);
-
通过Scanner类的next()和nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()和hasNextLine()判断是否还有输入的数据
import java.util.Scanner;
public class Demo01 {
public static void main(String[] args) {
//创建一个扫描器的对象
Scanner scanner = new Scanner(System.in);//新建一个Scanner对象,带有System.in参数,用Scanner类型的变量scanner来接收
System.out.println("使用next方式接收输入的内容:");
//判断用户有没有输入字符串
if(scanner.hasNext()){
String str = scanner.next();
System.out.println("输出的内容为:"+str);
}
//凡是属于IO流的类如果不关闭会一直占用资源,所以要养成及时关闭的习惯
scanner.close();
//String str = scanner.next();
//System.out.println(str);
}
}
-
next()与nextLine()
next():一定要读取到有效字符后才可以结束输入,对输入有效字符之前遇到的空白,next()方法会自动将其去掉;只有输入有效字符后,才将其后面输入的空白作为分隔符或结束符;next()不能得到带有空格的字符串
nextLine():以enter为结束符,也就是说nextLine()方法返回的输入是回车之前的所有输入字符;可以获得空白。
import java.util.Scanner;
public class Demo03 {
public static void main(String[] args) {
int i = 0;
float n = 0.0f;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入你的整数:");
if(scanner.hasNextInt()){
i = scanner.nextInt();
System.out.println("你输入的整数是:"+i);
}else{
System.out.println("你输入的不是整数");
}
System.out.println("请输入你的小数:");
if(scanner.hasNextFloat()){
n = scanner.nextFloat();
System.out.println("你输入的小数是:"+n);
}else{
System.out.println("你输入的不是小数");
}
}
}
-
练习
import java.util.Scanner; public class Demo04 { public static void main(String[] args) { //输入多个数字,并求其总和与平均数,每输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果 int i = 0;//用来接收输入的次数 double sum = 0;//用来接收和 Scanner scanner = new Scanner(System.in);//新建一个scanner对象 System.out.println("请输入一个数字:"); //通过循环判断是否还有输入 while(scanner.hasNextDouble()){ double n = scanner.nextDouble(); sum += n; i++; } System.out.println("共输出了"+i+"个数,"+"总和为:"+sum+".平均数为:"+(sum/i)); scanner.close(); } }
if选择结构
if单选择结构
-
语法
if(条件表达式){
//如果条件表达式为true将执行的语句
}
import java.util.Scanner; public class Demo01 { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.println("请输入内容:"); String s = scanner.nextLine(); //判断字符串是否相等 if(s.equals("hello")){ System.out.println(s); } scanner.close(); } }
if双选择结构
-
语法
if(条件表达式){
//如果条件表达式为true将执行的语句
}else{
//如果条件表达式为false将执行的语句
}
import java.util.Scanner; public class Demo02 { public static void main(String[] args) { //考试分数大于60就是及格,否则不及格 Scanner scanner = new Scanner(System.in); System.out.println("请输入内容"); int score = scanner.nextInt(); if(score>=60){ System.out.println("恭喜您,及格了"); }else{ System.out.println("对不起,您没有及格"); } scanner.close(); } }
if多选择结构
-
语法
if(条件表达式1){
//如果条件表达式为true将执行的语句
}else if(条件表达式2){
//如果条件表达式2为true将执行的语句
}else if(条件表达式3){
//如果条件表达式3为true将执行的语句
}else{
//如果条件表达式均为false将执行的语句
}
import java.util.Scanner; public class Demo03 { public static void main(String[] args) { //输入一个成绩,如果等于100为满分;90-100为A;80-90为B;70-80为C;60-70为D;小于60-不及格 Scanner scanner = new Scanner(System.in); System.out.println("请输入你的分数:"); int score = scanner.nextInt(); //利用if多选择结构进行判断 if(score == 100){ System.out.println("恭喜您,满分"); }else if(90<=score&&score<100){ System.out.println("您获得了:A"); }else if(80<=score&&score<90) { System.out.println("您获得了:B"); }else if(70<=score&&score<80) { System.out.println("您获得了:C"); }else if(60<=score&&score<70) { System.out.println("您获得了:D"); }else{ System.out.println("对不起,您不及格"); } scanner.close(); } }
if嵌套结构
-
语法
if(条件表达式1){
//条件表达式1位true时执行此语句
if(条件表达式2){
//条件表达式2位true时执行此语句
}
}
import java.util.Scanner; public class Demo04 { public static void main(String[] args) { //输入成绩,只有当成绩大于60时,才能进行评级,否则输出不及格;评级时当80-100分评级A;60-80分评级B Scanner scanner = new Scanner(System.in); System.out.println("请输入你的成绩:"); int score = scanner.nextInt(); if(score>60){ System.out.println("恭喜您,可以进行评级了"); if(score>80&&score<=100){ System.out.println("您的评级为:A"); }else if(score>60&&score<=80){ System.out.println("您的评级为:B"); } }else{ System.out.println("不及格"); } } }
switch多选择结构
-
switch case语句判断一个变量与一系列值中某个值是否相等,每个值称为一个分支
-
sitch语句中的变量类型可以是:
byte、short、int、char
从SE7开始,支持String类型
case标签必须为字符串常量或字面量
-
语法
switch(条件表达式){
case value1:
//语句
break;
case value2:
//语句
break;
…
default:
//语句
}
import java.util.Scanner; public class Demo05 { public static void main(String[] args) { //输入一个等级,分别输出该等级对应的描述:1-优秀;2-良好;3-合格,否则不合格 Scanner scanner = new Scanner(System.in); //char level = 'A'; System.out.println("请输入你的等级:1,2,3"); int level = scanner.nextInt(); switch(level){ case 1: System.out.println("您的等级为:优秀"); break;//可选,如果不写,就会出现case穿透,即会继续执行下面的语句;如果写了break,可以跳出此case case 2: System.out.println("您的等级为:良好"); break; case 3: System.out.println("您的等级为:合格"); break; default: System.out.println("您的等级为:不合格"); } } }
循环结构
while循环结构
-
语法
while(布尔表达式){
//布尔表达式为true,循环就一直执行下去
//一般需要设置让循环停止的条件
}
public class Demo6 { public static void main(String[] args) { //输出1-100 int i = 0;//变量需要设置初始值 while (i<100){//i<100,是循环停止的条件 i++;//变量必须有变化 System.out.println(i); } } }
do while循环
-
先执行、再判断,循环体至少执行一次
-
语法
do{
//循环体
}while(布尔表达式);
public class Demo8 { public static void main(String[] args) { int i = 0; int sum = 0; do{ i++; sum +=i; }while(false);//输出结果为1,循环体至少循环一次 System.out.println(sum); } }
for循环
-
for循环执行的次数在执行前就已经确定,是支持迭代的一种通用结构
-
语法
for(初始化;布尔表达式;更新){
//循环体
}
public class Demo9 { public static void main(String[] args) { int sum = 0; for(int i=1;i<=100;i++){//初始化,可以是空语句(变量定义在外面);布尔表达式;变量变化 sum+=i; } System.out.println(sum); } }
-
练习一
public class Demo10 { public static void main(String[] args) { //计算0-100之间奇数和偶数的和 int oddSum = 0; int evenSum = 0; for (int i = 0; i < 100; i++) {//可以输入 100.for 来快捷生成for循环 if(i%2==0){ evenSum+=i; }else{ oddSum+=i; } } System.out.println(oddSum); System.out.println(evenSum); } }
-
练习二
public class Demo11 { public static void main(String[] args) { //输出1-1000中间能被5整除的数,且每行输出三个 for (int i = 1; i <= 1000; i++) { if(i%5==0){ System.out.print(i+"\t"); // \t:转义字符,表示制表符 } if(i%(5*3)==0){ System.out.print("\n");// \n:转义字符,表示换行 } } } }
-
练习三
public class Demo12 { public static void main(String[] args) { //打印九九乘法表 /* 1*1=1 1*2=2 2*2=4 1*3=3 2*3=6 3*3=9 1*4=4 2*4=8 3*4=12 4*4=16 1*5=5 2*5=10 3*5=15 4*5=20 5*5=25 1*6=6 2*6=12 3*6=18 4*6=24 5*6=30 6*6=36 1*7=7 2*7=14 3*7=21 4*7=28 5*7=35 6*7=42 7*7=49 1*8=8 2*8=16 3*8=24 4*8=32 5*8=40 6*8=48 7*8=56 8*8=64 1*9=9 2*9=18 3*9=27 4*9=36 5*9=45 6*9=54 7*9=63 8*9=72 9*9=81 */ for(int i=1;i<=9;i++){ for(int j=1;j<=i;j++){ System.out.print(i+"*"+j+"="+(i*j)+" "); } System.out.println(); } } }
break和continue
-
break:用于强行退出循环体,不执行循环中剩余的语句
-
continue:用于终止本次循环,跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
public class Demo13 { public static void main(String[] args) { int i=0; while(i<100){ i++; System.out.println(i);//只打印到30 if(i==30){ break;//跳出循环,继续执行循环之后的语句 } } } }
-
public class Demo14 { public static void main(String[] args) { int i=0; while(i<100){ i++; if(i==30){ System.out.println("不执行此次循环"); continue;//跨过此次循环,直接进行下一次循环 } System.out.println(i);//输出的结果中不包含30 } } }
-
练习
public class Demo15 { public static void main(String[] args) { /* 打印三角形 * * * * * * * * * * * * * * * * * * * * * */ for (int i = 0; i < 6; i++) {//外循环控制行数 for(int j=0;j<=i;j++){//内循环控制列数 System.out.print("*"+" "); } System.out.println(); } } } ``