Java比较2个字符并将其添加到ArrayList

Java比较2个字符并将其添加到ArrayList,java,arraylist,char,Java,Arraylist,Char,其思想是用户输入一个字符。然后将该字符与字符的ArrayList匹配,如果该字符已经在那里,那么它将返回一个print语句,但是如果它不在那里,那么它将被添加到ArrayList中。以下是我的代码: System.out.println("Enter Your guess: "); char c1 = input.next().charAt(0); for(Character c: charact

其思想是用户输入一个字符。然后将该字符与字符的ArrayList匹配,如果该字符已经在那里,那么它将返回一个print语句,但是如果它不在那里,那么它将被添加到ArrayList中。以下是我的代码:

                System.out.println("Enter Your guess: ");
                char c1 = input.next().charAt(0);


                for(Character c: characters){
                    if(c.equals(c1)){
                        System.out.println("Cant do that");
                    }
                    else{
                        characters.add(c1);
                    }
我试着调试它,结果似乎是它接受了c1的值,但是它失败了,并且在if语句中没有做任何事情。所以我很难比较这两个字符。非常感谢您的帮助。

请使用

 String temp = Character.toString(c);
 String temp1 = Character.toString(c1);
 if(temp.equals(temp1)){

 }
也许试试

if (characters.contains(c)) {
  // cannot add...
} else {
  // can add.
}
顺便说一句,如果字符是一个集合,那么它将只存储唯一的值。

尝试以下操作:

 public static void main(String[] args) {
    ArrayList<Character> list = new ArrayList<Character>(0);

    list.add('a');
    list.add('b');
    list.add('c');
    list.add('d');
    list.add('e');

    char c = 'e';

    if (list.contains(c)) {
        System.out.println(c + "already in list");
    } else {
        list.add(c);
    }

    System.out.println(list.toString());
}
          ArrayList testList = new ArrayList();
              System.out.println("Enter Your guess: ");
            char c1 = input.next().charAt(0);
             testList.add(c1)
               if(false==testList.contains(c1))
                { 
                    System.out.println("Cant do that");
                }
                else
                {
                    testList.add(c1);
                }
publicstaticvoidmain(字符串[]args){
ArrayList=新的ArrayList(0);
列表。添加('a');
列表。添加('b');
列表。添加('c');
列表。添加('d');
列表。添加('e');
字符c='e';
如果(列表包含(c)){
System.out.println(c+“已在列表中”);
}否则{
增加(c)项;
}
System.out.println(list.toString());
}

您将有一个运行此代码的
ConcurrentModificationException
,因为您试图在迭代列表时修改它

即使这个错误不是问题,您的方法也不会起作用,因为您只检查第一个字符是否等于您输入的字符

执行任务的最佳方法是使用
集合
,因为它不允许重复的元素

Set<Character> set = new HashSet<>(Arrays.asList('a','b','c'));

...

System.out.println("Enter Your guess: ");
char c1 = input.next().charAt(0);
if(set.contains(c1)){
    System.out.println("char already in the set");
} else {
  set.add(c1);
}
因为
add
返回false,如果元素已经存在于集合中,则该集合保持更改状态。

请尝试以下操作:

 public static void main(String[] args) {
    ArrayList<Character> list = new ArrayList<Character>(0);

    list.add('a');
    list.add('b');
    list.add('c');
    list.add('d');
    list.add('e');

    char c = 'e';

    if (list.contains(c)) {
        System.out.println(c + "already in list");
    } else {
        list.add(c);
    }

    System.out.println(list.toString());
}
          ArrayList testList = new ArrayList();
              System.out.println("Enter Your guess: ");
            char c1 = input.next().charAt(0);
             testList.add(c1)
               if(false==testList.contains(c1))
                { 
                    System.out.println("Cant do that");
                }
                else
                {
                    testList.add(c1);
                }

你为什么要这么做?在
Character
classHmm中有一个非常好的
equals
方法,它产生了“不能对原语类型char调用toString()”@raj
c.equals(c1)
有什么问题?这很好。无法对原语类型char调用equals(char)@ZouZou@raj不,这是不可能的,因为
c
字符
,所以
c1
被装箱到
字符
。尝试
字符c='d';字符c1='d';系统输出println(c等于(c1))