检查arraylist中的先前输入

时间:2015-04-13 05:47:22

标签: java arraylist

我想知道如何检查以前存储在arraylist中的用户输入。

例如,我要求用户输入我存储在arraylist中的字母。我需要确保他们不会再次猜出同一封信,但我不确定如何。任何提示都表示赞赏。

    Scanner scan = new Scanner(System.in);
    ArrayList<String>guesses=new ArrayList<String>();

    System.out.println("Enter a letter");
    String userInput = scan.next();
    guesses.add(userInput);

3 个答案:

答案 0 :(得分:5)

使用HashSet可以更好地使用该功能,因为在HashSet中搜索现有值比在ArrayList中更快。

Scanner scan = new Scanner(System.in);
Set<String> guesses=new HashSet<String>();

System.out.println("Enter a letter");
String userInput = scan.next();
if (guesses.contains(userInput)) {
    // the user repeated a guess
} else {
    guesses.add(userInput);
}

当然,如果你一次只接受一个字符,你可以使用一个简单的数组来查找猜测是否重复:

Scanner scan = new Scanner(System.in);
boolean[] guesses=new boolean[26];

System.out.println("Enter a letter");
String userInput = scan.next();
char c = userInput.charAt(0);
if (c >= 'a' && c <= 'z' && !guesses[c-'a']) {
    guesses[c-'a']=true;
    // this is a valid guess
} else {
    // this is an invalid guess
}

答案 1 :(得分:1)

如果您不想要任何重复项,那么我建议您使用HashSet。要查看之前是否已完成猜测,只需调用contains()方法。

if (!guesses.contains(userInput)) {
    guesses.add(userInput);
} else {
    ...
}

答案 2 :(得分:1)

首先,作为一种好的做法,您应该始终编写一个接口代码:

ArrayList<String>guesses=new ArrayList<String>();

应更改为:

List<String>guesses=new ArrayList<String>();

现在回到你的问题,有两种选择:

  1. 而不是List使用Set,因为它避免重复,您可以确保具有唯一值(推荐)

  2. 每次输入后
  3. 执行

    if (!guesses.contains(userInput)) 
        guesses.add(userInput);
    else 
        // if you want you can intimate the user of a duplicate value