Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这些if语句和for循环不';行不通_Java_Loops_Arraylist_Equals - Fatal编程技术网

Java 这些if语句和for循环不';行不通

Java 这些if语句和for循环不';行不通,java,loops,arraylist,equals,Java,Loops,Arraylist,Equals,我有这个代码的问题 数据是一个observableArrayList,它包含一个名为table的双字符串数组。 Detritable是另一个字符串双数组,其格式与数据中的表相同。 我只在数据中没有一个表与我要添加的表相等时才尝试添加数据,但由于某些原因,只有当数据不为空时,它才会添加,并且在添加数据时,如果数据中存在一个现有表或不存在一个现有表,则会同时添加这两个表 我没有从运行这个中得到任何错误 编辑我使代码更易于阅读 for (int i = 0; i < s.length; i++)

我有这个代码的问题

数据是一个observableArrayList,它包含一个名为table的双字符串数组。 Detritable是另一个字符串双数组,其格式与数据中的表相同。 我只在数据中没有一个表与我要添加的表相等时才尝试添加数据,但由于某些原因,只有当数据不为空时,它才会添加,并且在添加数据时,如果数据中存在一个现有表或不存在一个现有表,则会同时添加这两个表

我没有从运行这个中得到任何错误

编辑我使代码更易于阅读

for (int i = 0; i < s.length; i++) {
  int p = data.size();
  Table tempTable = new Table(Integer.parseInt(s[i][0]), s[i][1], s[i][2], s[i][3], s[i][4], s[i][5], s[i][6], s[i][7], s[i][8], s[i][9], s[i][10], s[i][11], s[i][12], s[i][13], s[i][14], s[i][15], s[i][16]);
  for (int j = 0; j < p; j++){
    if (!data.get(j).equals(tempTable)){
      data.add(tempTable);
      break;
    }
  }
}
for(int i=0;i
您的逻辑颠倒了:

for (int j = 0; j < p; j++){
  if (!data.get(j).equals(tempTable)){
    data.add(tempTable);
    break;
  }
}

2件事:没有缩进,缺少括号您是否为
类定义了
等于
?不管您存储在其中的数据是什么,当您执行这样的操作时,Java只会查看
equals
。结果应该是什么?不,因为我这样做会添加所有唯一的元素,但会跳过所有非唯一的元素。问题是它仍然无法比较。除了使用equals,还有其他方法吗?@Tilion不,事情不是这样的。假设
data
有两个不同的元素。现在,您设置了一个
attreable
,它等于
data.get(0)
。我认为您的计划不是添加它,因为它等于
data.get(0)
。但是,当
j
为1时,
!data.get(j).equals(entitable)
true
(因为
entitable
等于
data.get(0)
,而不是
data.get(1)
),所以原始代码会再次添加它。基本上,你的逻辑并不是在做你认为它在做的事情。是的,你是正确的。非常感谢。我们尝试只比较数组中第一个整数的值和observableArrayList中每个数组的第一个整数的值,现在可以了。非常感谢。
boolean found = false;
for (int j = 0; j < p; j++){
  if (data.get(j).equals(tempTable)){
    found = true;
    break;
  }
}
if (!found)
  data.add(tempTable);