Day3-JAVA-流程控制.md

JAVA-流程控制

y3-JAVA-流程控制

scanner

可以获取用户的输入

基本语法

1
Scanner s = new Scanner(System.in);

Scanner类的next()与nextLine()方法是获取输入的字符串


==区别:==

next()会只接受空格符前的数据

nextLine()会接受回车前的数据,就是能够接收所有输入的数据

next()

1
2
3
4
5
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String data = scanner.next();
System.out.println("你输入的内容为:"+data);
scanner.close();

image-20230125170412689

​ 结果只输出空格前的

nextLine()

1
2
3
4
5
Scanner scanner = new Scanner(System.in);
System.out.println("请输入内容:");
String data = scanner.nextLine();
System.out.println("你输入的内容为:"+data);
scanner.close();

image-20230125170641486

​ 结果会输出完整语句

scanner.close()是用来结束使用的

进阶使用

scanner与if相结合

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
int i = 0;
float f = 0.0f;

Scanner scanner = new Scanner(System.in);
System.out.println("请输入整数:");
if (scanner.hasNextInt()) {
i = scanner.nextInt();
System.out.println("整数为:"+i);
} else {
System.out.println("请输入整数");
}

System.out.println("请输入小数:");
if (scanner.hasNextFloat()) {
f = scanner.nextFloat();
System.out.println("小数为:"+f);
} else {
System.out.println("请输入整数");
}
scanner.close();

都为true时:

image-20230125175225137

为false时:

image-20230125175324835


scanner与while结合

要求:可以输入多个数字,并求其总和与结果,没输入一个数字用回车确认,通过输入非数字来结束输入并输出执行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 和 用来相加的
double sum = 0;
// 用来统计几个书的
int num = 0;
Scanner scanner = new Scanner(System.in);
System.out.println("请输入数字:");
while (scanner.hasNextDouble()) {
System.out.println("请输入数字:");
double x = scanner.nextDouble();
sum = sum + x;
num ++;
}
System.out.println(num+"个数的总和为:"+sum);
System.out.println(num+"个数的平均值为:"+sum/num);
scanner.close();

image-20230125180642620

顺序结构

就是自上而下运行的一种结构

没什么可说的

选择结构

if单选择结构

1
2
3
if(布尔表达式){
// 表达式为true的语句
}
1
2
3
4
int score = 90;
if (score>=60){
System.out.println("及格了");
}

if双选择结构

1
2
3
4
5
if(布尔表达式){
// 表达式为true的语句
}else{
// 表达式为false的语句
}
1
2
3
4
5
6
int score = 50;
if (score>=60){
System.out.println("及格了");
}else{
System.out.println("成绩不及格");
}

if多选择结构

1
2
3
4
5
6
7
if(布尔表达式){
// 表达式为true的语句
}else if{
//
}else{
//
}

else if可以是若干个

1
2
3
4
5
6
7
8
9
10
11
12
int score = 50;
if (score>=60){
System.out.println("及格了");
} else if (score>=90) {
System.out.println("优秀");
} else if (score<90 && score>=60) {
System.out.println("非常可以");
} else if (score<60) {
System.out.println("不及格");
}else {
System.out.println("成绩错误");
}

嵌套的if结构

1
2
3
4
5
if(布尔表达式){
if(布尔表达式){
//
}
}
1
2
3
4
5
6
7
8
9
10
11
int i = 25;
if (i>0) {
if (i == 25) {
System.out.println("结果为" + i);
} else {
System.out.println("其他结果");
}
}else {
System.out.println(i+"小于规定值");
}
// 结果为25

Switch选择结构

Swich是用来匹配的值是否相等

变量类型可以是:byte、short、int、char

1
2
3
4
5
6
7
8
switch(表达式){
case value:
break;
case value:
break;
default:
// 默认值
}

==重点(关于break知识点):==

如果不加break,会发生一种case击穿。意思就是:值匹配上了,但它会将正确值以下的内容也运行

1
2
3
4
5
6
7
8
9
10
11
 char grade = 'b';
switch (grade) {
case 'a':
System.out.println("a");
case 'b':
System.out.println("b");
case 'c':
System.out.println("c");
default:
System.out.println("成绩");
}

image-20230125234759234

不加break,显然case ‘b’一下的数据都会运行

image-20230125235016962

加上break后,就可以避免case击穿的情况了


查看源码

可以使用IDEA查看

文件–>项目结构–> 查看编译器输出得出文件路径–>打开路径,一直点到对应的class文件

image-20230126174037258

image-20230126174132487

image-20230126174356693

如想要查看这些class的源码,就需要将它拷贝到IDEA中

