使用循环的简单程序(Beginning Java)

时间:2013-11-06 01:28:18

标签: java loops

我必须使用循环编写程序,计算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);
   }
}

6 个答案:

答案 0 :(得分:3)

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]"等。

答案 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(上级)。当您的程序到达forj = 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循环。