文章目录
- 一、顺序结构
- 二、分支结构
- 2.1 if 语句
- 2.2 switch 语句
- 1. 基本语法
- 2. 执行流程
- 三、循环结构
- 3.1 while循环
- 3.2 break
- 3.3 continue
- 3.4 for循环
- 3.5 do while 循环
- 四、小试牛刀
一、顺序结构
按照代码的顺序一行一行执行
publicclassTest{publicstaticvoidmain(String[]args){System.out.println("aaa");System.out.println("bbb");System.out.println("ccc");}}二、分支结构
2.1 if 语句
1.单if判断
if(布尔表达式){语句;}2.if…else二选一
if(布尔表达式){语句;}else{语句;}3.if…else if…else多分支
if(布尔表达式){语句;}elseif{语句;}else{语句;}4.题目:判断成绩类型
publicclassTest{publicstaticvoidmain(String[]args){intscores=98;if(scores>=90&&scores<=100){System.out.println("优秀");}elseif(scores>=80&&scores<90){System.out.println("良好");}elseif(scores>=70&&scores<80){System.out.println("中等");}elseif(scores>=60&&scores<70){System.out.println("及格");}elseif(scores>=0&&scores<60){System.out.println("不及格");}else{System.out.println("错误数据");}}}5.题目:判断一个数是奇数还是偶数
publicclassTest{publicstaticvoidmain(String[]args){inta=14;if(a%2==0){System.out.println("是偶数");}else{System.out.println("是奇数");}}}6.题目:判断一个年份是否为闰年
普通年份能被4整除且不能被100整除的是闰年(如2020、2024);世纪年份(如1900、2000)则必须能被400整除才是闰年。
publicclassTest{publicstaticvoidmain(String[]args){intyear=2005;if((year%4==0&&year%100!=0)||(year%400==0)){System.out.println("是闰年");}else{System.out.println("是平年");}}}7.悬垂else问题
publicclassTest{publicstaticvoidmain(String[]args){intx=10;inty=20;if(x==20)if(y==10)System.out.println("hehe");elseSystem.out.println("haha");}}//什么都不打印,if / else语句中可以不加括号,也可以写语句(只能写一条语句),此时else是和最接近的if匹配;2.2 switch 语句
1. 基本语法
switch(表达式){case常量1:语句块1;break;case常量2:语句块2;break;// 可以有任意多个case,但常量值不可以重复default:默认语句;break;}2. 执行流程
- 先计算表达式的值
- 和case依次比较,一旦有响应的匹配就执行该项下的语句,直到遇到break时结束
- 当表达式的值没有所项匹配时,执行default
注意:
- 不能做switch的参数的数据类型是long float double boolean ;
- switch 不能表达复杂的条件:
//这样的代码使用if很容易表达,但是使用switch就无法表示。if(num>10&&num<20){system.out.println("hehe");}- switch 虽然支持嵌套,但是很丑,一般不推荐
三、循环结构
3.1 while循环
循环条件为为布尔表达式,值为true,则执行循环语句;否则结束循环。
while(循环条件){循环语句;}题目:判断1~100之间奇数的和
publicclassTest{publicstaticvoidmain(String[]args){inti=1;intsum=0;while(i<100){sum+=i;i+=2;}System.out.println(sum);}}题目:计算5的阶乘
publicclassTest{publicstaticvoidmain(String[]args){inti=1;intret=1;while(i<=5){ret*=i;i++;}System.out.println(ret);}}题目:计算1!+ 2!+ 3!+ 4!+ 5!
publicclassTest{publicstaticvoidmain(String[]args){inti=1;intsum=0;while(i<=5){intj=1;intret=1;while(j<=i){ret*=j;j++;}sum+=ret;i++;}System.out.println(sum);}}3.2 break
break的功能是让循环提前结束。
publicclassTest{publicstaticvoidmain(String[]args){inta=1;while(a<=10){if(a==3){break;}System.out.print(a+" ");a++;}}}//输出1 23.3 continue
continue 的功能是跳过这次循环,立即进入下次循环。
publicclassTest{publicstaticvoidmain(String[]args){inta=1;while(a<=10){if(a==3){a++;continue;}System.out.print(a+" ");a++;}}}//输出1 2 4 5 6 7 8 93.4 for循环
基本语法
for(表达式1;布尔表达式2;表达式3){表达式4;}3.5 do while 循环
基本语法
do{循环语句;}while(循环条件);先执行循环语句,在判定循环条件,循环条件成立则继续进行,否则循环结束。
注意:
- do while 循环后的分号不要忘记
- 一般 do while很少用到,更推荐使用for 和while
例题:打印1~10
publicclassTest{publicstaticvoidmain(String[]args){intnum=1;do{System.out.println(num);num++;}while(num<=10);}}四、小试牛刀
1.判定⼀个数字是否是素数
素数是指大于 1,并且只有 1 和自身两个正因数的自然数。因此,0、1 和负数都不是素数。
解法一:素数只能整除1和它本身
publicclassTest{publicstaticvoidmain(String[]args){intn=3;// 小于等于 1 的整数不是素数if(n<=1){System.out.println("不是素数");return;}inti=2;//除以2 到 n - 1之间的数字for(i=2;i<=n-1;i++){if(n%i==0){System.out.println("不是素数");break;}}if(i>n-1){System.out.println("是素数");}}}解法二:如果 n 是合数,那么它在区间 [2, n / 2] 内必然存在至少一个因数。因此,可以通过枚举该区间判断 n 是否为素数。
publicclassTest{publicstaticvoidmain(String[]args){intn=3;// 小于等于 1 的整数不是素数if(n<=1){System.out.println("不是素数");return;}inti=2;for(i=2;i<=n/2;i++){if(n%i==0){System.out.println("不是素数");break;}}if(i>n/2){System.out.println("是素数");}}}解法三:如果 n 是合数,那么它至少存在一个不大于根号n的因数,因此只需要枚举到根号n
publicclassTest{publicstaticvoidmain(String[]args){intn=3;// 小于等于 1 的整数不是素数if(n<=1){System.out.println("不是素数");return;}inti=2;for(i=2;i<=Math.sqrt(n);i++){if(n%i==0){System.out.println("不是素数");break;}}if(i>Math.sqrt(n)){System.out.println("是素数");}}}注意:自幂数是指一个n位数,它的每个数位上的数字的n次幂之和等于他本身。
自幂数名字:
一位次幂数:独身数;1~9
三位自幂数:水花仙数;
四位自幂数:四叶玫瑰数;
五位自幂数:五角星数;
六位自幂数:六合数;
七位自幂数:北斗七星数;
八位自幂数:八仙数;
九位自幂数:九九重阳数;
十位自幂数:十全十美数;
2.求出100〜999之间的所有“水仙花数”并输出。(“水仙花数”是指⼀个三位数,其各位数字的立方和刚好等于该数本⾝,如: 153 = 1^3 + 5^3 + 3^3 ,则153是⼀个“水仙花数”。
publicclassTest{publicstaticvoidmain(String[]args){for(inti=100;i<999;i++){intsum=0;inttemp=i;while(temp!=0){sum+=Math.pow(temp%10,3);temp/=10;}if(sum==i){System.out.println("水仙花数有 "+i);}}}}//运行结果:该水仙花数为153该水仙花数为370该水仙花数为371该水仙花数为407升级,输出一到六位自幂数
publicclassTest{publicstaticvoidmain(String[]args){for(inti=1;i<999999;i++){//1.求当前数字i是一个几位数intcount=0;//假设i = 123inttemp=i;while(temp!=0){count++;temp/=10;}//temp = 0 count = 3temp=i;//temp = 123intsum=0;while(temp!=0){sum+=Math.pow(temp%10,count);temp/=10;}if(sum==i){System.out.println(count+" 位自幂数为:"+i);}}}}//运行结果1位自幂数为11位自幂数为21位自幂数为31位自幂数为41位自幂数为51位自幂数为61位自幂数为71位自幂数为81位自幂数为93位自幂数为1533位自幂数为3703位自幂数为3713位自幂数为4074位自幂数为16344位自幂数为82084位自幂数为94745位自幂数为547485位自幂数为927275位自幂数为930846位自幂数为5488343.给定两个数,求这两个数的最大公约数
例如:
输入:20 40
输出:20
解题思路:
最大公约数:即两个数据中公共约数的最大者。
求解的方式比较多,此处主要介绍:辗转相除法
publicstaticvoidmain(String[]args){inta=18;intb=24;// 第一步:转为正整数,处理负数边界a=Math.abs(a);b=Math.abs(b);intc=a%b;//a,b大小关系无所谓while(c!=0){a=b;b=c;c=a%b;}System.out.println(b);}4.最小公倍数
公式法(适用于两个数)
若已知两个数 a 和 b,以及它们的最大公因数(Greatest Common Divisor,简称 GCD),可通过公式直接计算最小公倍数:
publicstaticvoidmain(String[]args){intnum1=18;// 保存原始值(后续计算需要用)intnum2=24;inta=num1;// 用于计算GCD的临时变量intb=num2;intc=a%b;// 先求最大公因数(GCD)while(c!=0){a=b;b=c;c=a%b;}intgcd=b;// 此时b为最大公因数// 再用公式计算最小公倍数(LCM)intlcm=(num1*num2)/gcd;System.out.println("最小公倍数是:"+lcm);// 输出结果为72}5.计算1 / 1 - 1 / 2 + 1 / 3 - 1 / 4 + 1 / 5 …… + 1 / 99 - 1 / 100 的值
思路:
从上述表达式可以分析出
该表达式主要由100项,奇数项为正,偶数项为负
publicstaticvoidmain(String[]args){doublesum=0;intflg=1;for(inti=1;i<=100;i++){sum+=1.0/i*flg;flg=-flg;}System.out.println(sum);}