[英]Simple program using loops (Beginning Java)
我必须编写一个使用循环的程序,该程序计算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);
}
}
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]"
等
您可以使用Math.min()和Math.max函数获得越来越小的输入。
for (int j = Math.min(a,b); j <= Math.max(a,b); j++) {
if (j % 2 == 1) {
sum += j;
}
}
它不起作用,因为在for循环中A大于B ,而在A小于或等于B时进行迭代。
您可以执行nhgrif所说的,但是它正在更改您的数据。。但是他是正确的。
那是因为你首先期待的a
输入(逊色限制),然后b
(上级)。 当程序到达for
, j = a
因此如果第一个输入较大,则条件a <= b
为False。 换句话说,它永远不会进入for
循环。
实际上,您应该做以下两件事:
1就像上面提到的rolfl一样。 您需要将min和max循环放置在正确的位置。
for(int j = Math.min(a,b); j <= Math.max(a,b); j ++){
if (j % 2 == 1) {
sum += j;
}
}
2使用if(j%2 == 1)不足以检查num是否为奇数。
例如
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))然后,您将获得预期的结果。
那是因为您首先期望输入(下限),然后是b(上级)。 当程序到达for时,j = a,因此,如果第一个输入较大,则条件a <= b为False。 换句话说,它永远不会进入for循环。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.