【问题标题】:These if statements and for loops don't work [closed]这些 if 语句和 for 循环不起作用[关闭]
【发布时间】:2014-12-09 16:22:07
【问题描述】:

这段代码有这个问题。

data 是一个 observableArrayList 并保存一个名为 table 的双精度字符串数组。 tempTable 是另一个双精度字符串数组,其格式与数据中的表相同。 我仅在数据中没有与我要添加的表相等的表时才尝试将 tempTable 添加到数据中,但由于某种原因,它只会在数据不为空时添加,并且在添加时添加两者(如果存在)是现有表,或者数据中不存在现有表。

运行此程序没有任何错误。

编辑我使代码更易于阅读

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;
    }
  }
}

【问题讨论】:

  • 两件事:没有缩进,缺少括号
  • 您是否为您的Table 班级定义了equals?无论您在其中存储什么数据,Java 只会在您执行此类操作时查看 equals
  • 假设data 包含1、10、2,tempTable 包含1、20、10。结果应该是什么?

标签: java loops arraylist equals


【解决方案1】:

你的逻辑倒退了:

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

如果data 中的任何元素不等于tempTable,这将添加tempTable。只有当 all 元素不相等时,您才想添加它:

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

【讨论】:

  • 不,因为我这样做的方式会添加所有唯一的元素,但会跳过所有非唯一的元素。问题是它仍然无法比较。除了使用equals还有其他方法吗?
  • @Tilion 不,事实并非如此。假设 data 有 2 个不同的元素。现在您设置了一个等于data.get(0)tempTable。我认为您的计划不是添加它,因为它等于data.get(0)。但是,当j 为1 时,!data.get(j).equals(tempTable)true(因为tempTable 等于data.get(0) 但不等于data.get(1)),所以您的原始代码再次添加它。基本上,你的逻辑并没有按照你的想法去做。
  • 是的,你是对的。谢谢你。我们尝试仅比较数组中第一个整数的值和 observableArrayList 中每个数组的第一个整数的值,现在它可以工作了。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-19
  • 1970-01-01
  • 2013-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多