我的方法
为了得到一个中间词,我首先找到了每个字符串的长度。并检查了多个获取词的条件,例如
如果这两个单词的长度相等,如果没有单词的长度相等,并且最后两个单词的长度相等,我会逐个字符地检查它们,并使用 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 = 4
, p1 = 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/