有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用循环的简单程序(从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);
   }
}

共 (6) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

    它不起作用,因为在for循环中A大于B,当A小于或等于B时,你让它迭代

    你可以照nhgrif说的做,但它正在改变你的数据。。但他是对的

  3. # 3 楼答案

    这是因为您首先需要a输入(下限),然后是b输入(上限)。当程序达到for时,j=a,因此条件a<;=如果第一个输入较大,则b为假。换句话说,它永远不会进入for循环

  4. # 4 楼答案

    这是因为您首先需要a输入(下限),然后是b(上限)。当程序到达forj = a时,如果第一个输入较大,则条件a <= b为假。换句话说,它永远不会进入for循环

  5. # 5 楼答案

    实际上,你应该做以下两件事:

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

    for(int j=Math.min(a,b);j<;=数学麦克斯(a,b);(j++) {

    if (j % 2 == 1) {
        sum += j;
    }
    

    }

    2如果(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

    我们需要将条件更改为如果(!(j%2==0))则您将得到预期的结果

  6. # 6 楼答案

    通过使用Math.min()Math.max函数,您可以获得越来越小的输入

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