顺序结构
程序进入主方法之后依次执行里面的代码。
选择结构
if
单分支
- 语法结构:
if(表达式.boolean值){
执行语句;
}
- 执行顺序:
1:判定表达式的值,如果表达式的值位true执行对应的执行语句
2:表达式值是false 整个if语句都不执行
- 注意事项:
当if分支中存在单条语句时可以省略大括号。
当整个if的表达式无论真假,执行之后都会执行后续代码
以后多大数的逻辑不单单只有两种情况,有待加强。
单分支结构永远只能保证一种情况下会做什么操作。
- 代码
public class Demo01{ public static void main(String[] args){
if(4<3){
//System.out.println("我被执行了 if执行语句");
System.out.println("3"); }
System.out.println("我是main方法中的执行语句");
}
}
双分支
- 语法结构:
if(boolean值表达式){
执行语句1;
}else{
执行语句2;
}
- 执行顺序:
1:判定表达式的结果,如果表达式的结果是true 执行对应的执行语句1
2:如果表达式的结果是false 那么执行对应的执行语句2
- 注意事项:
可以省略大括号 保证执行语句只有一行即可
整个判定结果结束执行,执行语句执行之后
继续执行后续代码
- 代码
public class Demo02{
public static void main(String[] args){
//猜数小游戏
//声明一个变量存放结果
int result = 29;
//声明一个变量模拟存放用户输入的值
int inputNum = 30;
//String msg = result==inputNum?"恭喜你猜对了":"捞。。。"; //System.out.println(msg);
if(result==inputNum){
System.out.println("恭喜你猜对了");
}else{
System.out.println("捞。。。");
}
System.out.println("哈哈哈啊哈");
}
}
多分支
-
语法结构:
if(表达式1){ 执行语句1; }else if(表达式2){ 执行语句2; }else if(表达式3){ 执行语句3; }else if(表达式4){ 执行语句4; }................{ }else{ 执行语句n; }
-
执行顺序:
1:判定表达式的结果,如果表达式的结果是true执行对应的执行语句。整个多分支结果执行结束。
2:依次判定后续的else if,只要有一个判定结果是true那么整个多分支结束。
3:如果所有的判定条件都为假,执行最后的else内容。
- 代码
/*
随机生成一个分数,查看分数所在的分段。
90以上 --> 王者
80以上 --> 大师
70以上 --> 钻石
60以上 --> 铂金
其它 --> 倔强青铜
生成一个[20-99]之间的整数
Math.random();-->[0,1)*99;
[0,99)(int)(Math.random()*最大数)
[0,99](int)(Math.random()*最大数+1)
[20,99] Math.random()*80+20
[min,max] Math.random()*(max-min+1)+min;
*/
public class Demo03{
public static void main(String[] args){
// 判定分数:
int score =(int)(Math.random()*80+20);
System.out.println("score="+score);
//判定分数
if(score>=90){
System.out.println("王者");
}else if(score>=80){
System.out.println("大师");
}else if(score>=70){
System.out.println("钻石");
}else if(score>=60){
System.out.println("铂金");
}else{
System.out.println("你的水平可能不适合这个游戏");
}
}
}
switch
- 语法结构
switch(表达式){
case 值1:
执行语句1;
break;
case 值2:
执行语句2;
break;
case 值3:
执行语句3;
break;
.......
default:
执行语句3;
}
首先计算switch中的表达式的值然后依次匹配对应的 case,如果匹配成功,执行对应的执行语句
这里注意要通过break防止穿透
如果所有的case都不匹配执行最后的default
- 注意事项
1:防止case穿透
2: 利用case穿透做些文章
3: 将没有罗列出来的情况通过default去编写
4: switch只能做等值判定 if可以做区间判定
5: default位置可以任意 一般放到最后
6: switch表达式值不能是long float double boolean 类型
jdk1.5之后允许switch中存放枚举类型enum
jdl1.7之后允许switch中存放String类型
保证case也是String类型 jdk12之后
修改switch的写法-->扩展练习
- 代码
public class Demo04{
public static void main(String[] args){
//声明一个月份
//int month = 9;
//(int)(Math.random()*20+1);
//输出月份
//System.out.println(month);
String l = "12";
switch(l){
case 3:
case 4:
case 5:
System.out.println("春天在哪里");
break;
case 6:
case 7:
case 8:
System.out.println("夏天夏天悄悄过去留下小秘密");
break;
case 9:
case 10:
case 11:
System.out.println("就让秋风带走我的思念");
break;
case 12:
case 1:
case 2:
System.out.println("你就像冬天里的一把火");
break;
deflt:
System.out.println("你眼睛卡吗?");
break;
}
}
循环结构
while
-
语法结构
while(循环条件|表达式){ 循环体;//执行语句 }
-
执行顺序
1:判定循环条件,如果条件为真执行循环体1次 2:再次判定循环条件,直到循环条件不满足,整个循环结束。
-
注意事项
凡是不确定循环次数就可以优先考虑while循环
-
代码
/*计算1-100的和
捞的方法:
//计算1-100的和
int sum = 0;
int num = 1;
sum = num+sum;
num++;
sum = num+sum;
num++;
sum = num+sum;
num++;
sum = num+sum;
num++;
sum = num+sum;
*/
public class Demo05{
public static void main(String[] args){
//1声明变量存放结果
int sum = 0;
//2声明变量存放1-100之间的数
int num = 1;
while(num<=100){
sum+=num;
num++;
}
System.out.println(num+"=="+sum);
}
}
do-while
-
语法结构
do{ 循环体; }while(循环条件);
-
执行顺序
1:先执行循环提一次 2:再判定循环条件,如果条件为真执行循环体1次 3:再次判定循环条件,直到循环条件不满足,整个循环结束。
-
注意事项
while先判定在执行 do-while先执行在判定 考试 补考 清考
-
代码
public class Demo06{
public static void main(String[] args){
//1声明变量存放结果
int sum = 0;
//2声明变量存放1-100之间的数
int num = 1;
do{
sum+=num;
num++;
}while(num<=100);
System.out.println(num+"=="+sum);
}
}
for
-
语法结构
for(循环变量;循环条件;改变循环变量的表达式){ 循环体; }
-
执行顺序
1:声明循环变量 (降低生命周期 调高内存利用率) 2:判定循环条件 如果循环条件为真,执行循环体一次 3:改变循环变量的值,判定循环条件,直到循环条件不满足 整个循环结束
-
注意事项
1:确定循环次数可以使用for循环
-
代码
public class Demo07{
public static void main(String[] args){
//声明存放结果
int sum = 0;
for(int num=1;num<=100;num++){
sum += num;
}
System.out.println(sum+"=="+num);
}
}
/**
计算斐波那锲数列 兔子问题
1 1 2 3 5 8 13 。。。。
计算第20个数字是多少?
第一项:1
第二项:1
第三项:前两项的和
第20项: 第19+第18
int num1 = 1;
int num2 = 1;
int num3 = num1+num2;
num1 = num2;// 第一项里存放的是第二项的值
num2 = num3;//第二项里存放的是第三项的值
num3 = num1+num2;
num1 = num2;// 第一项里存放的是第二项的值
num2 = num3;//第二项里存放的是第三项的值
num3 = num1+num2;
*/
public class Demo08{
public static void main(String[] args){
//声明前2项的值
int num1 = 1;
int num2 = 1;
int num3 = 0;
for(int i = 3;i<=20;i++){
num3 = num1+num2;
//交换位置
num1 = num2;
num2 = num3;
}
System.out.println("第20项是:"+num3);
}
}
/**
罗列1-100之间能被5整除的数 且3个一行
*/
public class Demo10{
public static void main(String[] args){
//声明一个变量 计数器
int count = 0;
//1:通过for循环产生1-100之间的数字
for(int i = 1;i<=100;i++){
//判定是否可以被5整除
if(i%5==0){
System.out.print(i+"\t");
count++;
//判定当前能被5整除的数字的个数 是否是3 的倍数
if(count%3==0){
System.out.println();
}
}
}
}
}
- 注意
跳出循环的方法
- continue
tips:
continue:跳过本次循环 这次循环不执行 跳到下次循环开始
代码:
/**
1:罗列1-100之间能被5整除的数
分析需求:
1:罗列出来1-100之间的数字
2:不断对于产生的数字对5取余数 如果==0 可以被5整除 显示
不能被5整除,不做事
*/
public class Demo09{
public static void main(String[] args){
//编写for循环产生1-100之间的数字
for(int i = 1;i<=2;i++){
//判定 对于i进行判定
if(i%5==0){
System.out.print(i+"\t");
}else{
continue;
}
//System.out.println("a");
}
}
}
- break
tip:
break: switch 防止穿透 跳出当前循环 break所在的循环
代码:
public class Demo04{
public static void main(String[] args){
//声明一个月份
//int month = 9;
//(int)(Math.random()*20+1);
//输出月份
//System.out.println(month);
String l = "12";
switch(l){
case 3:
case 4:
case 5:
System.out.println("春天在哪里");
break;
case 6:
case 7:
case 8:
System.out.println("夏天夏天悄悄过去留下小秘密");
break;
case 9:
case 10:
case 11:
System.out.println("就让秋风带走我的思念");
break;
case 12:
case 1:
case 2:
System.out.println("你就像冬天里的一把火");
break;
deflt:
System.out.println("你眼睛卡吗?");
break;
}
}
- return
tip:结束当前方法
代码:
/**
计算1-100的和,当累加到3000时,
问累加到的数字是多少。
*/
public class Demo11{
public static void main(String[] args){
//声明一个变量存放累加的和
int sum = 0;
//通过for循环 做1-100之间的累加和
for(int i = 1;i<=100;i++){
sum += i;
//判定sum的值
if(sum>=3000){
System.out.println("累加到"+i+"的值,和是:"+sum);
return;
}
}
System.out.println("我是for循环外面的代码");
}
}