【问题标题】:Simple program using loops (Beginning Java)使用循环的简单程序(Java 入门)
【发布时间】:2013-11-06 01:28:17
【问题描述】:

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

【问题讨论】:

  • 只有两个输入不需要for循环,也可以用数组代替。
  • 使用 if (j % 2 == 1) 来检查 num 是否为奇数是不够的。例如 a = -5, b =0;结果会怎样?它为零。你需要把条件改成 if(!(j%2 == 0)) 然后你会得到预期的结果。
  • 这个问题有几个很好的答案。您应该考虑将其中一项标记为已接受。

标签: java loops


【解决方案1】:
int temp;
if(a > b) {
    temp = a;
    a = b;
    b = temp;
}

把它放在你的 for 循环开始之前。


if 检查a(输入的第一个数字)是否大于b。如果是,则交换ab。现在您的for 循环将始终从最小的数字开始并迭代到更大的数字(因为在此之后ifa 将始终是较小的数字)。

使用这种方法还有一个额外的副作用是让你的输出有意义。您的输出现在将始终显示:"between [smaller number] and [larger number]"

rolfl 的回答更优雅,效果也很好,但是当用户先输入较大的数字时,您的输出可能看起来有点奇怪:"between [larger number] and [smaller number]" 等。

【讨论】:

    【解决方案2】:

    您可以使用Math.min()Math.max 函数获得更小和更大的输入......

    for (int j = Math.min(a,b); j <= Math.max(a,b); j++) {
        if (j % 2 == 1) {
            sum += j;
        }
    }
    

    【讨论】:

      【解决方案3】:

      它不起作用,因为 A 大于 Bfor 循环中,你让它迭代而 A 小于或等于 B

      你可以按照 nhgrif 所说的去做,但这会改变你的数据。但他是对的。

      【讨论】:

        【解决方案4】:

        那是因为您首先期望 a 输入(下限),然后是 b(上限)。当您的程序到达forj = a 时,如果第一个输入较大,则条件a &lt;= b 为 False。换句话说,它永远不会进入for 循环。

        【讨论】:

          【解决方案5】:

          其实你应该做以下两件事:

          1 就像上面提到的rolfl。您需要将最小值和最大值放在循环中的正确位置。

          for (int j = Math.min(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))那么你会得到预期的结果。

          【讨论】:

            【解决方案6】:

            这是因为您首先期望输入 a(下限),然后是 b(上限)。当您的程序到达 for, j = a 时,如果第一个输入较大,则条件 a

            【讨论】:

              猜你喜欢
              • 2015-12-04
              • 1970-01-01
              • 1970-01-01
              • 2023-01-26
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多