我的方法
为了得到一个中间词,我首先找到了每个字符串的长度。并检查了多个获取词的条件,例如
如果这两个单词的长度相等,如果没有单词的长度相等,并且最后两个单词的长度相等,我会逐个字符地检查它们,并使用 compareTo 进行其余逻辑。

 public String middleWord(String word1,String word2,String word3)
   {
       boolean b1=false;
       boolean b2=false;
       boolean b3=false;

       int l1=word1.length();
       int l2=word2.length();
       int l3=word3.length();
       if((l1>=l2)&&(l1>l3))
       {
           int p1=word1.compareTo(word2);
           System.out.println(p1);

           if(p1<0)
           {
               b1=true;
           }
           else
           {
               b2=true;
           }
       }
       else if((l2>=l3)&&(l2>l1))
       {
           int p1=word2.compareTo(word3);
           System.out.println(p1);

           if(p1<0)
           {
               b2=true;
           }
           else
           {
               b3=true;
           }
       }
       else if((l3>=l1)&&(l3>l2))
       {
           int p1=word1.compareTo(word3);
           System.out.println(p1);

           if(p1<0)
           {
               b1=true;
           }
           else
           {
               b3=true;
           }
       }
       else if((l1>l2)&&(l1>l3))
       {
           if(l2>l3)
           {
               b2=true;
           }
           else if(l3>l2)
           {
               b3=true;
           }
           else
           {
               int p1=word2.compareTo(word3);
               System.out.println(p1);

               if(p1<0)
               {
                   b2=true;
               }
               else
               {
                   b3=true;
               }

           }
       }
       else if((l2>l3)&&(l2>l1))
       {
           if(l1>l3)
           {
               b1=true;
           }
           else if(l3>l1)
           {
               b3=true;
           }
           else
           {
               int p1=word1.compareTo(word3);
                System.out.println(p1);

               if(p1<0)
               {
                   b1=true;
               }
               else
               {
                   b3=true;
               }

           }


       }
       else if((l3>l1)&&(l3>l2))
       {
           if(l1>l2)
           {
               b1=true;
           }
           else if(l2>l1)
           {
               b2=true;
           }
           else
           {
               int p1=word1.compareTo(word2);
               System.out.println(p1);

               if(p1<0)
               {
                   b1=true;
               }
               else
               {
                   b2=true;
               }

           }
       }
       else if((l1==l2)&&(l1==l3))
       {
           int p1=word1.compareTo(word1);
           int p2=word1.compareTo(word2);
           int p3=word1.compareTo(word3);


               System.out.println(p1);
               System.out.println(p2);
               System.out.println(p3);

               if((p1<p2) &&(p1<p3))
               {
                   if(p2<p3)
                   {
                       b2=true;

                   }
                   else
                   {
                       b3=true;
                   }
               }
               else if((p2<p3) &&(p2<p1))
               {
                   if(p1<p3)
                   {
                       b1=true;

                   }
                   else
                   {
                       b3=true;
                   }
               }
               else if((p3<p2) &&(p3<p1))
               {
                   if(p2<p1)
                   {
                       b2=true;

                   }
                   else
                   {
                       b1=true;
                   }
               }
       }
       if(b1==true)
           return word1;
       else if(b2==true)
           return word2;
       else
           return word3;

   }
}

Parameters              Actual Output     Expected Output

'he' 'her' 'here'       he                her

最佳答案

对于 middleWord("he", "her", "here") 的具体情况,您将遇到第三个 else if 子句:

else if((l3>=l1)&&(l3>l2))
{
    int p1=word1.compareTo(word3);
    System.out.println(p1);

    if(p1<0)
    {
        b1=true;
    }
    else
    {
        b3=true;
    }
}

在这种情况下, l1 = 2, l2 = 3, l3 = 4p1 = a -ve number 因为字 1 的长度更小,这将 b1 设置为 true 。然后你返回 word1 因为:
if(b1==true)
    return word1;
else if(b2==true)
    return word2;
else
    return word3;

所以是的,你的逻辑是错误的。似乎您首先将字符串与长度进行比较,然后按字典顺序进行比较。在这种情况下,您可以覆盖 compareTo 函数并对它们进行排序。然后返回第二个元素,这是一个更干净的解决方案。

似乎您真的不需要比较长度,只想按字典顺序比较它们,并且不能使用 Collections 或 Arrays 排序方法。在这种情况下,您可以使用 Java String 的 compareTo 函数。
public static String middleWord1(String word1, String word2, String word3) {
    if (word1.compareTo(word2) == 0 || word1.compareTo(word3) == 0)
        // word1 == word2 or word1 == word3
        return word1;
    else if (word2.compareTo(word1) == 0 || word2.compareTo(word3) == 0)
        // word2 == word1 or word2 == word3
        return word2;
    else if (word3.compareTo(word1) == 0 || word3.compareTo(word2) == 0)
        // word3 == word1 or word3 == word2
        return word3;
    else if ((word2.compareTo(word1) < 0 && word1.compareTo(word3) < 0) ||
        (word3.compareTo(word1) < 0 && word1.compareTo(word2) < 0))
        // word2 < word1 < word3 or word3 < word1 < word2
        return word1;
    else if ((word1.compareTo(word2) < 0 && word2.compareTo(word3) < 0) ||
        (word3.compareTo(word2) < 0 && word2.compareTo(word1) < 0))
        // word1 < word2 < word3 or word3 < word2 < word1
        return word2;
    else
        // word1 < word3 < word2 or word2 < word3 < word1
        return word3;
}

关于java - 在字符串中查找中间词的输出没有按预期出现?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34185847/

10-13 03:43