3 回答

TA贡献1783条经验 获得超4个赞
如上所述,代码有两个问题:
一旦第一次出现任何条件(这就是它正在检查的所有条件 - 第一次出现) - 您将获得结果。
如果您的输入比您的任何一个字母数组都长(并且确实如此),您将获得一个
ArrayIndexOutOfBoundsException
.
在这种情况下,最好的办法是直接检查元音等价性,而不是依靠数组来存储它。
private static boolean hasHighVowel(String input) {
return input.contains("e") || input.contains("i");
}
private static boolean hasLowVowel(String input) {
return input.contains("a") || input.contains("o") || input.contains("u");
}
然后你可以在你的方法中检查它。还要注意不要立即从方法返回。
public static String vowelHarmony(String input) {
String result = "you screwed something up";
if (hasHighVowel(input)) {
result = "high";
}
if (hasLowVowel(input)) {
result = "deep";
}
if (hasHighVowel(input) && hasLowVowel(input)) {
result = "mixed";
}
return result;
}
错误处理情况——例如当用户在null此方法中输入或空字符串时——留给读者作为练习。

TA贡献1900条经验 获得超5个赞
您可以轻松做到:
enum Harmony {
Deep, High, Mixed, Nothing
}
public static Harmony vowelHarmony(String input) {
boolean canBeHigh = false, canBeDeep = false;
if (input.contains("a") || input.contains("o") || input.contains("u"))
canBeDeep = true;
if (input.contains("e") || input.contains("i"))
canBeHigh = true;
if (canBeDeep && canBeHigh)
return Harmony.Mixed;
if (canBeDeep)
return Harmony.Deep;
if (canBeHigh)
return Harmony.High;
return Harmony.Nothing;
}

TA贡献1862条经验 获得超6个赞
我做了一些 Jugaad 只是为了让生活更轻松。我知道这不是一个好的编码习惯
enum Harmony
{
High,Low,Mixed,Screwed
}
public static Harmony vowelHarmony(String input)
{
String[] high = {"e", "i"};
String[] deep = {"a", "o", "u"};
input=input.replaceAll("[ei]", "1");
input=input.replaceAll("[aou]", "0");
input=input.replaceAll("[^01]", "");
if(input.contains("1") && !input.contains("0"))
return Harmony.High;
else if(input.contains("1") && !input.contains("0"))
return Harmony.Low;
else if(input.contains("1") && !input.contains("0"))
return Harmony.Mixed;
else
return Harmony.Screwed;
}
添加回答
举报