使用循环的简单程序(从Java开始)
我必须编写一个程序,使用循环计算a和b(包括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);
}
}
# 1 楼答案
在
for
循环开始之前,把这个放好if
检查a
(输入的第一个数字)是否大于b
。如果是,它交换a
和b
。现在你的for
循环总是从最小的数字开始,然后迭代到较大的数字(因为在这个if
之后,a
总是较小的数字)使用这种方法还有一个额外的副作用,那就是让输出变得有意义。您的输出现在总是说:
"between [smaller number] and [larger number]"
rolfl的答案更加优雅,效果也非常好,但是当用户首先输入较大的数字时,您的输出可能看起来有点奇怪:
"between [larger number] and [smaller number]"
,等等# 2 楼答案
它不起作用,因为在for循环中A大于B,当A小于或等于B时,你让它迭代
你可以照nhgrif说的做,但它正在改变你的数据。。但他是对的
# 3 楼答案
这是因为您首先需要a输入(下限),然后是b输入(上限)。当程序达到for时,j=a,因此条件a<;=如果第一个输入较大,则b为假。换句话说,它永远不会进入for循环
# 4 楼答案
这是因为您首先需要
a
输入(下限),然后是b
(上限)。当程序到达for
,j = a
时,如果第一个输入较大,则条件a <= b
为假。换句话说,它永远不会进入for
循环# 5 楼答案
实际上,你应该做以下两件事:
1就像上面提到的rolfl一样。你需要把最小值和最大值放在循环中正确的位置
for(int j=Math.min(a,b);j<;=数学麦克斯(a,b);(j++) {
}
2如果(j%2==1)使用仅检查num是否为奇数是不够的
例如
a=-5,b=0 结果会怎样
sum的值将为0
我们需要将条件更改为如果(!(j%2==0))则您将得到预期的结果
# 6 楼答案
通过使用Math.min()和Math.max函数,您可以获得越来越小的输入