当前位置: 首页 > 知识库问答 >
问题:

当循环在第一个错误之后一遍又一遍地返回错误时

江志业
2023-03-14

在一段时间的循环中,我使循环在一次无效输入后不会返回有效的答案,并重复“错误!无效的客户类型。再试一次。”一遍又一遍,直到我关闭程序。如果我第一次输入R或C作为输入,它会正常工作。当我输入其他任何东西时,我会得到错误信息“错误!无效的客户类型。再试一次。”就像我应该是故意的一样。然而,在输入r或c错误之后,我又会再次出现错误,我所做的任何输入都会一遍又一遍地返回错误信息,直到我关闭程序。有人能告诉我我的代码中有什么错误导致了这个问题吗?

public static String getValidCustomerType(Scanner sc)
{
    String customerType = ("");
      System.out.println("Enter the Customer Type");
      customerType = sc.next() ;
      boolean isValid = false;
      while (isValid == false)
      {
       if (customerType.equalsIgnoreCase("R")|customerType.equalsIgnoreCase("C") ) 
       {
         isValid = true;
       }
       else
       {
          System.out.println("Error! Invalid customer type. Try again ");
       }   
       sc.nextLine() ;
      }
   return customerType ;
} 

共有3个答案

乐钱青
2023-03-14

尝试以下操作:|(按位OR)与作为布尔OR运算符的|不同。其次,您没有再次分配customerType——修复方法如下。

while (isValid == false)
  {
   if (customerType.equalsIgnoreCase("R")||customerType.equalsIgnoreCase("C") ) 
   {
     isValid = true;
   }
   else
   {
      System.out.println("Error! Invalid customer type. Try again ");
   }   
    customerType = sc.nextLine() ;
  }
封瑞
2023-03-14

我认为必须将输入调用移动到while循环中。否则customerType变量总是相同的。

public static String getValidCustomerType(Scanner sc)
{
    String customerType = ("");
      System.out.println("Enter the Customer Type");
      // move this to while loop
      //customerType = sc.next() ;
      boolean isValid = false;
      while (isValid == false)
      {
       // get input here
       customerType = sc.next() ;
       if (customerType.equalsIgnoreCase("R")|customerType.equalsIgnoreCase("C") ) 
       {
         isValid = true;
       }
       else
       {
          System.out.println("Error! Invalid customer type. Try again ");
       }   
       sc.nextLine() ;
      }
   return customerType ;
} 
朱高丽
2023-03-14

在while循环中,您不会将customerType指定给它。最好还是从头开始。

public static String getValidCustomerType(Scanner sc)
{
    String customerType = ("");

      boolean isValid = false;
      while (isValid == false)
      {
          System.out.println("Enter the Customer Type");
          customerType = sc.nextLine() ;
       if (customerType.equalsIgnoreCase("R")|customerType.equalsIgnoreCase("C") ) 
       {
         isValid = true;
       }
       else
       {
          System.out.println("Error! Invalid customer type. Try again ");
       }   
      }
   return customerType ;
} 
 类似资料:
  • 本文向大家介绍C#一遍又一遍地生成相同的随机数序列,包括了C#一遍又一遍地生成相同的随机数序列的使用技巧和注意事项,需要的朋友参考一下 示例 当创建Random具有相同种子的实例时,将生成相同的编号。 输出:            

  • 从来没有真正使用过一个软件抛出这么多错误。我安装了并得到了以下所有的错误,所以尝试了一个新的安装,遵循一个重新安装的过程将它完全删除,甚至包括SDK,但再次安装它抛出了完全相同的错误。从我读到的应该只是在基本安装后工作? 第一次打开时的第一个错误: 编辑:错误地标记为副本。这不是一个重复的问题,因为三年前的解决方案对我不起作用,我还有两个错误,在重复的问题中根本没有提到。 此外,我的问题的解决方案

  • 此代码不断返回 即使选择变量是正确的。我应该进行哪些编辑以使其打印总成本?

  • 问题内容: 我想知道是否有这样一种方法来遍历java中每个循环的扩展扩展的多个集合。 所以像这样: 谢谢 问题答案: 您可以使用Guava的:

  • 我已经从http://hayageek.com/login-with-google-plus-javascript-api/ 我已经使用我的client_id,api密钥实现了代码,并且还遵循了Google oauth2中invalid_client的说明,但仍然收到相同的错误。 也在OAuth同意屏幕中并提及产品名称和电子邮件地址 错误:无效_client 应用程序:Project_Name 您

  • 我正在MST上的CLRS中尝试ch23,这里有一个问题: 给定一个图G和一个最小生成树T,假设我们减少不在T中的一条边的权重。给出了在修改图中求最小生成树的算法。 我找到的一个解决方案是在中添加此新更改的边,然后在T中创建一个简单的循环,遍历此循环并删除此循环中的最大权重边,瞧,找到了新更新的MST! 我的问题是,如何在这个简单循环中只遍历节点?因为如果我在中从这个新添加的边的一个endpoint