【问题标题】:Counting vowels in a string and wrong output?计算字符串中的元音和错误的输出?
【发布时间】:2017-05-19 12:14:58
【问题描述】:

我对java很陌生,我想知道你是否可以帮助我。这是我的代码:

public static void main(String[] args) {

    int vowels = 0;

    Scanner input = new Scanner(System.in);

    System.out.println ("Enter a string: ");
        String string = input.nextLine();

    int length = string.length();

for (int i = 0; i <= length; i++) {

    String letter = string.substring(i, ++i);

    if (letter.equalsIgnoreCase("a")){vowels++;}    
    if (letter.equalsIgnoreCase("e")){vowels++;}
    if (letter.equalsIgnoreCase("i")){vowels++;}
    if (letter.equalsIgnoreCase("o")){vowels++;}
    if (letter.equalsIgnoreCase("u")){vowels++;}

}
    System.out.println ("The number of vowels in " + string + " is: " + vowels);
}

号码是关闭的,但我不知道为什么。

【问题讨论】:

  • 格式化代码并提出问题
  • 减多少?总是错误的吗?向我们展示一些示例输入和相应的输出。作为一般建议,我会尝试在for 循环中添加更多System.out.println() 语句。例如,也许在String letter... 行之后,您可以输出它正在考虑的字母,并且在所有if 语句之后,您可以输出到目前为止它计算了多少个元音。这可能会引导您找到问题的根源。
  • 当问题陈述很简单时,很难提供解决方案,“它不起作用”。请edit您的问题更完整地描述您预期会发生什么以及这与实际结果有何不同。请参阅 How to Ask 以获取有关什么是好的解释的提示。

标签: java string for-loop


【解决方案1】:

这里是错误的

string.substring(i, ++i)

因为变量 i 已经在 for 循环中递增了

所以你基本上是在跳过字符串中的字符


实现正确的逻辑,使用正确的数据类型

    int length = string.length();

    for (int i = 0; i < length; i++) {
        char letter = string.charAt(i);
        System.out.println(letter);
        if (letter == 'a') {
            vowels++;
        } else if (letter == 'e') {
            vowels++;
        } else if (letter == 'i') {
            vowels++;
        } else if (letter == 'o') {
            vowels++;
        } else if (letter == 'u') {
            vowels++;
        }

    }

【讨论】:

  • 我这样做了,但元音字母为零。
  • 这取决于元音的位置,您的逻辑是让代码迭代索引 2n+1 处的元素
  • 那我该怎么改呢?
【解决方案2】:

这是您可以尝试的另一种解决方案:

split 方法会将字符串拆分成一个字符串数组。然后在你的 for 循环中,它会检查你数组中的每一项。

public static void main(String[] args) {

    int vowels = 0;

    Scanner input = new Scanner(System.in);

    System.out.println ("Enter a string: ");
        String string = input.nextLine();

    int length = string.length();

    String[] stringArray = string.split("");

for (int i = 0; i < length; i++) {   //I took out the = sign in your for loop arguments.

    if (stringArray[i].equalsIgnoreCase("a")){vowels++;}    
    if (stringArray[i].equalsIgnoreCase("e")){vowels++;}
    if (stringArray[i].equalsIgnoreCase("i")){vowels++;}
    if (stringArray[i].equalsIgnoreCase("o")){vowels++;}
    if (stringArray[i].equalsIgnoreCase("u")){vowels++;}

}
    System.out.println ("The number of vowels in " + string + " is: " + vowels);
}

【讨论】:

    猜你喜欢
    • 2014-03-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 2018-04-30
    • 2020-02-19
    • 2011-09-05
    • 2022-08-13
    • 2013-11-26
    相关资源
    最近更新 更多