Java 为什么Arrays.asList(…).contains(…)不是';不行吗?

Java 为什么Arrays.asList(…).contains(…)不是';不行吗?,java,Java,我开始创建游戏,现在我正在测试玩家输入 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',

我开始创建游戏,现在我正在测试玩家输入

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中搜索答案,但没有任何帮助。

不能使用
Arrays.asList()
包装基本数组。您需要一个自定义方法来检查数组中是否包含值:

static boolean contains(char[] array, char value) {
    for (char c : array)
        if (c == value)
            return true;
    return false;
}

您当前的方法是不正确的,因为当您执行
Arrays.asList(keyCodesArray)
时,您得到的结果如下所示:

List<char[]> 
为此:

final Character[] keyCodesArray = {'w','a','s','d'};
当您应用数组时,它本质上提供了一个
列表
。asList(keyCodesArray),因此:

if(Arrays.asList(keyCodesArray).contains(tmp)) { ... }

可以。

你认为数组的类型是什么?(注意:它不是
列表
)我只想在这里使用一个字符串“wasd”(注意循环中的
new
if(Arrays.asList(keyCodesArray).contains(tmp)) { ... }