代码不退出外部for循环

时间:2014-10-06 18:53:09

标签: java for-loop

我的代码没有退出我的外部for循环,即使我来到我的字符串的末尾,我无法弄清楚为什么。根据我的理解,我的外循环应在第四次迭代后停止。相反,它会继续,然后在String inputString = input.next();因为那里什么都没有这是我的代码:

public class Exercise17 {
    public static void main(String[] args) {
        String string = "i think, therefore i am";
        vowelCount(string);     
    }
    public static void vowelCount(String s) {
        Scanner input = new Scanner(s);     
        int[] vowelArray = new int[5];
        int aCount = 0, eCount = 0, iCount = 0, oCount = 0, uCount = 0;
        for(int i = 0; i < s.trim().length() - 1; i++) {
            String inputString = input.next();
            System.out.println(inputString);
            for(int j = 0; j < inputString.length(); j++) {
                char c = inputString.charAt(j);
                System.out.println(c);
                if(c == 'a') {
                    aCount++;                   
                }else if (c == 'e') {
                    eCount++;                   
                }else if (c == 'i') {
                    iCount++;                   
                }else if (c == 'o') {
                    oCount++;                   
                }else if (c == 'u') {
                    uCount++;                   
                }               
            }               
        }
        vowelArray[0] = aCount;
        vowelArray[1] = eCount;
        vowelArray[2] = iCount;
        vowelArray[3] = oCount;
        vowelArray[4] = uCount;
        input.close();
        System.out.println(Arrays.toString(vowelArray));    
    }
}

作为一项实验,我试图摆脱-1并让它只是我&lt; s.trim()。length()以及将其更改为i&lt; s.trim()。length()-2,i&lt; s.trim()。length()-3,i&lt; s.trim()。length()-4等,一直到-10。

1 个答案:

答案 0 :(得分:3)

Scanner.next()逐字地读取输入字符串的内容(即&#34;我&#34;,&#34;想&#34;,&#34;因此&# 34;,&#34;我&#34;,&#34; am&#34;)但是您正在计算外部循环逐个字母(相对于输入字符串)。所以next()调用在输入字符串耗尽后,在第五次迭代后抛出异常。