为什么在每次循环代码后我的计数器都不会上升?

时间:2014-10-05 23:37:55

标签: java

此程序应检查您为元音输入的字符串,然后输出元音量。但是,当我运行程序时,计数器显示0. Eclipse没有显示错误。

我希望如果我输入hello,那么它会显示2,但它始终会显示0

import javax.swing.*;
public class Lab5 {
  public static boolean isVowel(char x) {
    if (x == 'A' || x == 'E' || x == 'I' || x == 'O' || x == 'U') {
        return true;
    }
    else {
        return false;
    }
  }
  public static void main(String[] args) {
    String seq;
    boolean vowel;
    int counter = 0;
    seq = JOptionPane.showInputDialog(null, "Please enter a sequence of characters: ");
    seq.toUpperCase();
    for (int i=0; i<seq.length(); i++) {
        vowel = isVowel(seq.charAt(i));
        if (vowel == true) {
            counter++;
        }   
    }
    JOptionPane.showMessageDialog(null, "The number of vowels in your sequence of characters is : " + counter);
  }
}

2 个答案:

答案 0 :(得分:5)

这是因为seq.toUpperCase()没有按照您的想法行事。它返回String的副本,转换为大写,但它不会改变原始版本。 (String在Java中是不可变的,因此它无法改变它。)

尝试将该行更改为

seq = seq.toUpperCase();

答案 1 :(得分:3)

字符串在Java中是不可变的,因此您无法在适当的位置修改它们。当您在字符串上调用toUpperCase()时,它将返回该字符串的副本,其中所有字符都更改为大写等效字符,但原始字符串保持不变。

这意味着您必须再次将toUpperCase的调用结果分配给您的变量。所以,而不是

seq.toUpperCase();

待办事项

seq = seq.toUpperCase();