【Java】条件判断与循环
如果
可以进行分支
在if后面的括号中填写分支条件
由条件表达式和代码块构成
有一个可以进行分岐的例子是…
家里有面包吗?
→ 有的
那我们就烤吐司吃吧!
→ 没有
那我们去面包店买吧!
使程序能根据条件进行处理的方式是通过改变编程来实现的。
public class Main {
public static void main(String[] args) {
boolean bread = true;
if (bread == true) {
System.out.println("じゃあトーストにして食べよう!");
} else {
System.out.println("パン屋へ買いに行こう!");
}
}
}
请在第三行中,用布尔类型的变量 bread 表示真(也可以是假)来填写。
如果(bread == true)成立,则在if语句的第四行执行分支。在此情况下,表示如果变量bread被赋值为true的话,就会执行下面的操作。
如果第五行是 true,那么请执行以下处理。
第六行的else指的是除了”true”以外的情况。
在第七行,执行这样的处理。
じゃあトーストにして食べよう!
如果将第三行从true改为false的话,那么就会变成…
パン屋へ買いに行こう!
显示为
只有[のみの]语法
如果条件满足,则执行指定的处理;如果条件不满足,则不做任何操作。
public class Main {
public static void main(String[] args) {
int number = 5;
if (number == 5) {
System.out.println("ごりら!");
}
}
}
如果变量number被赋值为5的话,
犀牛!
只要显示为该值,在其他数字被输入时,不进行任何处理。
如果-否則如果-否則構造
一个 if 语句可以将分叉点分成三个或更多的路径。
public class Main {
public static void main(String[] args) {
int number = 1;
if (number == 1) {
System.out.println("いちご!");
} else if (number == 2) {
System.out.println("にんじん!");
} else if (number == 3) {
System.out.println("サンダル!");
} else {
System.out.println("わかんな〜い");
}
}
}
如果变量number被赋值为1,则输出“草莓!”;如果为2,则输出“胡萝卜!”;如果为3,则输出“凉鞋!”;如果是其他数字,则显示“我不知道~”。通过使用else if语句,我们可以实现三个以上的分支。
切换文档
所有条件式都是以变量 == 值、变量 == 变量的形式来比较左右两边是否相等的表达式。
switch后面的括号内不是表达式,而是需要填写变量名。
case 值:中的:是冒号,要注意不要与分号;弄混。
在case后面的处理的最后加上break。
default的意思与if语句中的else相同,用于处理条件不符合的情况。与else一样,在处理不需要的情况下可以省略。break也可以省略。
可以将之前用过的 if-else if-else 结构的编程代码改写成 switch 语句。
public class Main {
public static void main(String[] args) {
int number = 1;
switch(number) {
case 1:
System.out.println("いちご!");
break;
case 2:
System.out.println("にんじん!");
break;
case 3:
System.out.println("サンダル!");
break;
default:
System.out.println("わかんな〜い");
}
}
}
与文对比,{ }减少了,并且else if之后的( )也减少了,这样使得阅读更加方便。
如果忘记写break语句会发生什么?
public class Main {
public static void main(String[] args) {
int number = 1;
switch(number) {
case 1:
System.out.println("いちご!");
case 2:
System.out.println("にんじん!");
break;
case 3:
System.out.println("サンダル!");
break;
default:
System.out.println("わかんな〜い");
}
}
}
如果我故意删除了第7行的 case 1 的 break,会发生什么呢?
いちご!
にんじん!
不仅显示了案例1,还显示了案例2。
switch语句是一种指令,它会跳转执行到与括号内的变量匹配的case标签处。
因此,不会产生编译错误。
如果不添加break来停止执行,程序会一直执行到下一个case的代码。
不写 break
可以利用不填写这个break来逆向利用它不会停止处理的特性。
public class Main {
public static void main(String[] args) {
int rank = 1;
switch(rank) {
case 1:
System.out.println("優秀!");
break;
case 2:
case 3:
case 4:
System.out.println("ふつう");
break;
case 5:
System.out.println("がんばって!");
break;
}
}
}
当rank为1时,会显示为“优秀!”。
而当rank为2至4时,输出的文字内容全部相同,为“普通”。
为了让程序跳过case 2和case 3的break命令并执行case 4,特意删除了这两个命令。
通过这样做,反而提高了可读性,使代码更易读了。
在文中
可以执行循环处理
在 “while” 后面的括号中填写继续循环的条件
由条件表达式和代码块组成
public class Main {
public static void main(String[] args) {
int day = 1;
while (day <= 7) {
System.out.println(day + "日目");
day++;
}
System.out.println("1週間が経ちました");
}
}
将第三行的变量day赋值为1。
只需要一个选项,以下是对原文的中文翻译:
第四行的 `while` 后面的 `(day <= 7)` 用来表示循环的条件。在这种情况下,意思是请重复执行第五行到第六行的操作,直到变量 `day` 的值为 7。目前变量 `day` 被赋值为 1。
由于第5行将变量day赋值为1,因此将显示为第一天。
通过第6行的day++,将变量day增加1,变为2。
回到第4行的while循环。
刚刚将变量day加1,因此变量day被赋值为2。
(day<=7) 即2<=7满足条件,因此重复执行第5到第6行的处理。
由于第五行的变量day被赋值为2,所以会显示为第2天。
通过第六行的day++,将变量day增加1,变为3。
返回到第四行的while循环,并且重复这个过程,直到变量day变为7。
当变量day等于7时,将继续执行循环操作,最后通过day++将变量day赋值为8。然后回到第4行的while语句。
现在变量 day 被赋值为 8。
(day <= 7)也就是 8 <= 7,但不满足条件。
在这里会结束循环处理。
循环结束后,将跳过执行第5行到第6行的处理,而直接进行第8行的处理。
然后执行第8行的操作,程序就会结束。
1日目
2日目
3日目
4日目
5日目
6日目
7日目
1週間が経ちました
执行-直到 语句
只要条件不改变,`while`循环将会持续执行。而`do-while`循环则是先执行一次语句,然后在条件改变之前持续执行。
public class Main {
public static void main(String[] args) {
int day = 1;
do {
System.out.println(day + "日目");
day++;
} while (day <= 7) ;
System.out.println("1週間が経ちました");
}
}
将数字1赋值给第三行的变量day。
在这个 do-while 循环中,首先会执行处理,然后再进行条件确认。
在第5行中,显示第一天的字符。
在第6行中,将变量day加1,因此将1 + 1赋给2。
在第七行中,通过 while (day <= 7) 来判断条件是否满足。由于变量day被赋值为2,所以满足条件2 <= 7,因此会返回到第四行并继续执行循环处理。
当(day<=7)时,如果变量day的值为8,则不满足条件,循环将结束。
程序结束并显示“已经过了第8行的一周”。
用于文本
指定回数重复执行
public class Main {
public static void main(String[] args) {
for (int cake = 0; cake < 5; cake++) {
System.out.println("パンケーキ食べたい!");
}
}
}
第三行是一个for循环。
我觉得有点复杂…但只要了解每个意义,就不难了。
我会解释给你听的。
在文中
蛋糕 = 0。
这是问要把什么放在初始值里吗?
如果根据上述句子来说的话,就是将变量cake赋值为0。
这就是意思。
并且接下来
蛋糕少于5个。
这个是要重复多少次处理呢?
顺便你知道要重复多少次吗??
实际上,处理要重复5次。
刚才我设置了初始值为int cake = 0。换句话说,
零 一 二 三 四
这个过程包含了0并重复执行了5次。
最后
蛋糕加加。
这起到了计数的作用,以便反复执行处理。它能在每次处理完成后为我们计数一次。
作为次序来说…
备注:以下是一种可能的中文表达。
将0赋给变量cake。
请往下翻。
蛋糕 < 5;换句话说 0 < 5;因此满足条件,则输出”想吃蛋糕!”。
请转至下一页。
蛋糕++,因此通过0 + 1,将变量蛋糕赋值为1。
请将以下内容用中文进行同义转述,只需提供一种选项:
↓
请转述以下内容为中文,只提供一种选项
饼干 < 5; 换句话说,1 < 5; 所以条件匹配,输出”想吃蛋糕!”
请原谅我迟到了。
因为有cake++,所以通过1 + 1将变量cake赋值为2。
请用中文翻译以下内容,只需要一种选项:↓
面包 < 5; 换句话说,2 < 5; 因此条件匹配,输出 “想吃蛋糕!”。
请将下面的句子用中文进行本地化改写,只需要一个选项:
↓
请将下列句子用中文表达,仅需提供一种选项:
↓
蛋糕++ 所以通过2 + 1,变量蛋糕被赋值为3。
请用中文进行重述
↓
蛋糕 < 5;换句话说,3 < 5;所以条件匹配,会输出“想吃蛋糕!”
请用中文将以下内容改写:↓
因此,通过3 + 1,变量cake被赋值为4。
请将以下内容用中文进行翻译(只需要一种选项):
↓
cakes数量小于5,换句话说是4小于5,因此条件匹配,输出“想要吃蛋糕!”
请将以下内容用中文进行语义改写,只需给出一个选项:
↓
由于cake++,所以4 + 1被赋值给变量cake,即cake = 5。
请将以下内容用中文进行释义:
↓
蛋糕不小于5;也就是说5不小于5;因此条件不匹配。
在此处结束处理。
我想你可能已经意识到了,但是int cake = 0;这部分只处理了1次。
这部分只处理一次,而且是在开始的时候。
如果这里也变成循环处理的话
将cake++加1后,即使int cake = 0;重复赋值为0,
再次cake++加1后,即使int cake = 0;再次赋值为0,…
这将导致永远无法结束的无限循环。
パンケーキ食べたい!
パンケーキ食べたい!
パンケーキ食べたい!
パンケーキ食べたい!
パンケーキ食べたい!
顺便说一下,虽然这是默认值,但并不一定需要从0开始。
for (int cake = 1; cake < 6; cake++)
如果你想重复5次,请将次数部分设为cake < 6;或cake <= 5;亦可尝试反向模式。
for (int cake = 5; cake > 0; cake--)
这样,初始值为5,然后cake递减1,直到cake的值变为0。
即,当cake > 0时(即1 > 0),就持续进行处理。
继续前进
跳过指定的周期并进行下一周期的处理。
public class Main {
public static void main(String[] args) {
for (int cake = 0; cake < 5; cake++) {
if (cake == 3) {
continue;
}
System.out.println("パンケーキ食べたい!");
}
}
}
这是什么意思啊
如果(蛋糕等于3),则继续。
如果变量 cake 被赋值为3,请跳过处理(想吃蛋糕!)并转到下一个处理步骤。
因此,当执行时
パンケーキ食べたい!
パンケーキ食べたい!
パンケーキ食べたい!
パンケーキ食べたい!
我认为在 switch 语句中使用了 break 命令来停止执行,因此只执行了4次。
中断→打破
スキップ→跳過
这两个看起来相似,但实际上有所不同。
顺便一提,如果将上述的“continue”改为“break”,那么处理将在第三次中断,
所以“我想吃松饼!”只会被处理三次。
阻塞和条件表达式
阻挡
一系列的文集,利用分支或循环进行执行。
public class Main {
public static void main(String[] args) {
boolean bread = true;
if (bread == true) {
System.out.println("じゃあトーストにして食べよう!");
} else {
System.out.println("パン屋へ買いに行こう!");
}
}
}
就像我之前在if语句里解释的那段代码一样,我们来举个例子。
关于这个代码块,具体来说是第5行和第7行。再具体点儿说,
{
System.out.println("じゃあトーストにして食べよう!");
}
在第4行的”if (bread == true)”后面的{直到第6行的else之前的}是一个代码块。
{
System.out.println("パン屋へ買いに行こう!");
}
else之后的内容到第8行的}为止是一个代码块。
public class Main {
public static void main(String[] args) {
int day = 1;
while (day <= 7) {
System.out.println(day + "日目");
day++;
}
System.out.println("1週間が経ちました");
}
}
我会用一种方式在华语中进行释义:刚才那个”while”字我会在以下的句子中进行解释。
{
System.out.println(day + "日目");
day++;
}
从第四行的 while (day <= 7) 后面的 { 到第七行的 } 为止。
条件式
(There is no need to provide multiple options as the original phrase is already concise and clear.)
如果在「や while のあとに()内に記入された式」之后填写的内容是一个 if 语句,那么()中的内容将会是一个用于分支条件的判断;如果是一个 while 语句,那么()中的内容将会是一个用于继续循环条件的记载。
if (bread == true)
假如面包是真的
while (day <= 7)
的是指(天数 <= 7)之类的事情。