我必须使用循环编写程序,计算a和b(包括)之间所有奇数之和,其中a和b是输入。
我做了这个(下面)它工作正常,但我注意到它有一个问题:当我输入一个较大的数字后跟一个较小的数字输入时,它返回0,但是当我输入较小的数字时它首先它工作得很好。有什么快速解决方法吗? :)
import java.util.Scanner;
public class ComputeSumAAndB
{
public static void main (String[] args)
{
Scanner in = new Scanner(System.in);
System.out.print("Please enter 2 integers: "); //prompts user for ints
int a = in.nextInt();
int b = in.nextInt();
int sum = 0;
for (int j = a; j <= b; j++)
{
if (j % 2 == 1)
sum += j;
}
System.out.println("The sum of all odd numbers (inclusive) between " + a + " and "+ b + " is " + sum);
}
}
答案 0 :(得分:3)
int temp;
if(a > b) {
temp = a;
a = b;
b = temp;
}
在你的for
循环开始之前把它放好。
if
检查a
(输入的第一个数字)是否大于b
。如果是,则交换a
和b
。现在,您的for
循环始终以最小的数字开头,并迭代到更大的数字(因为在if
之后,a
将始终是较小的数字)。
使用此方法会增加副作用,使输出有意义。您的输出现在总是说:"between [smaller number] and [larger number]"
。
rolfl的答案更优雅,效果非常好,但是当用户首先输入较大的数字时,您的输出可能看起来很奇怪:"between [larger number] and [smaller number]"
等。
答案 1 :(得分:2)
您可以使用Math.min()和Math.max函数获取越来越小的输入....
for (int j = Math.min(a,b); j <= Math.max(a,b); j++) {
if (j % 2 == 1) {
sum += j;
}
}
答案 2 :(得分:0)
由于 A 大于 B 循环,因此 A >小于或等于 B 。
你可以做什么nhgrif说但是它正在改变你的数据......但他是对的。
答案 3 :(得分:0)
那是因为你首先期待a
输入(下限)然后b
(上级)。当您的程序到达for
,j = a
时,条件a <= b
为False,如果第一个输入较大。换句话说,它永远不会进入for
循环。
答案 4 :(得分:0)
实际上你应该做以下两件事:
1就像上面提到的 rolfl 一样。你需要把min和max放在正确的循环中。
for(int j = Math.min(a,b); j&lt; = Math.max(a,b); j ++) {
if (j % 2 == 1) {
sum += j;
}
}
2使用 if(j%2 == 1)仅检查num是否为奇数是不够的。
e.g。
a = -5 , b = 0; 结果会是什么?
int sum = 0;
for(int j=-5;j<0;j++)
{
if(j%2 == 1)
{
sum+=j;
}
}
sum的值为0。
我们需要将条件更改为 if(!(j%2 == 0))然后您将获得预期结果。
答案 5 :(得分:0)
那是因为你首先期待输入(下限)然后是b(上限)。当你的程序到达for时,j = a,如果第一个输入较大,条件a&lt; = b为False。换句话说,它永远不会进入for循环。