创建一种确定单词的元音和声的方法

时间:2018-10-03 21:39:39

标签: java string

    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'。所有单词都属于highdeepmixed组。

例如:

  • 如果一个单词只有high个元音,则它是一个high单词(地狱,丘陵,磨坊,杀人等)
  • 如果一个单词只有deep个元音,则它是一个deep个单词(剑、,、凳,凉等)
  • 如果两个单词都有两个元音,则它是一个mixed单词(m子,山峦,房屋,房屋等)

唯一的是,我的代码无法正常运行。如果单词是mixed,则永远不会显示。如果一个单词甚至有一个高字母,它将显示为high。我需要做什么来修复它?我的代码有什么问题?

3 个答案:

答案 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;
     }