【问题标题】:Java, sort strings alphabetically without arraysJava,按字母顺序对字符串进行排序,没有数组
【发布时间】:2011-10-11 03:59:31
【问题描述】:

所以我有另一个任务要做,任务是使用 compareTo 方法按字母顺序排列 3 个字符串。基本上,该程序从测试类接收 3 个字符串(a、b 和 c),并返回“getMin”、“getMiddle”和“getMax”。

我想出了 getmin 和 max,看起来很简单,但我在 getMiddle 上遇到了问题。 这就是我的最小值和最大值:

        String min = "";
    if (a.compareTo(b) <= 0 && a.compareTo(c) <= 0) min = a;
    else if (b.compareTo(a) <= 0 && b.compareTo(c) <= 0) min = b;
    else if (c.compareTo(b) <= 0 && c.compareTo(a) <= 0) min = c;
    return min;

和 get max 类似,只是略有不同。我该如何创建 getMiddle。我们也不允许使用数组,因为我们“还没有学会”它们。教授说get middle的代码应该在5-6行左右。

谢谢

【问题讨论】:

  • 为什么要标记为“面试问题”?

标签: java sorting collections


【解决方案1】:

将 compareTo 方法的返回值相乘。 如果该值为中间值,则 compareTo 方法的结果具有不同的符号。 做乘法结果为零或有负号。

String getMiddle(String a,String b,String c)
{
    String middle = "";
    if (a.compareTo(b)*a.compareTo(c) <= 0) middle = a;
    else if (b.compareTo(a)*b.compareTo(c) <= 0) middle = b;
    else if (c.compareTo(b)*c.compareTo(a) <= 0) middle = c;
    return middle;
}

【讨论】:

  • 啊,非常感谢,这实际上很精彩,我没想到那么远:)
【解决方案2】:
 String middle = "";
    if (a.compareTo(b) <= 0 && a.compareTo(c) >= 0) middle = a;
    else if (b.compareTo(a) <= 0 && b.compareTo(c) >= 0) middle = b;
    else if (c.compareTo(b) <= 0 && c.compareTo(a) >= 0) middle = c;
    return middle;

【讨论】:

  • 是的,但它不是那么简单,我试过了,除非if (a.compareTo(c) &lt;= 0 &amp;&amp; a.compareTo(b) &gt;= 0) middle = a; 那也是一种可能性,其他两个变量也是如此:(
【解决方案3】:

按照你的方式做,它看起来像这样:

if      (a.compareTo(b) > 0 && a.compareTo(c) <= 0) middle = a;
else if (a.compareTo(c) > 0 && a.compareTo(b) <= 0) middle = a;
else if (b.compareTo(a) > 0 && b.compareTo(c) <= 0) middle = b;
else if (b.compareTo(c) > 0 && b.compareTo(a) <= 0) middle = b;
else middle = c;
return middle

嗯,这就是它背后的一般要点。您可以将其中一些组合在一起以减少行数,但我会留给您。

【讨论】:

  • 是的,我知道,这就是我开始做的,但它最终超出了推荐的代码行。我认为 ivorycirrus 的做法是正确的。
【解决方案4】:

为什么这么复杂?只需使用 TreeSet,它在内部使用 compareTo() :)。

【讨论】:

  • 是的,但我们还没有学会它,所以我们还不能真正使用它
【解决方案5】:

这给出了中间..还没有彻底测试它..而且,至于线数预测,我不确定我是否很好地满足它......无论如何......

    String mid = "";
    if (a.compareTo(b) <= 0) {
        if (b.compareTo(c) <= 0) mid = b;
        else mid = c;}
    else if(a.compareTo(c) <= 0) mid = a;
    else mid = c; 
    return mid;

【讨论】:

    【解决方案6】:

    我将使用 TreeSet 只是因为它在添加数据后对数据进行排序。

    【讨论】:

    • 是的,但我们还没有学会它,所以我们还不能真正使用它
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    • 2014-11-13
    • 2021-12-19
    相关资源
    最近更新 更多