字符串的逻辑运算符问题
Issue with logical operator for Strings
我正在尝试编写一个循环来提示用户输入,直到输入 "AM"
或 "PM"
(不区分大小写)。但是,即使输入 "AM"
或 "PM"
,以下代码也会使我进入无限循环。 console
是我的扫描仪 class 变量。
String AMPM = "";
do {
System.out.println("Enter AM or PM: ");
AMPM = console.next();
} while (!AMPM.equalsIgnoreCase("AM") || !AMPM.equalsIgnoreCase("PM"));
我已经尝试删除第二个 !
,它只会打破 "AM"
的循环。
!AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM")
我做错了什么?
!AMPM.equalsIgnoreCase("AM") && !AMPM.equalsIgnoreCase("PM")
(如@saka1029deleted 建议的那样)
或:
!( AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM") )
说明
AM
PM
!AMPM.equalsIgnoreCase("AM")
false
true
!AMPM.equalsIgnoreCase("PM")
true
false
!AMPM.equalsIgnoreCase("AM") && !AMPM.equalsIgnoreCase("PM")
false
false
AM
PM
AMPM.equalsIgnoreCase("AM")
true
false
AMPM.equalsIgnoreCase("PM")
false
true
AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM")
true
true
!( AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM") )
false
false
tl;博士
do { … }
while (
!
List
.of( "AM" , "PM" )
.contains( input.toUpperCase() )
)
详情
hata 的回答似乎是正确的。
我发现更容易阅读的另一种方法是使用流。制作目标值流。然后询问是否有任何符合您的输入。
boolean expectedInput = List.of( "AM" , "PM" ).stream().anyMatch( target -> target. equalsIgnoreCase( input ) ) ;
一个更简单的替代方法是询问列表是否包含转换为大写的输入的副本。
boolean expectedInput = List.of( "AM" , "PM" ).contains( input.toUpperCase() ) ;
我正在尝试编写一个循环来提示用户输入,直到输入 "AM"
或 "PM"
(不区分大小写)。但是,即使输入 "AM"
或 "PM"
,以下代码也会使我进入无限循环。 console
是我的扫描仪 class 变量。
String AMPM = "";
do {
System.out.println("Enter AM or PM: ");
AMPM = console.next();
} while (!AMPM.equalsIgnoreCase("AM") || !AMPM.equalsIgnoreCase("PM"));
我已经尝试删除第二个 !
,它只会打破 "AM"
的循环。
!AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM")
我做错了什么?
!AMPM.equalsIgnoreCase("AM") && !AMPM.equalsIgnoreCase("PM")
(如@saka1029deleted 建议的那样) 或:
!( AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM") )
说明
AM | PM | |
---|---|---|
!AMPM.equalsIgnoreCase("AM") | false | true |
!AMPM.equalsIgnoreCase("PM") | true | false |
!AMPM.equalsIgnoreCase("AM") && !AMPM.equalsIgnoreCase("PM") | false | false |
AM | PM | |
---|---|---|
AMPM.equalsIgnoreCase("AM") | true | false |
AMPM.equalsIgnoreCase("PM") | false | true |
AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM") | true | true |
!( AMPM.equalsIgnoreCase("AM") || AMPM.equalsIgnoreCase("PM") ) | false | false |
tl;博士
do { … }
while (
!
List
.of( "AM" , "PM" )
.contains( input.toUpperCase() )
)
详情
hata 的回答似乎是正确的。
我发现更容易阅读的另一种方法是使用流。制作目标值流。然后询问是否有任何符合您的输入。
boolean expectedInput = List.of( "AM" , "PM" ).stream().anyMatch( target -> target. equalsIgnoreCase( input ) ) ;
一个更简单的替代方法是询问列表是否包含转换为大写的输入的副本。
boolean expectedInput = List.of( "AM" , "PM" ).contains( input.toUpperCase() ) ;