我必须编写一个程序,在两个边界之间添加所有奇数。我得到它添加奇数,但是如果其中一个边界是负数,我就无法使它工作。这是我已经拥有的代码。
import java.util.Scanner;
/**
Computes a sum of odd integers between two bounds.
Input: a, the lower bound (may be odd or even).
Input: b, the upper bound (may be odd or even).
Output: sum of odd integers between a and b (inclusive).
*/
public class OddSum
{
public static void main(String[] args)
{
// Read values for a and b
Scanner in = new Scanner(System.in);
int a = in.nextInt();
int b = in.nextInt();
int sum = 0;
int swap;
if(a > b) {
swap = a;
a = b;
b = swap;
}
for (int i = a; i <=b; i++){
if (i % 2 ==1)
sum +=i;
}
System.out.println(sum);
}
}
答案 0 :(得分:3)
令人讨厌的是,奇数的条件是
n % 2 != 0
n % 2 == 1
不适用于负奇数,因为n % 2
给出了-1
。
答案 1 :(得分:3)
而不是每次循环迭代测试i
奇数,我建议你从范围中最低值后面的第一个奇数开始,然后在循环中递增2。像,
int a = in.nextInt();
int b = in.nextInt();
int lo = Math.min(a, b);
int hi = Math.max(a, b);
if (lo % 2 == 0) { // <-- ensure that lo is odd.
lo++;
}
int sum = 0;
for (int i = lo; i <= hi; i += 2) {
sum += i;
}
System.out.println(sum);
答案 2 :(得分:2)
您需要使用i % 2 != 0
作为条件来检查数字是否为奇数,因为您目前正在使用的条件不幸地不适用于负数。
在您排除a或b是否应该是第一个之后,您可以使用IntStream
在一行中获得总和:
int sum = IntStream.rangeClosed(a, b).filter(i -> i % 2 != 0).sum();
这将取所有奇数的总和。别忘了导入
import java.util.stream.IntStream;
干杯!