Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 环路难度_Java_Loops - Fatal编程技术网

Java 环路难度

Java 环路难度,java,loops,Java,Loops,从建议问题的答案中获得一些信息,并编辑了我的代码。现在我得到一个|操作符的错误。怎么了?写这篇文章的正确方式是什么 public static void main(String[] args) { Scanner input = new Scanner(System.in); String shapeName; do { System.out.println("Please identify the sh

从建议问题的答案中获得一些信息,并编辑了我的代码。现在我得到一个|操作符的错误。怎么了?写这篇文章的正确方式是什么

    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"));

好的,你有这样一个概念“要求选择选项,如果没有选择任何可用选项,告诉用户,然后再次提示”

那是一堆工作。所以,制定一个方法

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");

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

替换

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);
while (!shapeName.equals("R") || !shapeName.equals("C")); => while (true ||  !shapeName.equals("C")); => while (true);
当用户输入
C
时,您的状况将评估如下

while (!shapeName.equals("R") || !shapeName.equals("C")); => while (false ||  !shapeName.equals("C")); => while (false ||  true); => while (true);
while (!shapeName.equals("R") || !shapeName.equals("C")); => while (true ||  !shapeName.equals("C")); => while (true);
因此,使用您的条件,尽管用户输入了所需的输入,
while
条件强制它返回


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

只需将输入中的代码放入循环
while(True)
,然后在有效情况下退出(例如,中断)该循环。如果您解释了代码的错误(即它没有退出循环),这将非常有用,因为如果你说你“得到一个错误”,人们期望你得到一个运行时异常或编译时错误。但是回来后需要再次测试以选择执行预期的相关操作,将代码放入
while(True)更简单
并使用
break
在预期操作生效后退出循环谢谢您提供信息。由于从另一个建议的问题中获得信息,我现在编辑了我的问题。现在是另一个困难……好吧,你没有按照我的建议去做,把这个问题编辑成一个完全不同的问题。使用服务前,请先查看SO指南。谢谢大家!@对不起,下次我会考虑的。但我检查了你的建议。这毫无帮助。感谢您的关注,请使用&&working ok选项。但第二个选项,您使用的| |运算符不起作用。输入R或C时程序退出。但&&选项为ok@BahramAfandi-两个建议条件的行为方式相同且正确,即,如果输入不是
C
R
,它们将强制用户再次输入。如果用户输入
C
R
,他们不会强制用户输入。是的,你是对的,我的错。非常感谢你。解决了的!不客气。