流程控制
Scanner工具类的使用
- 作用:能获得用户从控制台输入的数据,读取到程序中
- 使用Scanner:
//1. 创建Scanner的工具 //Scanner scanner 定义了一个scanner变量,类型是Scanner类型的 //new Scanner() new 是新建 //System.in是一个标准的输入流 Scanner s = new Scanner(System.in); //2. 调用Scanner工具的功能(方法) // nextInt功能:从控制台获得输入的数据,返回int值 // 程序将阻塞,当输入数据并回车后,就会解除阻塞 int i = s.nextInt(); System.out.println(i+1); int j = s.nextInt(); System.out.println(j+1);从控制台上输入的数据其实都是字符串,Scanner会根据调用的功能,对字符串进行解析,解析为指定的数据
- nextInt()
- nextDouble()
- next() 获取输入的字符串 ,不能获取到空格和回车
- nextLine() : 可以获取到空格和回车
- 获取字符:
Scanner s = new Scanner(System.in);//获得字符//获得字符串,获取字符串中的第一个字符String str = s.next();char c = str.charAt(0);实例:
- 输入一个圆的半径(浮点),计算圆的面积
- 输入一个矩形的长和宽,计算周长
三目运算表达式
语法: boolean表达式?值1:值2
解释:如果boolean表达式的结果是true,整个表达式的结果就是值1 ,如果是false,结果就是值2
实例:输入两个整数,输出最大的整数
条件语句
if语句
语法:
if(boolean表达式){
语句1
}else if(boolean表达式){
语句2
}else if(boolean表达式){
语句3
}else{
语句4
}
其中if可以单写,else if和 else必须要有if
Scanner scanner = new Scanner(System.in);System.out.println("请输入星期(1~7):");int week = scanner.nextInt();if(week==1) { System.out.println("升旗仪式");}else if(week==2){ System.out.println("下午放假");}else if(week==3 || week==5){ System.out.println("上体育课");}else if(week == 4){ System.out.println("上科学课");}else{ System.out.println("放假");}switch语句
语法:
switch(变量)
case 值1:
语句1
break;
case 值2:
语句2 break;
…
default:
语句;
使用switch的注意事项:
- switch比较的变量类型一定是int(自动向上转型为int) 或 String
- switch只能比较==的情况
- switch具有贯穿性:如果一个case满足了条件,后面的所有case中的语句都会执行,直到执行break结束
//输入星期几,上什么课 Scanner scanner = new Scanner(System.in); System.out.println("请输入星期(1~7):"); int week = scanner.nextInt(); switch (week){ case 1: System.out.println("升旗仪式"); break; case 2: System.out.println("下午放假"); break; case 3: case 5: System.out.println("上体育课"); break; case 4: System.out.println("上科学课"); break; default: System.out.println("放假"); }循环语句
当我们要多次的执行一些相同的代码,将代码写在一个循环中
for循环
语法:
for(初始化表达式; boolean表达式; 递增或递减表达式){语句}
- 先执行一次初始化表达式
- 判断boolean表达式是否是true,如果是true执行循环体的语句;如果是false则结束循环
- 执行递增递减表达式
- 2~3执行
//输出5次helloworld for(int i = 1;i<=5;i++){ System.out.println("hello world"); } //输出1~5数字 for (int i = 1; i <=5 ; i++) { System.out.println(i); } //5~1数字 for (int i = 5; i >=1 ; i--) { System.out.println(i); } //输出a~z for(char i = 'a';i<='z';i++){ System.out.println(i); } //计算1~10数字的和 int sum = 0; for (int i = 1; i <=10 ; i++) { sum += i; } System.out.println(sum); //计算1~10数字中偶数的和 sum = 0; for (int i = 1; i <=10 ; i++) { if((i&1)==0){ sum += i; } } for (int i = 2; i <=10 ; i+=2) { sum += i; } //实现死循环 for (; ; ) { System.out.println("hello"); }双层循环 : 循环体又是一个循环,如果外层循环执行n次,内层循环执行m次, 内层循环的代码一共会执行m*n
for (int i = 1; i <= 5 ; i++) { for (int j = 1; j <=4 ; j++) { System.out.println(i+","+j); } }while循环
语法:
while(boolean表达式){
语句
}
//输出1~5int i = 1;while(i<=5){ System.out.println(i); i++;}如果清楚执行次数,用for可能会比较容易
如果只知道一个循环的条件,用while好一些
do…while循环
语法:
do{
语句
}while(boolean表达式) ;
先执行一次循环体的语句,再判断while的boolean表达式的结果,如果是true则执行循环体。
do…while主要是为了解决while循环代码冗余问题的。
//贪吃蛇游戏 伪代码 随机食物节点的坐标 while(食物节点的坐标==蛇身所有节点坐标) { 随机食物节点的坐标 } 改为: do { 随机食物节点的坐标 }while(食物节点的坐标==蛇身所有节点坐标);控制循环的关键字
-
break
当循环体中执行到break时,循环立刻结束,如果在多层循环中,立刻结束当前层的循环
break后可以加循环点,结束指定的循环
for (int i = 1; i <=5 ; i++) { if(i==2){ break; } System.out.println(i);}//for (int i = 1; i <=5 ; i++) { for (int j = 1; j <=5 ; j++) { if(j==2){ //立刻结束当前层的循环 break; } System.out.println(i+","+j); }}//循环点a:for (int i = 1; i <=5 ; i++) { b:for (int j = 1; j <=5 ; j++) { if(j==2){ break a; } System.out.println(i+","+j); }}- continue : 当循环执行到continue时,立刻结束本次循环;如果在多层循环中,立刻结束当前层的本次循环,也可以和循环点组合使用
循环的解题思路
循环的总体思路
- 穷举法 : 将问题的所有可能的答案一一列举,然后根据条件判断此答案是否合适,合适就保留,不合适就丢弃。
- 递推法:顺推和逆推 ,从已知条件出发,逐步推算出要解决问题的方法。
图形题循环思路
图形题的循环基本都是二层循环。一层循环负责换行,二层循环负责每行的内容
例如:三角形
for (int i = 1; i <=5 ; i++) { //打印每行的列内容 for (int j = 1; j <=i ; j++) { System.out.print("*"); } System.out.println();}例如:等边三角形 :
Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); for (int i = 1; i <=n ; i++) { //打空格 for (int j = 0; j <=n-i ; j++) { System.out.print(" "); } //打星 for (int j = 1; j <= 2*i -1 ; j++) { System.out.print("*"); } System.out.println(); } for (int i = n-1; i >= 1 ; i--) { //打空格 for (int j = 0; j <=n-i ; j++) { System.out.print(" "); } //打星 for (int j = 1; j <= 2*i -1 ; j++) { System.out.print("*"); } System.out.println(); }求质数(素数)问题
质数 : 除了1和本身都不能整除的数
Scanner scanner = new Scanner(System.in); int n = scanner.nextInt(); //假定这个数是质数 boolean flag = true; for (int i = 2 ; i <=n-1 ; i++) { if(n%i==0){ flag= false; break; } } if(flag){ System.out.println(n+"是质数"); }else{ System.out.println(n+"不是质数"); }计算100~200之间的质数
boolean flag = true; for (int n = 100; n <= 200 ; n++) { //假定这个数是质数 flag = true; for (int i = 2 ; i <=n-1 ; i++) { if(n%i==0){ flag= false; break; } } if(flag){ System.out.println(n+"是质数"); }else{ System.out.println(n+"不是质数"); } }计算一个数每个位上的数字
Scanner scanner = new Scanner(System.in); int i = scanner.nextInt(); int m = i; //获取这个数的位数 int count = 0; while(i!=0){ i/=10; count++; } int k = 1; for (int j = 0; j < count; j++) { System.out.println(m/k%10); k*=10;}Math工具使用
//取绝对值int i = -10;int j = Math.abs(i);System.out.println(j);//开平方根i = 16;double d = Math.sqrt(i);System.out.println(d);//判断一个数是否是完全平方数System.out.println(Math.sqrt(i)%1.0==0);//计算m的n次幂System.out.println(Math.pow(3,5)); //3的5次幂//四舍五入取整System.out.println(Math.round(3.5)); //4System.out.println(Math.round(-3.5)); //-3Java SE
Related articles
部分信息可能已经过时