我开始创建游戏,现在我正在测试玩家输入。
package main;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Arrays;
public class Game {
public static void main(String[] args) throws IOException {
final char[] keyCodesArray = {'w','a','s','d'};
while(true) {
char tmp = (char) new InputStreamReader(System.in).read ();
if(Arrays.asList(keyCodesArray).contains(tmp)) {
System.out.println("You entered : " + tmp);
} else {
System.out.println("Type valid game char");
}
}
}
}
为什么,当我按下' w'或者' a',控制台打印第二次通信:"输入有效的游戏字符"而不是第一个?我搜索了StackOverflow的答案,但没有什么真正帮助我。
答案 0 :(得分:0)
您无法使用Arrays.asList()
来包装基本数组。您需要一个自定义方法来检查数组中是否包含值:
static boolean contains(char[] array, char value) {
for (char c : array)
if (c == value)
return true;
return false;
}
答案 1 :(得分:0)
您当前的方法不正确,因为当您执行Arrays.asList(keyCodesArray)
时,您获得的内容是这样的:
List<char[]>
为了使Arrays.asList(keyCodesArray)
正常工作,您需要更改此内容:
final char[] keyCodesArray = {'w','a','s','d'};
到此:
final Character[] keyCodesArray = {'w','a','s','d'};
在您应用List<Character>
时基本上提供Arrays.asList(keyCodesArray)
,因此:
if(Arrays.asList(keyCodesArray).contains(tmp)) { ... }
会起作用。