Java 无法将值添加到列表中

Java 无法将值添加到列表中,java,Java,您好,我正在尝试将值添加到列表中,如下代码所示。我犯了一个错误 for (String n2 : number ) { List<String> ARRAY = new ArrayList<String>(); if (!ARRAY.contains(number)) { ARRAY.add(number); }} for(字符串n2:编号){ 列表数组=新的ArrayList(); 如果(!ARRAY

您好,我正在尝试将值添加到列表中,如下代码所示。我犯了一个错误

for (String n2 : number  ) {


   List<String> ARRAY  = new ArrayList<String>();
                if (!ARRAY.contains(number)) {
        ARRAY.add(number);
   }}
for(字符串n2:编号){
列表数组=新的ArrayList();
如果(!ARRAY.contains(number)){
数组。添加(数字);
}}
但将数字添加到列表时出错

错误

java:271:错误:找不到适合添加(列表)的方法
数组。添加(数字);
^
方法列表。添加(int,String)不适用
(实际参数列表和正式参数列表长度不同)
方法列表。添加(字符串)不适用
(实际参数列表无法通过方法invo转换为字符串。)
如果我像下面这样使用

   for (String n2 : number  ) {
  List<String> ARRAY  = new ArrayList<String>();
  if (!ARRAY.contains(n2)) {
   Email(n2);
      ARRAY.add(n2);
  }
}
for(字符串n2:编号){
列表数组=新的ArrayList();
如果(!ARRAY.contains(n2)){
电子邮件(n2);
数组。添加(n2);
}
}
如果我使用上面的。虽然已经再次发送了带有n2值的电子邮件,但它正在再次发送。
第一次它必须发送,但第二次因为它已经在数组中,所以不应该正确发送?

您正在尝试将集合-编号添加到字符串列表中。 我假设您正在尝试将n2添加到数组中

ARRAY.add(n2);

number
是字符串的集合,您正在添加int
ARRAY
而不是add
n2

List<String> ARRAY  = new ArrayList<String>();
   for (String n2 : number  ) {
       if (!ARRAY.contains(n2)) {
          ARRAY.add(n2);
      }
    }
List ARRAY=new ArrayList();
for(字符串n2:编号){
如果(!ARRAY.contains(n2)){
数组。添加(n2);
}
}
1)数组应该在for循环之外

2) 将if(!ARRAY.contains(number))替换为if(!ARRAY.contains(n2))

您的代码需要这样

 List<String> ARRAY  = new ArrayList<String>();
 for (String n2 : number  ) {
     if (!ARRAY.contains(n2 )) {
          ARRAY.add(n2);
     }
 }
List ARRAY=new ArrayList();
for(字符串n2:编号){
如果(!ARRAY.contains(n2)){
数组。添加(n2);
}
}

恐怕您的代码的错误不仅仅是那一个错误。正如已经多次指出的那样,您正在尝试向
数组
中添加一个字符串的iterable集合,
number
,而不是作为迭代变量的
n2
。如果要添加完整的
集合
实例,可以使用
addAll()

至于其余的,我强烈建议坚持Java命名约定,并对变量使用小写名称。这将提高可读性,因为社区的许多成员都坚持这一惯例。你可以找到一篇整洁的文章

除非代码高度简化,否则您似乎还会犯在循环范围内声明
ArrayList
的错误。每次进入循环时,都会实例化一个新的
ArrayList
。我不确定你想做什么。一定要检查你的设计

另外,如果您只是想避免重复值,我建议使用
Set
,因为它会在插入时使用每个成员的
hashCode()
自动执行检查,以检查冲突。试着做:

HashSet<String> uniqueSet = new HashSet<>(number);
HashSet uniqueSet=新的HashSet(编号);

您现在应该有一个唯一字符串的
集合。

您的代码的问题是您正在添加
编号,而不是
n2

List<String> ARRAY  = new ArrayList<String>();
   for (String n2 : number  ) {
       if (!ARRAY.contains(n2)) {
          ARRAY.add(n2);
      }
    }
像这样更改代码

 List<String> ARRAY  = new ArrayList<String>();
    for (String n2 : number  ) {
          if (!ARRAY.contains(n2)) {
              ARRAY.add(n2);
          }
       }
List ARRAY=new ArrayList();
for(字符串n2:编号){
如果(!ARRAY.contains(n2)){
数组。添加(n2);
}
}
List ARRAY=new ArrayList();
for(字符串n2:编号){
如果(!ARRAY.contains(n2)){
数组。添加(n2);
}
}
列表数组=新的ArrayList()//把这个脱线

他为什么要创建一个新的`List ARRAY=new ArrayList();`在每个循环中?该代码将不起作用,在每个循环中,数组列表将重新初始化,n2将永远不会位于
ARRAY
list@Sergio对它是。但我的答案只是它的问题和相关的错误。@SergioMartinez。。为了避免阵列中的数据丢失,最好使用什么选项reinitialized@user3375647使用Prabhakaran溶液,是否正确,并检查是否正确correct@user3375647使用prabhkaran解决方案而不是我的..有些人会因为(字符串n2:number){List ARRAY=new ArrayList();如果(!ARRAY.contains(n2)){Email(n2);ARRAY.add(n2);}}如果我在上面使用。虽然已再次发送值为n2的电子邮件,但它正在再次发送。第一次它必须发送,但第二次因为它已经在数组中,所以不应该正确发送?代码中错误的事情是在循环中声明数组-每次都会创建一个新数组,并且if条件永远不会为false。只有西斯绝对处理!认真地看所有答案,很多都是对的!您的编辑仍然包含数组包含在循环范围内的设计错误。循环迭代结束后,数组将丢失。请检查我的答案以获得解释。
List<String> ARRAY  = new ArrayList<String>();
for (String n2 : number  ) {
    if (!ARRAY.contains(n2)) {
        ARRAY.add(n2);
    }
}

List<String> ARRAY  = new ArrayList<String>(); //have this out of the thread