4. A+B问题IV
时间限制:1.000S 空间限制:32MB
题目描述
你的任务是计算若干整数的和。
输入描述
每行的第一个数N,表示本行后面有N个数。
如果N=0时,表示输入结束,且这一行不要计算。
输出描述
对于每一行数据需要在相应的行输出和。
输入示例
4 1 2 3 4
5 1 2 3 4 5
0
输出示例
10
15
A+B问题IV
前言
本节课你会学习到下列内容:
- 累加操作
- 算术运算符
- 赋值运算符
- 三元运算符
题目分析
在本题中,你需要计算若干个整数的和,每行第一个数n表示后面有n个数,后面的几个数是输入的整数,如果n为0时,结束输入。
根据之前学习的内容,我们可以写出初步的代码。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
if (n == 0) {
break;
}
}
}
}
那么剩下的问题就是对输入的数字进行累加这一部分了。在之前的题目中,每次都是输入固定的两个数字,我们定义了两个变量来接收,但在这里,我们要输入的数字个数是不确定的,由数字n
来决定, 总不能要定义n个变量吧?
我们可以事先定义一个变量sum
, 用于计算最后的结果,每输入一个数(用变量a来指代),就把输入的数值累加到sum
当中,即sum = sum + a
, 只需要把这个过程执行n次即可,代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
if (n == 0) {
break;
}
int sum = 0;
while(n-- > 0) {
int a = scanner.nextInt();
sum = sum + a;
}
System.out.println(sum);
}
}
}
将上面的代码复制到题目中,就可以完成提交了,不过我们还可以对代码做出一处小小的改进。
算术运算符
算术运算符主要是进行运算,比如最开始的a + b
, 常用的算术运算符有+、-、*、/、%
,含义分别是加法、减法、乘法、除法和取模。
💡 整数相除的结果还是整数,如果结果有小数部分,则直接舍弃小数部分。
int a = 1 + 2; // 运算结果为3
int b = 1 - 2; // 运算结果为 -1
int c = 1 * 2; // 运算结果为2
int d = 5 / 2; // 运算结果是2,小数部分被舍弃
int e = 21 % 6; // 结果是3, 意思是计算两个整数相除所得的余数,参与取余运算的运算对象必须是整数类型
赋值运算符
实际上,我们从一开始就在使用赋值运算符了,比如最常用的int i = 0;
, 赋值运算符的作用是将右侧表达式的值赋值给左侧的变量。
⚠️ 千万不要混淆相等运算符
==
和赋值运算符=
, 比如写成if (i = j)
的形式,if()
需要一个boolean
类型,而i = j
的执行结果不是boolean
类型,所以会显示一个编译错误。
除了=
这种赋值运算符之外,我们经常会对某个值进行运算后,再把计算的结果赋给这个值,比如sum = sum + a
, 将sum的值和a进行运算后,再赋值给sum, 此时我们可以使用复合赋值运算符+=
int sum = 0;
for(int i = 1; i <= 10; i++) {
sum += i; // 和sum = sum + i是等价的
}
我们通常都使用sum += i
的形式来书写代码,而且这种形式也常常用于其他算数运算符,比如-=、*=、/=、%=
sum -= i; // 等价于 sum = sum - i;
sum *- i; // 等价于 sum = sum * i;
sum /= i; // 等价于 sum = sum / i;
sum %= i; // 等价于 sum = sum % i;
最终的代码如下:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
while (scanner.hasNext()) {
int n = scanner.nextInt();
if (n == 0) {
break;
}
int sum = 0;
for (int i = 0; i < n; i++) {
sum += scanner.nextInt();
}
System.out.println(sum);
}
}
}
扩展:三元运算符
除了上面的运算符外,有的时候为了简化if-else
这种操作,我们会使用到三元运算符。
先来看普通的if-else
结构
int a = 10;
int b = 20;
int c;
if (a > b) {
c = a;
} else {
c = b;
}
代码所表达的含义是,比较 a 和 b的值,如果 a 的值较大,则将 变量a 的值赋值为 c, 否则将 变量 b 的值赋值为 c
而三元运算符的结构如下:
{expression} ? if-true-element : if-false-statement;
它会先求expression
的值,如果为 true ,则取值 if-true-statement,否则取值 if-false-statement
还以上面的例子作为参考
c = a > b ? a : b;
a > b
是expresssion
表达式, 如果这个表达式的判定结果是 true 的话,则取得?
后面第一个值,即 a 的值,如果判断结果为 false 的话,则取得 :
后面的值,即 b 的值。
总结
本节课我们用了累加的例子学习了算术运算符和赋值运算符,这些基础运算在以后的编程练习中将无处不在,大家一定要多加练习。
Java代码实现:
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
while (sc.hasNext()) {
// 读取输入的整数n
int n = sc.nextInt();
int sum = 0;
if (n == 0) {
break;
}
// 使用for循环累加n个整数
for (int i = 0; i < n; i++) {
// 读取输入的整数,并累加到sum中
sum += sc.nextInt();
}
// 输出累加结果
System.out.println(sum);
}
}
}