时间限制:1.000S 空间限制:32MB
你的任务依然是计算a+b。
输入中每行是一对a和b。其中会有一对是0和0标志着输入结束,且这一对不要计算。
对于输入的每对a和b,你需要在相应的行输出a、b的和。
如第二对a和b,他们的和也输出在第二行。
2 4
11 19
0 0
6
30
在本题中,你的任务仍然是计算a+b
,但是会有一对是0和0,标志着输入结束,这意味着我们在遇到这种情况时需要主动退出循环操作,那我们就需要使用到if
语句来给程序加上一个退出的条件。
本节课你会学到的内容:
if语句是一种条件语句,表示假设在某种条件下,代码才可以执行,它的基本结构通常是这样的:
if (condition) {
// 执行代码块
}
condition
也是一个条件判断,通常会返回一个布尔值(即真和假),如果条件为真(true),则执行花括号里面的代码,如果条件为假,则跳过这一段代码块。
如果要执行假设条件不满足的情况应该怎么办呢?比如说去超市买东西,如果有西瓜,我就买一个西瓜,但是没有西瓜的话,我就买一斤苹果,这可以使用到else
语句
if (有西瓜) {
// 如果有西瓜,则执行这里的代码块
} else {
// 如果没有西瓜,则执行这里的代码
}
此外,我们还可以使用else-if
来添加多个分支结构,还是上面的例子,去超市买东西,如果有西瓜,我就买一个西瓜,但是没有西瓜的话,我就买一斤苹果,如果连苹果都没有的话,那我随便买一样水果。
if (有西瓜) {
// 如果有西瓜,则执行这里的代码块
} else if(有苹果) {
// 在没有西瓜的情况下,有苹果,则执行这里的代码块
} else {
// 既没有西瓜,也没有苹果,上面的条件都为假,则执行这里的代码块
}
我们已经知道如何通过if来退出循环了,那退出循环只需要我们输入的值a、b
的值和0相等就可以了嘛,不过如何表示a和0相等且b和0相等呢?
在数学中,我们通过等于符号=
来判定两个数字是否相等,比如1 = 3
, 2 = 5
, 不过我么已经知道在编程中,只有一个=
往往意味着把右边的值赋值给左边的意思,比如int i = 3
,就是将3的值赋值给左侧的i
, 那我们如何表示两个值相等呢?
答案是两个等于号, ==
运算符, ==
运算符是关系运算符的一种,用于比较两个值之间是否相等, 所以如果想要判定a和0是否相等,可以使用 a == 0
此外还有一些其他的关系运算符可以比较两个值之间的关系:
>
: 表示大于<
: 表示小于>=
: 表示大于等于<=
: 表示小于等于!=
: 表示不等于可是我们想要的结果是a==0
的同时b==0
, 也就是a、b
的值都等于0,才算循环结束,该如何表示“与”(既要又要)的关系呢?
Java提供了逻辑运算符解决这个问题
&&
: 当运算符两边的条件判断都为真时,整个结果才为真||
: 当运算符两边的条件判断只有一个为真时,结果就为真!
: 将条件判断的值取反后返回,真的取反后为假的,假的取反后为真的。可能初学者不是很好理解,我么可以用小美找工作的例子
所以想要判定a和b的结果是否“都”等于0,可以使用逻辑与,也就是a == 0 && b == 0
, 将之作为if语句的条件
// 如果 a和0相等 并且 b和0 也相等
if (a == 0 && b == 0) {
// 退出循环
}
经过上面的讲解之后,我们可以写出下面的代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
// 如果输入的a和b都为0
if (a == 0 && b == 0) {
}
System.out.println(a + b);
}
}
}
代码的基本结构已经搭建完成,现在我们要填充的部分是代码块中的“结束循环”这一部分。
而break
就是用来终止离它最近的while、do while、for语句的,break之后的代码都不会再执行。
也就是说,我们只需要在这里填充一句break就可以了。
完整代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
if (a == 0 && b == 0) {
break;
}
System.out.println(a + b);
}
}
}
除了break
之外,continue
也可以用于控制跳出循环,同样的,它也只能出现在for、while和do while循环的内部,只不过它的用法是在执行过程中跳过当前循环迭代的剩余部分,然后继续下一次迭代, 通常用于在某个特定条件下,跳过某些特定的迭代操作,但仍然继续循环。
比如下面的例子
while(condition) {
if (condition) {
// 当满足条件时,跳过本次迭代,继续下一次循环
continue;
}
// 其他操作
}
所以如果在本题中使用continue会是怎样的呢?
while (scanner.hasNext()) {
int a = scanner.nextInt();
int b = scanner.nextInt();
if (a == 0 && b == 0) {
continue;
}
System.out.println(a + b);
}
当输入的a和b的值都为0时,会跳出本次循环,不再执行System.out.println(a + b);
这行语句,也就是说,不再计算a+b
的值并输出,但是不会终止循环,而是接着读取下一次输入。
本节课我们学习了if语句,if语句可以用来根据条件判断,然后在某种情况下才去执行对应的代码块,此外我们还学习了逻辑运算符(与或非)和关系运算符(比较值的大小),最后我们学习了break语句,用于在某种情况下退出循环,这些内容都是后面刷题时常用到的。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int a, b;
while (sc.hasNext()) {
// 读取输入的一对a和b
a = sc.nextInt();
b = sc.nextInt();
// 如果a和b都为0,则跳出循环
if (a == 0 && b == 0) {
break;
}
// 计算a和b的和,并输出结果
System.out.println(a + b);
}
}
}