【问题标题】:While loop will not continue to ask the user for an inputWhile 循环不会继续询问用户输入
【发布时间】:2020-11-02 12:56:03
【问题描述】:

我对 java 很陌生,我需要帮助。基本上,我有一个程序要求用户输入一个数字。输入数字时,它会将该数字之前的所有奇数相加并将它们相加。我正在尝试(并且失败)做的是,制作另一个循环,当提示用户要求输入一个数字来总结奇数时,我想使它只有在奇数时才会继续输入,否则它将不断重复询问用户,直到他们输入一个奇数。我知道使用while 循环可以解决这个问题,但我不确定如何让它工作。

这是我的代码:

import java.util.Scanner;

public class OddCalculator {
    private static Scanner sc;
    public static void main(String[] args) 
    {
        int number, i, oddSum = 0;
        sc = new Scanner(System.in);
        System.out.print(" Please Enter any Number : ");
        number = sc.nextInt();  
        while (number % 2 !=0) //HERE IS WHERE IM HAVING THE ISSUE
        {
            continue;
        }
        for(i = 1; i <= number; i++)
        {
            if(i % 2 != 0)
            {
                oddSum = oddSum + i; 
            }
        }
        System.out.println("\n The Sum of Odd Numbers upto " + number + "  =  " + oddSum);
    }
}

提前致谢!

【问题讨论】:

  • 询问用户直到他们输入一个奇数,您可能不得不使用number = sc.nextInt(); 重新读取用户在循环中的输入,而不是使用continue。跨度>
  • 我试过了,但是当我输入一个无效的数字时,代码就结束了,而不是再次提问
  • 需要考虑的事情:如果用户没有输入一个正整数会发生什么?例如 -7 或 3.14

标签: java


【解决方案1】:

continue; 作为语句扫描“向上和向外”以查找可以继续的第一个构造。可以继续的事情目前只有forwhiledo/while语句,所以找到while (number % 2 != 0)会继续。

继续while循环意味着:直接跳回条件number %2 != 0,对其求值,如果为真则再次进入循环,如果为假则跳至}

因此,您的代码会检查数字是否为奇数。如果是,它将..继续。所以,它会..检查数字是否是奇数。如果是,它将检查数字是否为奇数。如果是,它将检查数字是否为奇数......永远。

大概您的意图是再次询问用户,但随后您必须围绕更多代码进行循环:从print 开始,因为sc.nextInt() 肯定需要在里面循环。这确实意味着您将没有要检查的 number 值,但这就是 do/while 循环的用途:保证您至少循环一次(这样您就可以使用循环中计算的任何内容作为条件的一部分)。

【讨论】:

  • 谢谢!我现在已经意识到,while 循环适用于我需要制作的奇数,因此它适用于偶数,因此如果数字是偶数,它将要求用户再次输入它。我的问题是如何获得仅检查输入的数字是否在 while 循环中的值?
【解决方案2】:

您还应该在 while 循环内使用扫描仪,以防数字不是奇数。

while (number % 2 !=0) {
    number = sc.nextInt(); // Use here as well to keep asking for a number until is odd
}
    

【讨论】:

    【解决方案3】:

    您的困惑似乎来自误解continue 意味着回到while 循环,而break 是让您脱离循环的原因。这对你有用吗?

    System.out.println(" Please Enter any Number : ");
    number = sc.nextInt();
    
    // keep asking for a number for as long as it is even (condition is false on odd)
    while (number % 2 == 0) {
       System.out.println("Please enter another number: ");
       number = sc.nextInt();
    }
    
    System.out.println(number + " is now odd!");
    

    【讨论】:

    • 这几乎是完美的,但是,当我尝试并运行它时,当它说“请输入另一个数字”时,它并没有让我有机会输入另一个值,程序就停止运行。
    • 等待这个工作,非常感谢!!
    【解决方案4】:

    我希望这个输出是你正在寻找的,你之前的代码不起作用的原因是number = sc.nextInt();是你可以提示用户输入的原因,所以你必须循环它,此外,你可以根据用户在if语句中输入的内容给出具体的提示,希望对你有帮助!

    import java.util.Scanner;
    class Main {
      public static void main(String[] args) {
         // int number, i, oddSum = 0;
        int number, i, oddSum = 0;
        Scanner sc = new Scanner(System.in);
        System.out.print("Please Enter any Number : ");
        do{
          number = sc.nextInt();
          if(number % 2 == 0){
            System.out.print("Please Enter an odd number!: ");
          }
        }while(number % 2 == 0);
        for(i = 1; i <= number; i++)
          {
              if(i % 2 != 0)
              {
                  oddSum = oddSum + i; 
              }
          }
        System.out.println("\nThe Sum of Odd Numbers up to "  + number +   " = "  + oddSum);
      }
    }
    

    输出:

    Please Enter any Number : 2
    Please Enter an odd number!: 2
    Please Enter an odd number!: 3
    
    The Sum of Odd Numbers up to 3 = 4
    

    【讨论】:

    • @dogwog1 希望这对您有所帮助,如果您喜欢我的解决方案,请点赞并标记为解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-11
    • 1970-01-01
    • 1970-01-01
    • 2020-12-21
    • 2016-01-07
    • 1970-01-01
    相关资源
    最近更新 更多