Java 检查arraylist中以前的输入

Java 检查arraylist中以前的输入,java,arraylist,Java,Arraylist,我想知道如何检查以前存储在arraylist中的用户输入 例如,我要求用户输入我存储在arraylist中的字母。我需要确保他们不再猜同一个字母,但我不知道怎么猜。任何提示都将不胜感激 Scanner scan = new Scanner(System.in); ArrayList<String>guesses=new ArrayList<String>(); System.out.println("Enter a letter"); S

我想知道如何检查以前存储在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);

由于在哈希集中搜索现有值的速度比在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
}

如果您不需要任何副本,那么我建议您使用哈希集。要查看之前是否进行了猜测,只需调用contains方法

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

首先,作为一种良好实践,您应该始终为接口编码,因此:

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

迭代列表,看看值是否已经在列表中。@Jens是的,我试过了,但我不确定如何避免检查当前输入。比如说我现在在索引3,但我想检查1和2,非常感谢你!!我还没有在课堂上学习HashSet,所以我不可能使用它,但是第二种方法非常有效!谢谢你的提示!我只是在学习这一点,所以它对我来说仍然是全新的。Set的另一个好处是它告诉你是否可以将项目添加到集合中,所以你可以使用if!改为guesses.adduserInput{/*已在集合中*/}。但你的答案仍然是正确的。
List<String>guesses=new ArrayList<String>();
if (!guesses.contains(userInput)) 
    guesses.add(userInput);
else 
    // if you want you can intimate the user of a duplicate value