【问题标题】:Sorting an array of object, then setText with if else对对象数组进行排序,然后使用 if else 设置文本
【发布时间】:2019-05-13 20:38:57
【问题描述】:

我已经对一个双值数组进行了排序

Arrays.sort(banding);

然后我想设置具有特定字符串值“CUKUP”的最高值的文本。如果不是“CUKUP”,则必须是“LEBIH”,我不希望任何“LEBIH”字符串值作为输出

        if (banding[6].getKetTotal().equals("CUKUP")) {
            untungtertinggi.setText(Double.toString(banding[6].harga));
        } else if (banding[6].getKetTotal().equals("LEBIH")) {
            if (banding[5].getKetTotal().equals("CUKUP")) {
                untungtertinggi.setText(Double.toString(banding[5].harga));
            }
        }else if (banding[5].getKetTotal().equals("LEBIH")) {
            if (banding[4].getKetTotal().equals("CUKUP")) {
                untungtertinggi.setText(Double.toString(banding[4].harga));
            }
        }else if (banding[4].getKetTotal().equals("LEBIH")) {
            if (banding[3].getKetTotal().equals("CUKUP")) {
                untungtertinggi.setText(Double.toString(banding[3].harga));
            }
        }else if (banding[3].getKetTotal().equals("LEBIH")) {
            if (banding[2].getKetTotal().equals("CUKUP")) {
                untungtertinggi.setText(Double.toString(banding[2].harga));
            }
        }else if (banding[2].getKetTotal().equals("LEBIH")) {
            if (banding[1].getKetTotal().equals("CUKUP")) {
                untungtertinggi.setText(Double.toString(banding[1].harga));
            }
        }else if (banding[1].getKetTotal().equals("LEBIH")) {
            if (banding[0].getKetTotal().equals("CUKUP")) {
                untungtertinggi.setText(Double.toString(banding[0].harga));
            }
        }

这种编码仍然是错误的,因为当所有数组都有字符串值“CUKUP”时,它不会将最高的双精度值作为输出

【问题讨论】:

  • 如果你已经对数组进行了排序,为什么不遍历数组(可能向后),并检查值是CUKUP 还是LEBIH。然后您可以简化逻辑。
  • 你确定排序是否按预期工作,我问的是因为如果所有项目都包含 CUKUP 那么第一个 if 应该输出正确的值?
  • @JoakimDanielson 当我对数组进行排序并一一检查它是否正确时。但是当我设置一个 if 条件时,它不能按预期工作

标签: java arrays if-statement arraylist


【解决方案1】:

不清楚如果检查失败应该输出什么,所以我猜0.0,但它可以调整。

如果我遵循OP的逻辑,该方法可以浓缩为一个循环,减少检查量。没有指定数组banding的具体对象类型,所以我随意使用Banding作为对象类型——这可能不完全正确。

注意:假设数组已正确排序。

Arrays.sort(banding);
setText(banding);

void setText(Banding[] banding) {
  final int loc = banding.length - 1;

  // if the highest is what we want, set and return
  if (banding[loc].getKekTotal().equals("CUKUP")) {
    untungtertinggi.setText(Double.toString(banding[loc].harga));
    return;
  }


  // we run until one before the start of the array, as we check for the 
  //   previous value; if we meet the criteria of [i] being LEBIH, and [i - 1]
  //   being CUKUP, then we set the value and return
  for (int i = loc; i > 0; --i) {
    if (banding[i].getKekTotal().equals("LEBIH") &&
         banding[i - 1].getKetTotal().equals("CUKUP")) {
      untungtertinggi.setText(Double.toString(banding[i - 1].harga));
      return;
    }
  }

  // no specific value found
  untuntertinggi.setText(Double.toString(0.0));
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-22
    相关资源
    最近更新 更多