public static String vowelHarmony(String input) {
String[] high = {"e", "i"};
String[] deep = {"a", "o", "u"};
for (int i = 0; i < input.length(); i++) {
if (input.contains(high[i])&&!input.contains(deep[i])){
return "high";
}
else if (input.contains(deep[i])&&!input.contains(high[i])){
return "deep";
}
else if (input.contains(deep[i])&&input.contains(high[i])){
return "mixed";
}
}
return "you screwed something up";
}
我知道,我不知道英语中的元音和声,但是为了举例,我们假设它确实存在。 high
元音是'e'和'i'。 deep
元音是'a','o'和'u'。所有单词都属于high
,deep
或mixed
组。
例如:
high
个元音,则它是一个high
单词(地狱,丘陵,磨坊,杀人等)deep
个元音,则它是一个deep
个单词(剑、,、凳,凉等)mixed
单词(m子,山峦,房屋,房屋等)唯一的是,我的代码无法正常运行。如果单词是mixed
,则永远不会显示。如果一个单词甚至有一个高字母,它将显示为high
。我需要做什么来修复它?我的代码有什么问题?
答案 0 :(得分:3)
上述代码存在两个问题:
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
或空字符串的情况)留给读者练习。
答案 1 :(得分:0)
您可以轻松做到:
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;
}
答案 2 :(得分:0)
嗨,我做了一些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;
}