2014-10-06 75 views
1

即使当我走到我的字符串的末尾,我的代码也不会退出我的外部for循环,我无法弄清楚原因。根据我的理解,我的外循环应该在第四次迭代之后停止。相反,它继续,然后错误在字符串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并使它只是我< s.trim实验()长(),以及将其更改为我<秒。。 trim()。length()-2,i < s.trim()。length()-3,i < s.trim()。length()-4等,一直到-10。

+2

为什么使用for循环而不是'input.hasNext()'? – azurefrog 2014-10-06 19:01:37

+0

@azurefrog我恳求暂时的疯狂。 – comfortablyNumb 2014-10-06 19:03:51

回答

3

Scanner.next()读取由字输入字符串字的内容(即“我”,“认为”,“因此”,“我”,“我”),但你用字母计数外环信(相对于输入字符串)。因此,在第五次迭代之后,当输入字符串耗尽时,next()调用会引发异常。

+0

是的,你是对的。现在你指出它显然是明显的。不知道我在想什么。我可能需要离开并休息一下。感谢您的帮助。只要计时器让我,我会标记为已解决。 – comfortablyNumb 2014-10-06 19:05:10

+0

当然:)请考虑@azurefrog建议的内容! – 2014-10-06 19:08:18

+0

是的,已经实施了。谢谢。 :) – comfortablyNumb 2014-10-06 19:09:09