复制想要查看的class文件,然后到IDEA中,右键项目,选择打开于目录路径

image-20230126174737673

然后到

image-20230126174834994

然后将复制的class文件,复制到这个文件夹下

image-20230126175009851

这时,IDEA就会出现这个class文件,打开就行

image-20230126175119763

循环结构

while循环

1
2
3
while (布尔表达式){
// 循环内容
}

如果布尔表达式为true则为死循环,大多数情况避免死循环, 会用一个表达式失效的方法结束循环

练习从1加到100:

1
2
3
4
5
6
7
8
9
10
// 保存0-100的数
int i = 0;
// 保存相加结果
int sum = 0;
while (i<100){
i++;
sum = sum + i;
}
System.out.println(sum);
// 5050

do…while循环

==与while的区别:==无论如何,do里面的语句都会运行一遍

1
2
3
do {

}while (布尔表达式);
1
2
3
4
5
6
7
8
int i =0;
do {
i++;
System.out.println(i);
}while (i<0);
System.out.println(i);
//1
//1

由结果可知,do里面先执行i++,这是i=1,所以第一个结果就为1,然后进行while判断,发现i并不小于0,所以不继续循环,然后执行第六行的语句,i还是等于1,可知确实没有进行循环

for循环

for循环是最有效、最灵活的循环结构,可迭代的通用结结构

1
2
3
for(初始化;布尔表达式;更新){
//
}

练习1:计算0-100之间的奇数和偶数的和

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//储存奇数和
int addSum = 0;
//储存偶数和
int evenSum = 0;
for (int i = 0; i <= 100; i++) {
if (i%2==0){
evenSum +=i;
}else {
addSum += i;
}
}
System.out.println("奇数和"+addSum);
System.out.println("偶数和"+evenSum);
// 奇数和2500
// 偶数和2550

练习二:用while或for循环输出1-1000之间能被5整出的数,并且每行输出三个

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// for
for (int i = 0; i <= 1000; i++) {
if (i%5==0){
System.out.print(i+"\t");
}
if (i%15==0){
System.out.println();
}
}
System.out.println("\r===========================================================");
// while
int num = 0;
while (num <=1000){
num++;
if (num%5==0){
System.out.print(num+"\t");
}
if (num%15==0) {
System.out.println();
}
}

关于每一行输出三个数思想:

这里想到的是判断模15是否等于0,如果等于就回车一下,因为在0-15就三个数是可以模5的,循环到15时,又可以模15,就会回车一下

练习二:打印99乘法表,用到嵌套式循环

1
2
3
4
5
6
7
8
9
10
for (int i = 1;i < 10; i++) {
for (int i1 = 1; i1 < 10; i1++) {
if (i>=i1){
System.out.print(i1+"*"+i+"="+(i1*i)+"\t");
}
if (i1%9==0){
System.out.println();
}
}
}

练习三:打印三角形:

1
2
3
4
5
6
7
8
9
10
11
12
for (int i = 1; i <= 5; i++) {
for (int j = 5; j >= i; j--) {
System.out.print(" ");
}
for (int j = 1;j<=i;j++){
System.out.print("*");
}
for (int j = 2;j<=i;j++){
System.out.print("*");
}
System.out.println();
}

增强for循环

可以简化代码,主要是用来遍历的

1
2
3
4
for (声明语句:表达式)
{
//
}

实例1,遍历数组:

1
2
3
4
int[] numbers = {1,2,3,4};
for (int x:numbers){
System.out.println(x);
}

实例2:

1
2
3
4
int[] numbers = {1,2,3,4,5};
for (int i = 0; i < 5; i++) {
System.out.println(numbers[i]);
}

实例一与实例二的for循环表达式效果是一样的,只不过实例一是用来偷懒的

break continue

break在任何循环语句的主体部分,==break用语强制退出循环==,不执行循环中的剩余语句。

1
2
3
4
5
6
7
8
9
10
int[] numbers = {1,2,3,4,5};
for (int i = 0; i < 5; i++) {
System.out.println(numbers[i]);
if (numbers[i]==3){
break;
}
}
//1
//2
//3

执行到number[i]等于3时,就会停止这次循环,注意是结束此次循环,还会继续运行循环外的代码


continue语句用于循环语句体中,==用于终止某次循环过程(类此跳过)==,剩下的语句会继续执行。

1
2
3
4
5
6
7
for (int i = 0; i < 5; i++) {
if (i==3){
continue;
}
System.out.print(i+"\t");
}
//0 1 2 4

i=3的时候就会跳转,也就是i=3时这个循环不执行