一文带你深入理解【Java基础】· Java基本语法:程序流程控制
写在前面
Hello大家好, 我是【麟-小白】,一位软件工程专业的学生,喜好计算机知识。希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!!
如果小哥哥小姐姐们对我的文章感兴趣,请不要吝啬你们的小手,多多点赞加关注呀!❤❤❤ 爱你们!!!
目录
写在前面
往期回顾
前言:
1. 顺序结构
1.1 顺序结构
2. 分支结构
2.1 if-else结构
2.2 switch-case结构
3. 循环结构
3.1 for循环
3.2 while循环
3.3 do-while循环
3.4 嵌套循环
4. 特殊流程控制语句
4.1 break语句
4.2 continue语句
4.3 特殊流程控制语句
结语
【往期回顾】
一文带你深入理解【Java基础】 · Java语言概述
一文带你深入理解【Java基础】 · Java基本语法:变量
一文带你深入理解【Java基础】· Java基本语法:运算符
【习题总结】
【Java基础】· Java基本语法(下):程序流程控制习题总结
前言:
- 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块。
- 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即:
- 顺序结构
- 分支结构
- 循环结构
- 顺序结构
- 程序从上到下逐行地执行,中间没有任何判断和跳转。
- 分支结构
- 根据条件,选择性地执行某段代码。
- 有if…else和switch-case两种分支语句。
- 循环结构
- 根据循环条件,重复性的执行某段代码。
- 有while、do…while、for三种循环语句。
- 注:JDK1.5提供了foreach循环,方便的遍历集合、数组元素
1. 顺序结构
1.1 顺序结构
- Java中定义成员变量时采用合法的前向引用。如:
public class Test{int num1 = 12;int num2 = num1 + 2; } //错误形式: public class Test{int num2 = num1 + 2;int num1 = 12; }
2. 分支结构
2.1 if-else结构
- 分支结构:if-else使用说明
- 条件表达式必须是布尔表达式(关系表达式或逻辑表达式)、布尔变量
- 语句块只有一条执行语句时,一对{}可以省略,但建议保留
- if-else语句结构,根据需要可以嵌套使用
- 当if-else结构是“多选一”时,最后的else是可选的,根据需要可以省略
- 当多个条件是“互斥”关系时,条件判断语句及执行语句间顺序无所谓
- 当多个条件是“包含”关系时,“小上大下 / 子上父下”
例题:
/* 分支结构中的if-else(条件判断结构)一、三种结构第一种: if (条件表达式) {执行表达式 }第二种:二选一 if (条件表达式) {执行表达式1 } else {执行表达式2 }第三种:n选一 if (条件表达式) {执行表达式1 } else if (条件表达式) {执行表达式2 } else if (条件表达式) {执行表达式3 } ... else {执行表达式n }*/ class IfTest {public static void main(String[] args) {// 举例1int heartBeats = 79;if (heartBeats < 60 || heartBeats > 100) {System.out.println("需要做进一步检查");}System.out.println("检查结束");// 举例2int age = 23;if (age < 18) {System.out.println("你还没有成年");} else {System.out.println("你已经成年了");}// 举例3if (age < 0) {System.out.println("您输入的数据非法");} else if (age < 18) {System.out.println("青少年时期");} else if (age < 35) {System.out.println("青壮年时期");} else if (age < 60) {System.out.println("中年时期");} else if (age < 120) {System.out.println("老年时期");} else {System.out.println("你是要成仙啊~~");}} }
- if语句例题一:
岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果:成绩为100分时,奖励一辆BMW;成绩为(80,99]时,奖励一台iphone xs max;当成绩为[60,80]时,奖励一个 iPad;其它时,什么奖励也没有。请从键盘输入岳小鹏的期末成绩,并加以判断/* 岳小鹏参加Java考试,他和父亲岳不群达成承诺: 如果: 成绩为100分时,奖励一辆BMW; 成绩为(80,99]时,奖励一台iphone xs max; 当成绩为[60,80]时,奖励一个 iPad; 其它时,什么奖励也没有。 请从键盘输入岳小鹏的期末成绩,并加以判断说明: 1. else 结构是可选的。 2. 针对于条件表达式:> 如果多个条件表达式之间是“互斥”关系(或没有交集的关系),哪个判断和执行语句声明在上面还是下面,无所谓。> 如果多个条件表达式之间有交集的关系,需要根据实际情况,考虑清楚应该将哪个结构声明在上面。> 如果多个条件表达式之间有包含的关系,通常情况下,需要将范围小的声明在范围大的上面。否则,范围小的就没机会执行了。 */import java.util.Scanner;class IfTest {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入岳小鹏期末成绩:(0-100)");int score = scan.nextInt();if (score == 100) {System.out.println("奖励一辆BMW");// be my wife! BMW <---> MSN} else if (score > 80 && score <= 99) {System.out.println("奖励一台iphone xs max");} else if (score >= 60 && score <= 80) {System.out.println("奖励一个 iPad");} else {System.out.println("什么奖励也没有");}} }
- if语句例题二:
编写程序:由键盘输入三个整数分别存入变量num1、num2、num3,对它们进行排序(使用 if-else if-else),并且从小到大输出。/* 编写程序:由键盘输入三个整数分别存入变量num1、num2、num3, 对它们进行排序(使用 if-else if-else),并且从小到大输出。说明: 1. if-else结构是可以相互嵌套的。 2. 如果if-else结构中的执行语句只有一行时,对应的一对{}可以省略的。但是,不建议大家省略。 */class IfTest2 {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);System.out.println("请输入第一个整数:");int num1 = scanner.nextInt();System.out.println("请输入第二个整数:");int num2 = scanner.nextInt();System.out.println("请输入第三个整数:");int num3 = scanner.nextInt();if (num1 >= num2) {if (num3 >= num1)System.out.println(num2 + "," + num1 + "," + num3);else if (num3 <= num2)System.out.println(num3 + "," + num2 + "," + num1);elseSystem.out.println(num2 + "," + num3 + "," + num1);} else {if (num3 >= num2)System.out.println(num1 + "," + num2 + "," + num3);else if (num3 <= num1)System.out.println(num3 + "," + num1 + "," + num2);elseSystem.out.println(num1 + "," + num3 + "," + num2);}} }
- if语句例题三:
我家的狗5岁了,5岁的狗相当于人类多大呢?其实,狗的前两年每 一年相当于人类的10.5岁,之后每增加一年就增加四岁。那么5岁的狗相当于人类多少年龄呢?应该是:10.5 + 10.5 + 4 + 4 + 4 = 33岁。编写一个程序,获取用户输入的狗的年龄,通过程序显示其相当于人 类的年龄。如果用户输入负数,请显示一个提示信息。class IfExer {public static void main(String[] args) {int dogAge = 6;if (dogAge >= 0 && dogAge <= 2) {System.out.println("相当于人的年龄:" + dogAge * 10.5);} else if (dogAge > 2) {System.out.println("相当于人的年龄:" + (2 * 10.5 + (dogAge - 2) * 4));} else {System.out.println("狗狗还没出生呢!");}} }
- 例题四:如何获取一个随机数:10 - 99
class IfExer {public static void main(String[] args) {int value = (int) (Math.random() * 90 + 10);// [0.0,1.0) --> [0.0,90.0) --->[10.0, 100.0) -->[10,99]System.out.println(value);// 公式:[a,b] : (int)(Math.random() * (b - a + 1) )+ a} }
- if语句例题五:
大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件:高:180cm以上;富:财富1千万以上;帅:是。如果这三个条件同时满足,则:“我一定要嫁给他!!!”如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。”如果三个条件都不满足,则:“不嫁!”/* 大家都知道,男大当婚,女大当嫁。那么女方家长要嫁女儿,当然要提出一定的条件: 高:180cm以上;富:财富1千万以上;帅:是。 如果这三个条件同时满足,则:“我一定要嫁给他!!!” 如果三个条件有为真的情况,则:“嫁吧,比上不足,比下有余。” 如果三个条件都不满足,则:“不嫁!” */import java.util.Scanner;class IfExer1 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入你的身高:(cm)");int height = scan.nextInt();System.out.println("请输入你的财富:(千万)");double wealth = scan.nextDouble();/** 方式一: System.out.println("请输入你是否帅:(true/false)"); * boolean isHandsome = scan.nextBoolean();* * if(height >= 180 && wealth >= 1 && isHandsome) {* System.out.println("我一定要嫁给他!!!"); * } else if (height >= 180 || wealth >= 1 || isHandsome) { * System.out.println("嫁吧,比上不足,比下有余。");* } else {* System.out.println("不嫁!"); * }*/// 方式二:System.out.println("请输入你是否帅:(是/否)");String isHandsome = scan.next();if (height >= 180 && wealth >= 1 && isHandsome.equals("是")) {System.out.println("我一定要嫁给他!!!");} else if (height >= 180 || wealth >= 1 || isHandsome.equals("是")) {System.out.println("嫁吧,比上不足,比下有余。");} else {System.out.println("不嫁!");}} }
2.2 switch-case结构
说明:
- 根据switch表达式中的值,依次匹配各个case中的常量。一旦匹配成功,则进入相应case结构中,调用其执行语句。当调用完执行语句以后,则仍然继续向下执行其他case结构中的执行语句,直到遇到break关键字或此switch-case结构末尾结束为止。
- break,可以使用在switch-case结构中,表示一旦执行到此关键字,就跳出switch-case结构
- switch结构中的表达式,只能是如下的6种数据类型之一: byte 、short、char、int、枚举类型(JDK5.0新增)、String类型(JDK7.0新增)
- break关键字是可选的。
- default:相当于if-else结构中的else. default结构是可选的,而且位置是灵活的。
- case子句中的值必须是常量,不能是变量名或不确定的表达式值;
- 同一个switch语句,所有case子句中的常量值互不相同;
- break语句用来在执行完一个case分支后使程序跳出switch语句块;如果没有break,程序会顺序执行到switch结尾;
- default子句是可任选的。同时,位置也是灵活的。当没有匹配的case时,执行default;
class SwitchCaseTest {public static void main(String[] args) {int number = 5;switch (number) {case 0:System.out.println("zero");break;case 1:System.out.println("one");break;case 2:System.out.println("two");break;case 3:System.out.println("three");break;default:System.out.println("other");// break;}String season = "summer";switch (season) {case "spring":System.out.println("春暖花开");break;case "summer":System.out.println("夏日炎炎");break;case "autumn":System.out.println("秋高气爽");break;case "winter":System.out.println("冬雪皑皑");break;default:System.out.println("季节输入有误");break;}//**************如下的两种情况都编译不通过*********************//情况一/*boolean isHandsome = true;switch(isHandsome){case true:System.out.println("我好帅啊~~~");break;case false:System.out.println("我好丑啊~~~");break;default:System.out.println("输入有误~~~");}*///情况二/*int age = 10;switch(age){case age > 18:System.out.println("成年了");break;default:System.out.println("未成年");}*/} }
例题一:对学生成绩大于60分的,输出“合格”。低于60分的,输出“不合格”。
说明:如果switch-case结构中的多个case的执行语句相同,则可以考虑进行合并。
class SwitchCaseTest1 {public static void main(String[] args) {/*int score = 78;switch(score) {case 0:case 1:case 2:...case 100:}*//*int score = 78;if(score >= 60){} else {}*/int score = 78;switch(score / 10) {case 0:case 1:case 2:case 3:case 4:case 5:System.out.println("不及格");break;case 6:case 7:case 8:case 9:case 10:System.out.println("及格");break;}//更优的解决方案:switch(score / 60) {case 0:System.out.println("不及格");break;case 1:System.out.println("及格");break;}} }
例题二:编写程序:从键盘上输入2019年的“month”和“day”,要求通过程序输出输入的日期为2019年的第几天。
2 15: 31 + 15
5 7: 31 + 28 + 31 + 30 + 7
....
说明:break在switch-case中是可选的
import java.util.Scanner; class SwitchCaseTest2 {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入2019年的month:");int month = scan.nextInt();System.out.println("请输入2019年的day:");int day = scan.nextInt();//定义一个变量来保存总天数int sumDays = 0;//方式一:冗余/*if(month == 1){sumDays = day;} else if (month == 2) {sumDays = 31 + day;} else if (month == 3) {sumDays = 31 + 28 + day;} else if (month == 4) {sumDays = 31 + 28 + 31 + day;}//...else {//month == 12//sumDays = ..... + day;}*///方式二:冗余/*switch(month) {case 1:sumDays = day;break;case 2:sumDays = 31 + day;break;case 3:sumDays = 31 + 28 + day;break;...}*/switch(month) {case 12:sumDays += 30;case 11:sumDays += 31;case 10:sumDays += 30;case 9:sumDays += 31;case 8:sumDays += 31;case 7:sumDays += 30;case 6:sumDays += 31;case 5:sumDays += 30;case 4:sumDays += 31;case 3:sumDays += 28;case 2:sumDays += 31;case 1:sumDays += day;}System.out.println("2019年" + month + "月" + day + "日是当年的第" + sumDays + "天");} }
例题三:
从键盘分别输入年、月、日,判断这一天是当年的第几天
注:判断一年是否是闰年的标准:
1)可以被4整除,但不可被100整除
或
2)可以被400整除
说明:
1. 凡是可以使用switch-case的结构,都可以转换为if-else。反之,不成立。
2. 我们写分支结构时,当发现既可以使用switch-case,(同时,switch中表达式的取值情况不太多),
又可以使用if-else时,我们优先选择使用switch-case。原因:switch-case执行效率稍高。import java.util.Scanner; class SwitchCaseExer {public static void main(String[] args) {Scanner scan = new Scanner(System.in);System.out.println("请输入year:");int year = scan.nextInt();System.out.println("请输入month:");int month = scan.nextInt();System.out.println("请输入day:");int day = scan.nextInt();//定义一个变量来保存总天数int sumDays = 0;switch(month){case 12:sumDays += 30;case 11:sumDays += 31;case 10:sumDays += 30;case 9:sumDays += 31;case 8:sumDays += 31;case 7:sumDays += 30;case 6:sumDays += 31;case 5:sumDays += 30;case 4:sumDays += 31;case 3://sumDays += 28;//判断year是否是闰年if((year % 4 == 0 && year % 100 != 0 ) || year % 400 == 0){sumDays += 29;}else{sumDays += 28;}case 2:sumDays += 31;case 1:sumDays += day;}System.out.println(year + "年" + month + "月" + day + "日是当年的第" + sumDays + "天");} }
switch和if语句的对比:if和switch语句很像,具体什么场景下,应用哪个语句呢?
- 如果判断的具体数值不多,而且符合byte、short 、char、int、String、枚举等几种类型。虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。
- 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。也就是说,使用switch-case的,都可以改写为if-else。反之不成立。
3. 循环结构
- 在某些条件满足的情况下,反复执行特定代码的功能
- for 循环
- while 循环
- do-while 循环
- 初始化部分(init_statement)
- 循环条件部分(test_exp)
- 循环体部分(body_statement)
- 迭代部分(alter_statement)
3.1 for循环
语法格式 :for (①初始化部分; ②循环条件部分; ④迭代部分)}③循环体部分;}执行过程:①-②-③-④-②-③-④-②-③-④-.....-②说明:②循环条件部分为boolean类型表达式,当值为false时,退出循环①初始化部分可以声明多个变量,但必须是同一个类型,用逗号分隔④可以有多个变量更新,用逗号分隔例题一:
class ForTest {public static void main(String[] args) {/*System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");System.out.println("Hello World!");*/for(int i = 1;i <= 5;i++){ //i:1,2,3,4,5System.out.println("Hello World!");}//i:在for循环内有效。出了for循环就失效了。//System.out.println(i);//练习:int num = 1;for(System.out.print('a');num <= 3;System.out.print('c'),num++){System.out.print('b');}//输出结果:abcbcbcSystem.out.println();//例题:遍历100以内的偶数,输出所有偶数的和,输出偶数的个数int sum = 0;//记录所有偶数的和int count = 0;//记录偶数的个数for(int i = 1;i <= 100;i++){if(i % 2 == 0){System.out.println(i);sum += i;count++;}//System.out.println("总和为:" + sum);}System.out.println("总和为:" + sum);System.out.println("个数为:" + count);} }
例题二:编写程序从1循环到150,并在每行打印一个值,另外在每个3的倍数行上打印出“foo”,在每个5的倍数行上打印“biz”,在每个7的倍数行上打印输出“baz”。
class ForTest1 {public static void main(String[] args) { for(int i = 1;i <= 150;i++){ System.out.print(i + " ");if(i % 3 == 0){System.out.print("foo ");}if(i % 5 == 0){System.out.print("biz ");}if(i % 7 == 0){System.out.print("baz ");}//换行System.out.println();}} }
例题三:题目:输入两个正整数m和n,求其最大公约数和最小公倍数。
比如:12和20的最大公约数是4,最小公倍数是60。说明:break关键字的使用:一旦在循环中执行到break,就跳出循环
import java.util.Scanner; class ForTest {public static void main(String[] args){Scanner scan = new Scanner(System.in);System.out.println("请输入第一个正整数:");int m = scan.nextInt();System.out.println("请输入第二个正整数:");int n = scan.nextInt();//获取最大公约数//1.获取两个数中的较小值int min = (m <= n)? m : n;//2.遍历for(int i = min;i >= 1 ;i--){if(m % i == 0 && n % i == 0){System.out.println("最大公约数为:" + i);break;//一旦在循环中执行到break,就跳出循环}}//获取最小公倍数//1.获取两个数中的较大值int max = (m >= n)? m : n;//2.遍历for(int i = max;i <= m * n;i++){if(i % m == 0 && i % n == 0){System.out.println("最小公倍数:" + i);break;}}} }
3.2 while循环
语法格式①初始化部分while(②循环条件部分)}③循环体部分;④迭代部分;}执行过程:①-②-③-④-②-③-④-②-③-④-...-②说明:
- 注意不要忘记声明④迭代部分。否则,循环将不能结束,变成死循环。
- for循环和while循环可以相互转换
- 区别:for循环和while循环的初始化条件部分的作用范围不同。
例题一:
class WhileTest {public static void main(String[] args) {//遍历100以内的所有偶数int i = 1;while(i <= 100){if(i % 2 == 0){System.out.println(i);} i++;}//出了while循环以后,仍可以调用。System.out.println(i);//101} }
3.3 do-while循环
语法格式①初始化部分;do{③循环体部分④迭代部分}while(②循环条件部分);执行过程:①-③-④-②-③-④-②-③-④-...②说明:
- do-while循环至少执行一次循环体。
- 开发中,使用for和while更多一些。较少使用do-while
例题一:class DoWhileTest {public static void main(String[] args) {//遍历100以内的偶数,并计算所有偶数的和及偶数的个数int num = 1;int sum = 0;//记录总和int count = 0;//记录个数do{ if(num % 2 == 0){System.out.println(num);sum += num;count++;}num++;}while(num <= 100);System.out.println("总和为:" + sum);System.out.println("个数为:" + count);//*************体会do-while至少执行一次循环体***************int number1 = 10;while(number1 > 10){System.out.println("hello:while");number1--;}int number2 = 10;do{System.out.println("hello:do-while");number2--;}while(number2 > 10);} }
例题二:题目:从键盘读入个数不确定的整数,并判断读入的正数和负数的个数,输入为0时结束程序。
说明:
1. 不在循环条件部分限制次数的结构:for(;;) 或 while(true)
2. 结束循环有几种方式?
方式一:循环条件部分返回false
方式二:在循环体中,执行breakimport java.util.Scanner; class ForWhileTest {public static void main(String[] args) { Scanner scan = new Scanner(System.in);int positiveNumber = 0;//记录正数的个数int negativeNumber = 0;//记录负数的个数for(;;){//while(true){ int number = scan.nextInt();//判断number的正负情况if(number > 0){positiveNumber++;}else if(number < 0){negativeNumber++;}else{//一旦执行break,跳出循环break;}}System.out.println("输入的正数个数为:" + positiveNumber);System.out.println("输入的负数个数为:" + negativeNumber); } }
3.4 嵌套循环
嵌套循环(多重循环)
- 将一个循环放在另一个循环体内,就形成了嵌套循环。其中,for ,while ,do…while均可以作为外层循环或内层循环。
- 实质上,嵌套循环就是把内层循环当成外层循环的循环体。当只有内层循环的循环条件为false时,才会完全跳出内层循环,才可结束外层的当次循环,开始下一次的循环。
- 设外层循环次数为m次,内层为n次,则内层循环体实际上需要执行m*n次。
嵌套循环的使用
1.嵌套循环:将一个循环结构A声明在另一个循环结构B的循环体中,就构成了嵌套循环2.
外层循环:循环结构B
内层循环:循环结构A3. 说明
① 内层循环结构遍历一遍,只相当于外层循环循环体执行了一次
② 假设外层循环需要执行m次,内层循环需要执行n次。此时内层循环的循环体一共执行了m * n次4. 技巧:
外层循环控制行数,内层循环控制列数例题一:嵌套循环的应用1:
九九乘法表
1 * 1 = 1
2 * 1 = 2 2 * 2 = 4
。。。
9 * 1 = 9 。。。 9 * 9 = 81class NineNineTable {public static void main(String[] args) {for(int i = 1;i <= 9;i++){ for(int j = 1;j <= i;j++){System.out.print(i + " * " + j + " = " + (i * j) + " ");}System.out.println();}} }
例题二:
class ForForTest {public static void main(String[] args) { //******//System.out.println("******");for(int i = 1;i <= 6;i++){System.out.print('*');}System.out.println("\n");/**************************/for(int j = 1;j <= 4;j++ ){for(int i = 1;i <= 6;i++){System.out.print('*');}System.out.println();}/* i(行号) j(*的个数)* 1 1** 2 2*** 3 3**** 4 4***** 5 5*/for(int i = 1;i <= 5;i++){//控制行数for(int j = 1;j <= i;j++){ //控制列数System.out.print("*");}System.out.println();} /* i(行号) j(*的个数) 规律:i + j = 5 换句话说:j = 5 - i;**** 1 4*** 2 3** 3 2* 4 1*/ for(int i = 1;i <= 4;i++){for(int j = 1;j <= 5 - i;j++){System.out.print("*"); }System.out.println();}/***************************/} }
4. 特殊流程控制语句
4.1 break语句
break语句用于终止某个语句块的执行{ ……break;……}break语句出现在多层嵌套的语句块中时,可以通过标签指明要终止的是哪一层语句块label1:{ ……label2:{ ……label3:{ ……break label2;……}}}
4.2 continue语句
continue 语句
- continue只能使用在循环结构中
- continue语句用于跳过其所在循环语句块的一次执行,继续下一次循环
- continue语句出现在多层嵌套的循环语句体中时,可以通过标签指明要跳过的是哪一层循环
break和continue关键字的使用
使用范围 循环中使用的作用(不同点) 相同点
break: switch-case
循环结构中 结束当前循环 关键字后面不能声明执行语句continue: 循环结构中 结束当次循环 关键字后面不能声明执行语句
例题一:(方法一)
100以内的所有质数的输出。
质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。最小的质数是:2
class PrimeNumberTest {public static void main(String[] args) { boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值for(int i = 2;i <= 100;i++){ //遍历100以内的自然数for(int j = 2;j < i;j++){ //j:被i去除if(i % j == 0){ //i被j除尽isFlag = false;}}//if(isFlag == true){System.out.println(i);}//重置isFlagisFlag = true;}} }
方法二:
100000以内的所有质数的输出。
质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。class PrimeNumberTest1 {public static void main(String[] args) {boolean isFlag = true;//标识i是否被j除尽,一旦除尽,修改其值int count = 0;//记录质数的个数//获取当前时间距离1970-01-01 00:00:00 的毫秒数long start = System.currentTimeMillis();for(int i = 2;i <= 100000;i++){ //遍历100000以内的自然数//优化二:对本身是质数的自然数是有效的。//for(int j = 2;j < i;j++){for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除 if(i % j == 0){ //i被j除尽isFlag = false;break;//优化一:只对本身非质数的自然数是有效的。}}//if(isFlag == true){//System.out.println(i);count++;}//重置isFlagisFlag = true;}//获取当前时间距离1970-01-01 00:00:00 的毫秒数long end = System.currentTimeMillis();System.out.println("质数的个数为:" + count);System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13} }
方法三:
100000以内的所有质数的输出。
质数:素数,只能被1和它本身整除的自然数。-->从2开始,到这个数-1结束为止,都不能被这个数本身整除。class PrimeNumberTest2 {public static void main(String[] args) {int count = 0;//记录质数的个数//获取当前时间距离1970-01-01 00:00:00 的毫秒数long start = System.currentTimeMillis();label:for(int i = 2;i <= 100000;i++){ //遍历100000以内的自然数for(int j = 2;j <= Math.sqrt(i);j++){//j:被i去除 if(i % j == 0){ //i被j除尽continue label;}}//能执行到此步骤的,都是质数count++;}//获取当前时间距离1970-01-01 00:00:00 的毫秒数long end = System.currentTimeMillis();System.out.println("质数的个数为:" + count);System.out.println("所花费的时间为:" + (end - start));//17110 - 优化一:break:1546 - 优化二:13} }
4.3 特殊流程控制语句
- return:并非专门用于结束循环的,它的功能是结束一个方法。当一个方法执行到一个return语句时,这个方法将被结束。
- 与break和continue不同的是,return直接结束整个方法,不管这个return处于多少层循环之内。
特殊流程控制语句说明
- break只能用于switch语句和循环语句中。
- continue 只能用于循环语句中。
- 二者功能类似,但continue是终止本次循环,break是终止本层循环。
- break、continue之后不能有其他的语句,因为程序永远不会执行其后的语句。
- 标号语句必须紧接在循环的头部。标号语句不能用在非循环语句的前面。
- 很多语言都有goto语句,goto语句可以随意将控制转移到程序中的任意一条语句上,然后执行它。但使程序容易出错。Java中的break和continue是不同于goto的。
结语
本人会持续更新文章的哦!希望大家一键三连,你们的鼓励就是作者不断更新的动力
一文带你深入理解【Java基础】· Java基本语法:程序流程控制相关推荐
- Java基本语法-程序流程控制
程序流程控制 流程控制语句是用来控制程序中各语句执行顺序的语句,可以把语句组合成能完成一定功能的小逻辑模块. 其流程控制方式采用结构化程序设计中规定的三种基本流程结构,即: 顺序结构.分支结构.循环结 ...
- java循环语句三角形_JAVA——程序流程控制——循环语句——for循环(打印三角形)...
//要求:用*打印出一个直角三角形.高8*. public class zhijiaosanjiaoxing { public static void main(String[] args) { fo ...
- Python基础篇:Python 程序流程控制,让你的代码有理有据
前言 大家好,辣条哥又来了,昨天出去玩了没有更新,所以今天直接来干的,跟大家讲一下Python 程序的流程控制 和其它编程语言一样,按照执行流程划分,Python 程序也可分为 3 大结构,即顺序结构 ...
- 一文带你深入理解【Java基础】· 枚举类
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
- 一文带你深入理解【Java基础】· 面向对象编程(下)②代码块、final和abstract
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
- 一文带你深入理解【Java基础】· 数组
写在前面 Hello大家好, 我是[麟-小白],一位软件工程专业的学生,喜好计算机知识.希望大家能够一起学习进步呀!本人是一名在读大学生,专业水平有限,如发现错误或不足之处,请多多指正!谢谢大家!!! ...
- 一文带你深入理解JVM内存模型
一文带你深入理解JVM内存模型 一.JAVA的并发模型 共享内存模型 在共享内存的并发模型里面,线程之间共享程序的公共状态,线程之间通过读写内存中公共状态来进行隐式通信 该内存指的是主内存,实际上是物 ...
- [重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别
[重学Java基础][Java IO流][Exter.2]IO流中几种不同的读写方法的区别 Read 读入方法 read(): 一般是这种形式 public int read() 1.从流数据中读取的 ...
- Java基础----Java编程语言概述
Java基础----Java编程语言概述 文章目录 Java基础----Java编程语言概述 Java编程语言概述 1-1 软件开发介绍 1.1软件开发介绍 1.2 常用命令 1-2 计算机编程语言介 ...
最新文章
- kafka-2.11-2.3.0版本配置文件参数详解_Kafka版本特性总结
- three.js 背景图片
- uml 时序图_UML学习-14种UML图
- Microsoft公司的匈牙利法命名规则
- 数据类型之字符串练习
- IoTDI2019论文列表
- 云存储精华问答 | 如何选择云迁移策略?
- [转载] 【零基础学爬虫】python中的yield详解
- exc_bad_instruction(code=EXC_I386_INVOP,subcode=0x0) 错误
- git clone 出现fatal: unable to access ‘https://github 类错误解决方法
- UDP实现简单的超时重传
- 2020中青杯本科题目学习
- Terminating app due to uncaught exception ‘NSInvalidArgumentException‘
- springboot-1-搭建一个springboot项目
- uibot和按键精灵区别_uibot和按键精灵有什么区别?
- Windows 下载WebStorm
- NIO及多线程实现聊天室完整版
- Python批量更改txt文本每行数据
- 生活都不容易,如果你感觉生活很苦,那就说明你在吃苦,同样,如果你感觉生活有奔头,那就是在努力。
- 虚幻4游戏开发_4_导入fbx和编辑
热门文章
- 被误传了数千年的四大成语 相濡以沫 女子与小人难养也 无度不丈夫 以德抱怨
- Alamofire学习(一)网络基础
- 子曾经曰过,别人对你的看法都是你表演给他们看的结果。
- python openslide 查看并保存切片的略缩图,并将Image图片转换成Base64
- BIDS Helper (Free)微软BI开发辅助工具--非常棒
- SQLServer各个版本之间的差异
- 身体很弱的程序员的跑步计划
- 记账后,如何避免误删除账目
- 教你轻松分清pandas中的axis=0,axis=1具体含义
- 电脑tdr太低是什么意思_电脑越来越慢怎么办?我教你一招很简单的