【问题标题】:Loop difficulty循环难度
【发布时间】:2020-12-27 17:35:06
【问题描述】:

从建议问题的答案中获取了一些信息并编辑了我的代码。现在我收到 || 运算符的错误。那里有什么问题?写这篇文章的正确方法是什么。

    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        String shapeName;

        do {
            System.out.println("Please identify the shape");
            System.out.print("Rectangle (Press R) / Circle (Press C): ");

            shapeName = input.next();

        } while (!shapeName.equals("R") || !shapeName.equals("C"));

【问题讨论】:

  • 只需将输入中的代码放入循环while(True)并在有效情况下退出(例如break
  • 如果你解释了你的代码有什么问题(即它没有退出循环)会很有帮助,因为如果你说你“得到一个错误”人们希望你得到一个运行时异常或编译时错误。

标签: java loops


【解决方案1】:

在您的代码中,while 语句的条件是错误的。

替换

while (!shapeName.equals("R") || !shapeName.equals("C"));

while (!(shapeName.equals("R") || shapeName.equals("C")));

--或--

while (!shapeName.equals("R") && !shapeName.equals("C"));

在使用|| 组合条件的情况下,仅当条件评估为false 时才检查此组合中的下一个条件,即一旦条件评估为true,则不检查组合中的下一个条件并且组合评估为true

在使用&& 组合条件的情况下,仅当条件评估为true 时才检查此组合中的下一个条件,即一旦条件评估为false,则不检查组合中的下一个条件并且组合评估为false

你的病情有什么问题?

让我们看看您的条件是如何产生不良结果的。

当用户输入R时,你的条件将如下评估

while (!shapeName.equals("R") || !shapeName.equals("C")); => while (false ||  !shapeName.equals("C")); => while (false ||  true); => while (true);

当用户输入C时,你的条件将如下评估

while (!shapeName.equals("R") || !shapeName.equals("C")); => while (true ||  !shapeName.equals("C")); => while (true);

因此,使用您的条件,尽管用户输入了所需的输入,while 条件仍会强制它循环返回。

现在,尝试使用我在答案中建议的while 条件进行相同的练习。

【讨论】:

  • 实际上与 && 工作正常的选项。但是第二个选项你用||写什么操作员不工作。当我输入R或C时程序退出。但是&&选项没问题
  • @BahramAfandi - 两个建议条件的行为方式相同且正确,即如果输入不是CR,它们将强制用户再次输入。如果用户输入CR,则不会强制用户输入。
  • 是的,你是对的,我很抱歉。非常感谢你。解决了!
【解决方案2】:

好的,所以您有了“要求选择选项,如果没有选择任何可用选项,请告诉用户,然后再次提示”的概念。

这是一堆工作。所以制作一个方法。

public static String pick(Scanner scanner, String prompt, String... options) {
    while (true) {
        System.out.println(prompt);
        String choice = scanner.next();
        for (String option : options) {
            if (option.equals(choice)) return choice;
        }
        System.out.println("Error - that is not an available choice.");
    }
}

并使用:

String choice = pick(scanner,
  "Please identify the shape\nRectangle (R) / Circle (C): ",
  "R", "C");

【讨论】:

  • 但是回来需要再次测试 choice 来执行预期的关联操作,将代码放入 while(True) 并使用 break 退出循环更简单在有效时预期的操作之后
  • 感谢您提供信息。由于从另一个建议的问题中获取信息,我现在编辑了我的问题。现在又一个困难..
  • 好的,所以您没有按照我的建议进行操作,而是将问题编辑为完全不同的问题。在使用该服务之前,请先查看 SO 指南。谢谢!
  • @rzwitserloot 抱歉,下次我会考虑的。但我检查了你的建议。它根本没有帮助。感谢您的关注
【解决方案3】:
public static void main(String[] args) {
    Scanner input = new Scanner(System.in);
      char ch2;
  do{
      char choice;
      System.out.println("Please identify the shape"); 
      System.out.print("Rectangle (Press R) / Circle (Press C): ");
      choice=input.next().charAt(0);
switch(choice){
    case 'R':
       System.out.println("Do first operation bla bla bla");
      break;
  case 'C':
    System.out.println("Do second operation bla bla bla");
    break;
  default:
       System.out.println("ERROR");
       break;
}
System.out.println("do u want to continue enter y/n");
 ch2=input.next().charAt(0);
}
while((ch2!='n')&& (ch2!='N'));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-26
    • 2019-03-10
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多