Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.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 只要用户输入不为';t等于某些单词不起作用?_Java_Netbeans - Fatal编程技术网

Java 只要用户输入不为';t等于某些单词不起作用?

Java 只要用户输入不为';t等于某些单词不起作用?,java,netbeans,Java,Netbeans,我不明白这为什么不起作用。无论我输入什么,即使是一个有效的动作词,程序都会重新编译我 String action = ""; do { System.out.print("Enter what you want to do (ADD, REMOVE, " + "LIST, SAVE, SORT): "); action = keyboard.next(); } while ((!(action.

我不明白这为什么不起作用。无论我输入什么,即使是一个有效的动作词,程序都会重新编译我

String action = "";
        do {
        System.out.print("Enter what you want to do (ADD, REMOVE, "
                   + "LIST, SAVE, SORT): ");
        action = keyboard.next();
        } while ((!(action.equalsIgnoreCase("ADD")) 
                || !(action.equalsIgnoreCase("REMOVE")) 
                || !(action.equalsIgnoreCase("LIST")) 
                || !(action.equalsIgnoreCase("SAVE")) 
                || !(action.equalsIgnoreCase("SORT"))));

对。你用了or,但你想要和

((!(action.equalsIgnoreCase("ADD")) 
            && !(action.equalsIgnoreCase("REMOVE")) 
            && !(action.equalsIgnoreCase("LIST")) 
            && !(action.equalsIgnoreCase("SAVE")) 
            && !(action.equalsIgnoreCase("SORT"))));
每个单词都将满足测试,不添加或不删除。你可以这样申请


您的组合
while
条件始终为
true
。如果
!(action.equalsIgnoreCase(“ADD”)
false
,则
action
字符串必须为
“ADD”
。因此所有其他条件将为
true
。因此整个条件为
true

将您的
|
替换为
&&

或者,将您的单词放入
列表
或其他容器中并进行测试

while (!words.contains(action))

您的条件是错误的。如果
action
不等于任何有效操作词,您应该终止循环,但只要
action
不等于至少一个有效操作,您的条件就会继续循环,这始终是真的(因为valid一次最多只能等于一个有效操作)

正确的条件应为:

    } while ((!(action.equalsIgnoreCase("ADD")) 
            && !(action.equalsIgnoreCase("REMOVE")) 
            && !(action.equalsIgnoreCase("LIST")) 
            && !(action.equalsIgnoreCase("SAVE")) 
            && !(action.equalsIgnoreCase("SORT"))));
试试这个

String action = "";
    do {
    System.out.print("Enter what you want to do (ADD, REMOVE, "
               + "LIST, SAVE, SORT): ");
    action = keyboard.next();
    } while (!((action.equalsIgnoreCase("ADD")) 
            || (action.equalsIgnoreCase("REMOVE")) 
            || (action.equalsIgnoreCase("LIST")) 
            || (action.equalsIgnoreCase("SAVE")) 
            || (action.equalsIgnoreCase("SORT"))));

De Morgan看到你的情况会很难过:这已经被问了很多次了。我会努力找到重复的,但认真地说,人们,提供更多相同的答案是浪费每个人的时间。@DavidWallace你怎么看?是的,@Pshemo,我以前没见过。这不是我想要的,但我知道喜欢Oded的答案。这是我的答案之一,但我不想在上面使用dup hammer,因为我更愿意找到更好的方法。@MinaHan这些条件相互排斥,因此默认情况下只能满足其中一个。@MinaHan循环(在我建议的修复之后)只要动作不等于所有动作,它就会继续,这意味着当动作等于其中一个动作时,它就会退出。
String action = "";
    do {
    System.out.print("Enter what you want to do (ADD, REMOVE, "
               + "LIST, SAVE, SORT): ");
    action = keyboard.next();
    } while (!((action.equalsIgnoreCase("ADD")) 
            || (action.equalsIgnoreCase("REMOVE")) 
            || (action.equalsIgnoreCase("LIST")) 
            || (action.equalsIgnoreCase("SAVE")) 
            || (action.equalsIgnoreCase("SORT"))));