JAVA 学习DAY3——程序逻辑控制
一、顺序结构
System.out.println("aaa");
System.out.println("bbb");
System.out.println("ccc");
结果:
aaa
bbb
ccc
Process finished with exit code 0
二 、分支结构
2.1 if语句
-
基本语法形式1
if(布尔表达式){
//条件满足时需要执行的代码
} -
基本语法形式2
if(布尔表达式){
//条件满足时需要执行的代码
}else if(布尔表达式){
//条件满足时需要执行的代码
}else {
//条件不满足时执行代码
} -
代码示例1
//判断成绩
int score=90;
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("不及格");
}
结果
优秀
Process finished with exit code 0
- 示例代码2
//键盘输入的判断奇偶数
Scanner scanner=new Scanner(System.in);
System.out.println("请输入一个整数:");
int num=scanner.nextInt();
if (num%2==1) {
System.out.println("奇数");
}else {
System.out.println("偶数");
}
结果1
请输入一个整数:
2
偶数
Process finished with exit code 0
结果2
请输入一个整数:
5
奇数
Process finished with exit code 0
结果3
请输入一个整数:
-1
偶数
Process finished with exit code 0
从结果3可以看出我们的代码是有些缺陷的,它无法判断负数的奇偶。
- 示例代码3
//判断正负数
Scanner scanner=new Scanner(System .in);
System.out.println("请输入一个整数:");
int num=scanner.nextInt();
if (num>0) {
System.out.println("num是正数");
}else if (num<0) {
System.out.println("num是负数");
}else {
System.out.println("num是0");
}
结果1
请输入一个整数:
3
num是正数
Process finished with exit code 0
结果2
请输入一个整数:
-1
num是负数
Process finished with exit code 0
结果3
请输入一个整数:
0
num是0
Process finished with exit code 0
- 示例代码4
//判断是否是闰年
Scanner scanner=new Scanner(System.in);
System.out.println("请输入年份:");
int year=scanner.nextInt();
//判断是否是世纪闰年
if (year%100==0) {
if (year%400==0) {
System.out.println("是闰年");
}else {
System.out.println("不是闰年");
}
}else{
//判断是否是普通闰年
if (year%4==0) {
System.out.println("是闰年");
}else {
System.out.println("不是闰年");
}
}
结果1
请输入年份:
2020
是闰年
Process finished with exit code 0
结果2
请输入年份:
1997
不是闰年
Process finished with exit code 0
2.2 switch语句
switch语句使用有局限性
- switch表达式()里能填写类型有限,只有这几种:整数/枚举/字符/字符串
- switch的break容易遗漏
- switch难以表达复杂的条件
- switch语句虽然支持嵌套但是嵌套起来很丑很长。
- 代码示例:
//switch语句
Scanner scanner=new Scanner(System.in);
System.out.println("请输入今天是星期几");
int day=scanner.nextInt();
switch (day) {
case 1:
System.out.println("星期一");
break;
case 2:
System.out.println("星期二");
break;
case 3:
System.out.println("星期三");
break;
case 4:
System.out.println("星期四");
break;
case 5:
System.out.println("星期五");
break;
case 6:
System.out.println("星期六");
break;
case 7:
System.out.println("星期天");
default:
System.out.println("输入有误");
break;
结果
请输入今天是星期几
3
星期三
Process finished with exit code 0
请输入今天是星期几
9
输入有误
Process finished with exit code 0
三、循环结构
3.1.while语句
- 基本语法格式
while(循环条件){
循环语句;
}
循环条件为true,则执行循环语句,否则结束循环。 - 代码示例1
int num=1;
while(num<=10){
System.out.println(num);
num++;
结果
1
2
3
4
5
6
7
8
9
10
Process finished with exit code 0
- 代码示例2
//求1-100的和
int num=1;
int sum=0;
while(num<=100) {
sum+=num;
num++;
}
System.out.println(sum);
结果:
5050
Process finished with exit code 0
- 代码示例3
//计算5的阶乘
int num=1;
int result=1;
while (num<=5) {
result*=num;
num+=1;
}
System.out.println(result);
结果
120
Process finished with exit code 0
- 代码示例4
//计算1!+2!+3!+4!+5!的和
int num=1;
int sum=0;
//外层循环负责阶乘求和
while (num<=5) {
int temp=1;
int i=1;
//内层循环求阶乘
while(i<=num) {
temp*=i;
i++;
}
System.out.println(temp);
sum+=temp;
num++;
}
System.out.println(sum);
结果
1
2
6
24
120
153
Process finished with exit code 0
3.2 break语句
- break的功能是让循环提前结束
- 代码示例 不加break
//找到100-200中第一个3的倍数
int num=100;
while(num<=200) {
if (num%3==0) {
System.out.println("找到了3的倍数,为:"+num);
}
num++;
}
结果
找到了3的倍数,为:102
找到了3的倍数,为:105
找到了3的倍数,为:108
找到了3的倍数,为:111
找到了3的倍数,为:114
找到了3的倍数,为:117
找到了3的倍数,为:120
找到了3的倍数,为:123
找到了3的倍数,为:126
找到了3的倍数,为:129
找到了3的倍数,为:132
找到了3的倍数,为:135
找到了3的倍数,为:138
找到了3的倍数,为:141
找到了3的倍数,为:144
找到了3的倍数,为:147
找到了3的倍数,为:150
找到了3的倍数,为:153
找到了3的倍数,为:156
找到了3的倍数,为:159
找到了3的倍数,为:162
找到了3的倍数,为:165
找到了3的倍数,为:168
找到了3的倍数,为:171
找到了3的倍数,为:174
找到了3的倍数,为:177
找到了3的倍数,为:180
找到了3的倍数,为:183
找到了3的倍数,为:186
找到了3的倍数,为:189
找到了3的倍数,为:192
找到了3的倍数,为:195
找到了3的倍数,为:198
Process finished with exit code 0
代码没有停止寻找,一直找完了100-200之间所有的3的倍数
- 代码示例 加上break
//找到100-200中第一个3的倍数
int num=100;
while(num<=200) {
if (num%3==0) {
System.out.println("找到了3的倍数,为:"+num);
break;
}
num++;
}
结果
找到了3的倍数,为:102
Process finished with exit code 0
3.3 continue
continue的功能是跳过这次循环,立即进入下次循环
- 代码示例 不加continue
//找到100-200中所有的3的倍数
int num=100;
while (num<=200) {
if (num%3==0) {
num++;
continue;
}
System.out.println("找到了3的倍数,为:"+num);
num++;
结果
找到了3的倍数,为:100
找到了3的倍数,为:101
找到了3的倍数,为:103
找到了3的倍数,为:104
找到了3的倍数,为:106
找到了3的倍数,为:107
找到了3的倍数,为:109
找到了3的倍数,为:110
找到了3的倍数,为:112
找到了3的倍数,为:113
找到了3的倍数,为:115
找到了3的倍数,为:116
找到了3的倍数,为:118
找到了3的倍数,为:119
找到了3的倍数,为:121
找到了3的倍数,为:122
找到了3的倍数,为:124
找到了3的倍数,为:125
找到了3的倍数,为:127
找到了3的倍数,为:128
找到了3的倍数,为:130
找到了3的倍数,为:131
找到了3的倍数,为:133
找到了3的倍数,为:134
找到了3的倍数,为:136
找到了3的倍数,为:137
找到了3的倍数,为:139
找到了3的倍数,为:140
找到了3的倍数,为:142
找到了3的倍数,为:143
找到了3的倍数,为:145
找到了3的倍数,为:146
找到了3的倍数,为:148
找到了3的倍数,为:149
找到了3的倍数,为:151
找到了3的倍数,为:152
找到了3的倍数,为:154
找到了3的倍数,为:155
找到了3的倍数,为:157
找到了3的倍数,为:158
找到了3的倍数,为:160
找到了3的倍数,为:161
找到了3的倍数,为:163
找到了3的倍数,为:164
找到了3的倍数,为:166
找到了3的倍数,为:167
找到了3的倍数,为:169
找到了3的倍数,为:170
找到了3的倍数,为:172
找到了3的倍数,为:173
找到了3的倍数,为:175
找到了3的倍数,为:176
找到了3的倍数,为:178
找到了3的倍数,为:179
找到了3的倍数,为:181
找到了3的倍数,为:182
找到了3的倍数,为:184
找到了3的倍数,为:185
找到了3的倍数,为:187
找到了3的倍数,为:188
找到了3的倍数,为:190
找到了3的倍数,为:191
找到了3的倍数,为:193
找到了3的倍数,为:194
找到了3的倍数,为:196
找到了3的倍数,为:197
找到了3的倍数,为:199
找到了3的倍数,为:200
Process finished with exit code 0
3.4 for循环
- 基本语法
for(表达式1;表达式2;表达式3){
循环体;
}
执行过程:
1 先执行表达式1,创建循环变量;
2 执行表达式2,判定循环条件。若循环条件成立,则执行循环体,否则结束循环。
3 执行循环体。
4 执行表达式3,更新循环体变量。 - 代码示例1
//打印1-10数字
for (int i=1;i<=10;i++) {
System.out.println(i);
}
结果
1
2
3
4
5
6
7
8
9
10
Process finished with exit code 0
- 代码示例2
//计算1-100的和
int sum=0;
for (int i=1;i<=100;i++) {
sum+=i;
}
System.out.println(sum);
结果
5050
Process finished with exit code 0
- 代码示例3
//计算5的阶乘
int sum=1;
for(int i=1;i<=5;i++) {
sum*=i;
}
System.out.println(sum);
结果
120
Process finished with exit code 0
- 代码示例4
//求1!+2!+3!+4!+5!的和
int sum=0;
for (int i=1;i<=5;i++) {
//里层求阶乘
int temp=1;
for (int n=1;n<=i;n++) {
temp*=n;
}
sum+=temp;
}
System.out.println(sum);
结果
153
Process finished with exit code 0
四.输入输出
从键盘输入
- 使用Scanner循环读取N个数字
//从键盘读取若干数相加
int sum=0;
Scanner scanner=new Scanner(System.in);
System.out.println("请输入您想要输入的数字:");
// 此处的 hasNext 是判定能否继续从标准输入中读取数据
while (scanner.hasNext()) {
int num=scanner.nextInt();
sum += num;
}
System.out.println(sum);
结果
请输入您想要输入的数字:
1
2
3
^D
6
Process finished with exit code 0
注意:这里输入数字结束的时候需要输入Ctrl+D(idea的要求)
五.猜数字游戏
1.如何让系统随机生成一个随机数:
- Random random=new Random();
int num=random.nextInt();
代码示例
Random random=new Random();
int num=random.nextInt();
System.out.println(num);
结果
-1467584566
Process finished with exit code 0
根据结果这样肯定是不行的,我们需要对系统随机生成数字进行一个限定。
- Random random=new Random();
int num=random.nextInt(bound);
这个bound代表random取值范围是[0,bound),0可以取到,bound取不到。
代码示例
//1.先生成一个1-100的随机整数
Random random=new Random();
Scanner scanner=new Scanner(System.in);
int num=random.nextInt();
int toGuwss=random.nextInt(100)+1;
System.out.println(toGuwss);
结果
17
Process finished with exit code 0
2.游戏规则
系统随机生成一个随机整数1-100,然后由用户输入一个要猜的数字,如果输入的数字比该随机数小,系统会提示“低了”,如果输入的数字比该随机数大,系统提示“高了”,如果输入数字相等,则提示“猜对了”。
- 代码示例:
//1.先生成一个1-100的随机整数
Random random=new Random();
Scanner scanner=new Scanner(System.in);
int toGuwss=random.nextInt(100)+1;//这里+1是因为不+1只能取到0-99。
while (true) {
//2.提示用户输入
System.out.println("请输入要猜的数字[1,100]:");
int num=scanner.nextInt();
//3.进行比较
if (num<toGuwss) {
System.out.println("低了");
}else if(num>toGuwss) {
System.out.println("高了");
}else {
System.out.println("恭喜你猜对了");
break;
}
}
结果:
请输入要猜的数字[1,100]:
50
低了
请输入要猜的数字[1,100]:
75
低了
请输入要猜的数字[1,100]:
85
低了
请输入要猜的数字[1,100]:
90
高了
请输入要猜的数字[1,100]:
87
低了
请输入要猜的数字[1,100]:
88
低了
请输入要猜的数字[1,100]:
89
恭喜你猜对了
Process finished with exit code 0
写在最后的话
注意:我写的笔记中的代码都没有主函数,但是其实他们都是在主函数中的,所以才能运行
给一个猜数字游戏的完整代码:
import java.util.Random;
import java.util.Scanner;
public class test20201207 {
public static void main(String[] args) {
//1.先生成一个1-100的随机整数
Random random=new Random();
Scanner scanner=new Scanner(System.in);
int toGuwss=random.nextInt(100)+1;//这里+1是因为不+1只能取到0-99。
while (true) {
//2.提示用户输入
System.out.println("请输入要猜的数字[1,100]:");
int num=scanner.nextInt();
//3.进行比较
if (num<toGuwss) {
System.out.println("低了");
}else if(num>toGuwss) {
System.out.println("高了");
}else {
System.out.println("恭喜你猜对了");
break;
}
}
}
}