台州黄岩住房和城乡建设网站,wordpress 外链图片自动,网站专题页策划,东莞企业网站建立报价java ——程序流程控制 ✍作者#xff1a;电子科大不知名程序员 #x1f332;专栏#xff1a;java学习指导 各位读者如果觉得博主写的不错#xff0c;请诸位多多支持#xff1b;如果有错误的地方#xff0c;欢迎在评论区指出 目录java ——程序流程控制分支结构if-elsesw…java ——程序流程控制 ✍作者电子科大不知名程序员 专栏java学习指导 各位读者如果觉得博主写的不错请诸位多多支持如果有错误的地方欢迎在评论区指出 目录java ——程序流程控制分支结构if-elseswitch-casescanner循环for 循环while 循环do-while 循环嵌套循环break和continuebreak和continue三种基本流程结构顺序结构、分支结构、循环结构
分支结构
if-else
三种结构
if(条件表达式){执行代码块;
}//二选一
if(条件表达式){执行代码块1;
}
else{执行代码块2;
}//多选一
if(条件表达式1){执行代码块1;
}else if(条件表达式2){执行代码块2;}
......else{执行代码块n;}switch-case
1.格式
switch(表达式){
case 常量1语句1;//break;
case 常量2语句2;//break;
......
case 常量N语句N; break;
default语句;//break;
}//break的意思是不一定要用break
public class SwitchCaseTest {public static void main(String[] args) {int number2;switch(number) {case 0:System.out.println(zero);case 1:System.out.println(one);case 2:System.out.println(two);case 3:System.out.println(three);default:System.out.println(other);}}
}运行结果如下 【说明】
1.根据switch表达式中的值一次匹配各个case中的常量一旦匹配成功进入相应case结构中调用其执行语句当调用完执行语句后则仍然继续向下执行其它case结构中的执行语句直到遇到break关键字或者switch-case末尾结束为止
2.要想像if-else那样的多选一需要在每一个case后加break
break可以使用在switch-case结构中表示一旦执行到此关键字就跳出switch-case结构
3.switch结构中的表达式只能是如下的6种数据类型之一byte、short、char、int、枚举类型、String类型
boolean isRightture;
switch(isRight){ //wrong......
}4.case后放的是常量不能作范围判断相当于判断
5.break关键字在switch结构中是可选的绝大多数情况要加
6.default相当于if-else结构中的else中类型当前面情况case都不满足时执行
default也是可选的且位置是灵活的用不到
实例1
import java.util.Scanner;
public class SwitchCase3 {//对于学生成绩大于60分的输出“合格”。低于60分的输出不合格public static void main(String[] args) {Scanner scannew Scanner(System.in);int score_1scan.nextInt();int score_2score_1/10;switch(score_2) {case 1:case 2:case 3:case 4:case 5:System.out.println(Failed);break;case 6:case 7:case 8:case 9:case 10:System.out.println(pass);break;}}
}优化switchscore_1/60)——这样就分成了及格和不及格的两种情况了
实例2:
package my_first_java_code;import java.util.Scanner;
public class SwitchCase4 {public static void main(String [] args){//编写程序从键盘上输入2022年的月份和日期通过程序求得这是2022的第几天Scanner scannew Scanner(System.in);System.out.println(Please enter a month:);int monthscan.nextInt();System.out.println(Please enter a day:);int dayscan.nextInt();//定义一个变量来保存总天数int sumDays0;/*方法1过于的冗余* switch(month) {case 1:sumDaysday;case 2:sumDays31day;case 3:...}*///方法2:我们不妨思考因为我们到下个月的时候正好要将前面所有月的天数相加因此不妨将前几个月的天数写在下面那么没有break的情况下就会自动执行switch(month) {case 12:sumDays30;case 11:sumDays31;case 10:sumDays30;case 9:sumDays31;case 8:sumDays31;case 7:sumDays30;case 6:sumDays31;case 5:sumDays30;case 4:sumDays31;case 3:sumDays28;case 2:sumDays31;case 1:sumDaysday;}System.out.println(2022年的第month月第day日是第sumDays天);//注意用连接符连接}
}通过实例2我们再次强调break是可选的马根据实际要求来
实例3不仅仅考虑2022年我们加入对年的思考——需要判断是否是闰年
import java.util.Scanner;
public class SwitchCaseTest5 {public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println(Please enter a year:);int yearscan.nextInt();System.out.println(Please enter a month:);int monthscan.nextInt();System.out.println(Please enter a day:);int dayscan.nextInt();//定义一个变量来保存总天数int sumDays0;switch(month) {case 12:sumDays30;case 11:sumDays31;case 10:sumDays30;case 9:sumDays31;case 8:sumDays31;case 7:sumDays30;case 6:sumDays31;case 5:sumDays30;case 4:sumDays31;case 3://根据是否是闰年来决定//sumDays28;if(year%40year%100!0||year/4000) {sumDays29; //是闰年}else {sumDays28; //不是闰年}case 2:sumDays31;case 1:sumDaysday;}System.out.println(year年的第month月第day日是第sumDays天);}
}scanner
如何从键盘获取不同类型的变量需要使用scanner类
具体实现步骤
1.导包import java.util.Scanner;
2.Scanner的实例化Scanner scannew Scanner(System.in);
3.调用Scanner类的相关方法next()/nextXxx()来获取指定类型的变量
对于String类字符串型采用next()其它的采用/nextXxx()注意首字母大写
import java.util.Scanner;
public class ScannerTest {public static void main(String[] args) {Scanner scannew Scanner(System.in);int numscan.nextInt(); //int型System.out.println(num);}
}import java.util.Scanner;
public class ScannnerTest02 {public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println(Please enter your name);String namescan.next();System.out.println(name);System.out.println(Please enter your age);int agescan.nextInt();System.out.println(age);System.out.println(Please enter your weight);double weightscan.nextDouble();System.out.println(weight);System.out.println(Whether you join us (true/false));boolean isjoinscan.nextBoolean();System.out.println(isjoin);}
}注意我们需要根据相应的方法来输入指定类型的值。如果输入的数据类型与要求的类型不匹配时会报异常InputMisMatchExce导致程序终止
循环
循环的四个组成部分
1.初始化部分------2.循环条件部分(boolean类型-------3.循环体部分------4.迭代部分
for 循环
for(1初始化部分;2循环条件部分;4迭代部分){3循环体部分;
}实例输入两个数正整数m和n求其最大公约数和最小公倍数
最大公约数首先要确定范围1-两数间的较小数若要满足最大那么从两数间的较小数开始循环找到第一个满足条件的数即可(然后退出循环break)
最小公倍数范围两数中的较大数-两数的乘积后续同理
package my_first_java_code;
import java.util.Scanner;
public class ForTest {public static void main(String[] args) {Scanner scannew Scanner(System.in);System.out.println(请输入第一个正整数);int first_numscan.nextInt();System.out.println(请输入第二个正整数);int second_numscan.nextInt();//求最大公约数//先求出两数的较小数——三目运算符int min(first_numsecond_num)?first_num:second_num;for(int imin;i1;i--) {if(first_num%i0second_num%i0) {System.out.println(最大公约数为i);break;}}int max(first_numsecond_num)?first_num:second_num;for(int jmax;jfirst_num*second_num;j) {if(j%first_num0j%second_num0) {System.out.println(最小公倍数为j);break;}}}
}while 循环
1初始化条件
while(2循环条件){3循环体;4迭代条件;
}do-while 循环
1初始化条件
do{3循环体;4迭代条件;
}while(2循环条件)说明
1.do-while循环至少会执行一次循环体
2.当循环会执行多次时do-while循环和while循环没有区别
实例从键盘读入个数不确定的整数并判断读入数的个数输入0时为结束条件
import java.util.Scanner;
public class CirculateEG {public static void main(String[] args) {Scanner scannew Scanner(System.in);int count0;while(true) {int import_numscan.nextInt();if(import_num!0) {count;System.out.println(输入的个数为count);}elsebreak;}}
}对于该类无法确定循环次数的问题whiletrue/for( ; ; ),然后再用break来控制
【总结】结束循环的方式循环条件返回false循环体中执行break
嵌套循环
外层控制行数内层控制列数
常见模型
/*
*
**
***
****
*****
*/
规律ij(行列)
for(int i1;i5;i){for(int j1;ji;j){System.out.print(*);}System.out.println(); //换行
}/*
*****
****
***
**
*
*/
规律ij5(行列)
for(int i1;i5;i){for(int j1;j5-i;j){System.out.print(*);}System.out.println(); //换行
}实例1九九乘法表
public class Nine_nine_multiplication_table {public static void main(String[] args){for(int i1;i9;i) {for(int j1;ji;j) {System.out.print(i*ji*j );}System.out.println();}}
}实例2输出质数
1
public class Output_prime_numbers {public static void main(String[] args){for(int i2;i100;i) {boolean isFlagtrue;for(int j2;ji;j) { //判断i是否是质数if(i%j0) {isFlagfalse;}}if(isFlagtrue) {System.out.println(i);}}}
}这里使用到一个标志是否除尽需要特别注意的是每次在判断完后需要重置isflag的值
2.优化
判断质数时若已经被整除了那么就不用再循环下去了break对非质数有效
为了判断优化是否有效我们通过记录运行时间来直观的看是否优化单位毫秒
public class Output_prime_number_optimized_V1 {public static void main(String[] args){//获取当前时间距离1970-01-01 000000的时间差long start_timeSystem.currentTimeMillis();for(int i2;i100000;i) {boolean isFlagtrue;for(int j2;ji;j) { //判断i是否是质数if(i%j0) {isFlagfalse;break;}}if(isFlagtrue) {System.out.println(i);}}//获取当前时间距离1970-01-01 000000的时间差long end_timeSystem.currentTimeMillis();System.out.println(该程序运行时间为(end_time-start_time));}
}优化前程序运行时间与优化后程序运行时间如下 很明显时间相差10倍
这里使用到了
long start_timeSystem.currentTimeMillis();System.currentTimeMillis();的返回值为整型
3.再优化
方法数学上有个规律对于一个小于n的整数x若n不能整除x则n必定不能整数n/x那么带来一个明显的优化就是循环控制语句从2到根号n即可。
修改为
for(int j2;jMath.sqrt(i);j)这里对i求根号用到了数学方法
Math.sqrt(); //括号内放开根数再次优化后程序运行时间如下 break和continue
1.breakswitch-case/循环结构中 作用结束当前循环
2.continue循环结构中 作用结束当次循环
相同点在break和continue之后是不能声明执行语句
3.对于嵌套循环内break默认跳出包裹此关键字最近的一层循环
------若要结束某一特定的for循环使用标签continue同理
label:for( ; ;){for( ; ;){break label; //结束指定标识的一层循环结构}
}实例输出质数的另一种写法
label:for(int i2;i100;i) {for(int j2;jMath.sqrt(i);j) { //判断i是否是质数if(i%j0) { //如果出现了整除continue label;}}//能执行到此步骤的都是质数System.out.println(i);
}7591011354)]
break和continue
1.breakswitch-case/循环结构中 作用结束当前循环
2.continue循环结构中 作用结束当次循环
相同点在break和continue之后是不能声明执行语句
3.对于嵌套循环内break默认跳出包裹此关键字最近的一层循环
------若要结束某一特定的for循环使用标签continue同理
label:for( ; ;){for( ; ;){break label; //结束指定标识的一层循环结构}
}实例输出质数的另一种写法
label:for(int i2;i100;i) {for(int j2;jMath.sqrt(i);j) { //判断i是否是质数if(i%j0) { //如果出现了整除continue label;}}//能执行到此步骤的都是质数System.out.println(i);
}