繁体   English   中英

使用循环的简单程序(从Java开始)

[英]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 如果是,它将交换ab 现在,您的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 (上级)。 当程序到达forj = 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 = -5b = 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM