比较 KeyEvent .getText 和数组 javafx 中的索引时,if 语句 returns 输出错误
if statement returns wrong output when comparing KeyEvent .getText and index in array javafx
我正在尝试检查来自用户的输入(以按键的形式)是否与已分解为字符数组的字符串 textToType
相同。问题是即使它们 return 具有相同的值,当我比较它们时它仍然会给出输出 wrong letter
.
输出
index splitter [0] returned: t
event.getText returned: t
wrong letter
@FXML
private void detectInputAreaKeyEvent(KeyEvent event) {
char[] splitter = textToType.toCharArray();
System.out.println("index splitter [0] returned: " + splitter[0]);
System.out.println("event.getText returned: " + event.getText());
if (event.getText().equals(splitter[0])) {
System.out.println("right letter");
}
else {
System.out.println("wrong letter");
}
TLDR:您正在比较 String
和 char
,因此它们不相等。
KeyEvent.getText()
returns一个String
,而splitter[0]
是原始类型char
.
因为 String.equals(...)
需要一个 Object
,所以当你调用
event.getText().equals(splitter[0])
splitter[0]
自动装箱 到类型 Character
的包装器对象。因此,您将 String
与 Character
进行比较。 String.equals()
documentation 状态
The result is true if and only if the argument is not null and is a String object ...
(我的重点)。由于您提供的是 Character
实例,而不是 String
实例,因此 equals()
的结果为 false。
您可以通过比较相同类型的事物来解决此问题:
if (event.getText().charAt(0) == splitter[0])
或
if (event.getText().equals(textToType.substring(0,1)))
(第一个可能稍微更有效率)。
我正在尝试检查来自用户的输入(以按键的形式)是否与已分解为字符数组的字符串 textToType
相同。问题是即使它们 return 具有相同的值,当我比较它们时它仍然会给出输出 wrong letter
.
输出
index splitter [0] returned: t
event.getText returned: t
wrong letter
@FXML
private void detectInputAreaKeyEvent(KeyEvent event) {
char[] splitter = textToType.toCharArray();
System.out.println("index splitter [0] returned: " + splitter[0]);
System.out.println("event.getText returned: " + event.getText());
if (event.getText().equals(splitter[0])) {
System.out.println("right letter");
}
else {
System.out.println("wrong letter");
}
TLDR:您正在比较 String
和 char
,因此它们不相等。
KeyEvent.getText()
returns一个String
,而splitter[0]
是原始类型char
.
因为 String.equals(...)
需要一个 Object
,所以当你调用
event.getText().equals(splitter[0])
splitter[0]
自动装箱 到类型 Character
的包装器对象。因此,您将 String
与 Character
进行比较。 String.equals()
documentation 状态
The result is true if and only if the argument is not null and is a String object ...
(我的重点)。由于您提供的是 Character
实例,而不是 String
实例,因此 equals()
的结果为 false。
您可以通过比较相同类型的事物来解决此问题:
if (event.getText().charAt(0) == splitter[0])
或
if (event.getText().equals(textToType.substring(0,1)))
(第一个可能稍微更有效率)。