【问题标题】:One Loop works perfectly and the next identical Loop fails一个循环完美运行,下一个相同的循环失败
【发布时间】:2020-02-19 05:07:43
【问题描述】:

第二种方法中的第一个循环完美运行。当用户输入字符而不是数字时,会捕获 InputMismatchException 并提示用户仅重新输入数字才能继续。 第二个循环失败:如果为下一个问题输入了字符,则会捕获 InputMismatchException 并显示“...请再试一次”,但随后程序继续运行,而不会强制用户重新输入数字。 是否有可能在 1 个方法内有超过 1 个 do/while、try/catch 的 InputMismatchException? 我不知道我做错了什么。我认为我在理论上是对的,但显然不是! 如何在不分离到不同方法的情况下解决此问题(因为那样我的计算方法将不起作用)?

           {
             Scanner input = new Scanner( System.in );
             boolean continueLoop = true;


              do{
                System.out.print("\nPlease enter weight");
                   try{

                      stone = input.nextInt();

                         while (...)
                         {
                         System.out.print("...");
                         stone = input.nextInt();
                         }
                         continueLoop = false;
                      }
                      catch ( InputMismatchException inputMismatchException)
                      {
                      System.err.printf( "\nException: %s\n", 
                      inputMismatchException );
                      input.nextLine();
                      System.out.println("...Please try again.\n" );
                      }


                 }while ( continueLoop ); 

               do{
                 System.out.print("...");
                    try{

                       pounds = input.nextDouble();


                          while (...)
                          {
                          System.out.print("...");
                          pounds = input.nextDouble();
                          }
                          continueLoop = false; 
                       }
                    catch ( InputMismatchException inputMismatchException)
                        {
                        System.err.printf( "\nException: %s\n", 
                        inputMismatchException );
                        input.nextLine();
                        System.out.println("..." );
                        }

                 }while ( continueLoop ); //code continues more methods...

【问题讨论】:

  • 当第一个循环开始时,continueLoop 为真,因为它是这样初始化的。但是当第二个循环开始时,continueLoop 为假,因为那是导致第一个循环终止的原因。
  • 在后续循环之前需要将continueLoop 的值重置为true
  • 另外,第二个catch 中的input.nextDouble(); 会烧坏你。它可能应该是 input.nextLine(); 和另一个一样,或者完全省略。
  • 我试图重置 boolean continueLoop = true;在第一个循环之后,现在它给了我一个与我的 main 方法相关的错误,该方法也有 boolean continueLoop = true;。它说它已经在main中定义了。我已经编辑了上面的代码以包含我的主要方法。这让我很困惑。 (我显然是 Java 新手)
  • @Dawood ibn Kareem 谢谢!我已将其更改为 nextLine

标签: java exception while-loop boolean inputmismatchexception


【解决方案1】:

感谢 VGR、Scary Wombat 和 Dawood ibn Kareem 的快速响应,我现在明白了解决方案。 我在下一个循环之前重置了“boolean continueLoop = true”,但出现错误。经过更多的研究(这些反应让我走上了正确的道路),我终于发现我通过输入“continueLoop = true”来重置!!大问题解决了,学到了很多。我花了这么多时间在这上面!我讨厌java。但我喜欢 Java。

【讨论】:

    猜你喜欢
    • 2019-03-06
    • 1970-01-01
    • 2015-03-04
    • 2019-08-15
    • 2021-06-11
    • 1970-01-01
    • 1970-01-01
    • 2022-10-12
    • 1970-01-01
    相关资源
    最近更新 更多