为什么Arrays.asList(...)。包含(...)不起作用?

时间:2017-06-16 20:00:56

标签: 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','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的答案,但没有什么真正帮助我。

2 个答案:

答案 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)) { ... }

会起作用。