用于在字符串中查找中间字的输出不符合预期?

时间:2015-12-09 18:02:03

标签: java string

MyApproach

为了得到一个中间词,我首先找到了每个String的长度。并检查了多个获取单词的条件,如

如果2个单词的长度相等,如果没有单词具有相同的长度,并且最后2个单词具有相同的长度,我逐个字符地检查它们并使用compareTo作为其余逻辑。

  

但我无法满足一个测试用例。

     

Qn任何人都可以在我的代码中指导我做错了什么。

 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

1 个答案:

答案 0 :(得分:1)

对于你的midWord特定情况(“他”,“她”,“这里”),你正在击中第三个if 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;
}