2012-07-29 329 views
0

所以我想賴特程序來打印一個單詞,所有的元音換成$。在java中是 。線程主異常java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:6

我一直得到這個錯誤exception in thread main java.lang.StringIndexOutOfBoundsException: String index out of range: 6當我運行它,它編譯罰款。 這是代碼。

import java.util.*; 

public class SummerFour 
{ 
    public static void main(String[] args) 
    { 
     Scanner keyboard = new Scanner(System.in); 

     int cnt = 0; 
     String word; 
     String output = ""; 
     char letter = 'x'; 
     System.out.print("enter word to test: "); 
     word = keyboard.nextLine(); 

     do { 

      cnt++; 
      letter = word.charAt(cnt - 1); 

      if (letter == 'a' || letter == 'i' || letter == 'e' || letter == 'u' || letter == 'o') 
      { 
       letter = '$'; 
      } 
     } 
     while (cnt <= word.length()); 

     System.out.println(word); 
    } 
} 

回答

1

您的do ... while循環有一個錯誤的錯誤。您檢查cnt是否小於或等於字符串的大小,然後將其加1並將該值 - 1用作String.charAt()的索引。這是有問題的,因爲字符串從0開始索引,所以在字符串的末尾,你總是會走得太遠。

想想這個例子:

tacos

這是一個五字母的單詞。當cnt = 5時,您將再次返回循環(因爲5小於或等於5)並將cnt增加到6.然後您調用String.charAt(),值爲5(6 -1),但範圍爲tacos僅爲0-4(0 = t,1 = a,2 = c,3 = 0,4 = s),因此5超出範圍。你可以讓你做... while循環的正常工作,並通過做這樣的事情看起來不那麼混亂:

do 
    { 
     letter = word.charAt(cnt); 

     if (letter=='a'||letter=='i'||letter=='e'||letter=='u'||letter=='o') 
     { 
      letter='$'; 
     } 
     cnt++; 
    } while(cnt<word.length()); 

當然,代碼還沒有做你希望它是什麼,但你不再獲得原來的錯誤。既然這看起來可能是作業,我會讓你繼續努力。

+1

謝謝是的,它是一個夏季項目,是一個項目中五個項目中的一個,但這就是我所需要的,只是一個我從未見過的錯誤,它編譯成一個初學者,我不知道該怎麼做。所以謝謝你抽出時間幫忙。 – user1560400 2012-07-29 18:58:47

相關問題