【问题标题】:If statement condition not passing but should be!? (java)如果语句条件没有通过但应该是!? (爪哇)
【发布时间】:2017-04-19 15:56:37
【问题描述】:
if (value.compareTo(elementData[size]) >= 0) {
    elementData[size + 1] = value;
    size++;
} else if (value.compareTo(elementData[0]) <= 0) {
    for (int i = size; i >= 0; i--) {
        elementData[i + 1]= elementData[i];
    }

    elementData[0] = value;
    size++;
}

第一个 if 语句应该从 compareTo 返回一个正数。我已经调试并确认它确实返回了一个正数但是它没有进入块。

我正在比较类似“str1”“str2”......等的字符串。它工作正常,直到我到达“str10”并且必须将它与“str9”进行比较。它是说“str10”小于“str9”这有什么意义吗?

每 10 次迭代发生一次。所以我的数组看起来像 [str0, str1, str10...str19,str2, str20, str21, ... str29..etc]

【问题讨论】:

  • 如果value.compareTo(elementData[size])返回一个大于0的值,那么它进入区块。如果不入块,则该值小于0。valueelementData的类型是什么?
  • 你不知道1在9之前吗?
  • 值和元素数据都是可比较的对象。

标签: java if-statement compareto


【解决方案1】:

考虑在使用compareTo(String anotherString) 时如何比较string 的值。

按字典顺序比较两个字符串。比较是基于 字符串中每个字符的 Unicode 值。字符序列 由此 String 对象表示的按字典顺序与 由参数字符串表示的字符序列。结果是一个 如果此 String 对象按字典顺序位于 参数字符串。如果此字符串,则结果为正整数 对象按字典顺序跟随参数字符串。结果是 如果字符串相等,则为零; compareTo 返回 0 时正好 equals(Object) 方法将返回 true。

如您所见,当 "str10""str9" 比较时,"str10"'1' 的 Unicode 值小于 "str9"'9' 的 Unicode 值,这就是您的原因得到结果"str10" 大于"str9"

您可以研究 The Alphanum Algorithm 作为替代方案。

【讨论】:

  • 我不知道^^。
【解决方案2】:

您似乎在比较每个 String 的字典形式,这意味着 str10 将放在 str9 之前。您需要实现一个使用 Alphanum 算法的自定义比较器,如 here 所示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2015-06-26
    • 1970-01-01
    • 1970-01-01
    • 2017-03-08
    • 1970-01-01
    • 2012-06-19
    相关资源
    最近更新 更多