2014-11-17 32 views
-1

這裏是我與我在代碼中出現溢出錯誤,但我似乎無法修復它,有什麼建議嗎?

import java.io.*; 

import java.util.Scanner; 

class Main{ 

    public static void main (String str[]) throws IOException { 
    Scanner scan = new Scanner (System.in); 

    int c = 0; 
    int d = 0; 

    System.out.println("please enter the first string"); 

    String q = scan.nextLine(); 
    int b = q.length(); 
    int asterisk = q.indexOf('*'); 

    while(c < b-1) 
    { 
     c++; 
     if (q.charAt(c) == '*') 
     { 
     d++; 
     break; 
     } 
    } 

    if(d<1) 
    { 
     System.out.println("Error: no *"); 
    } 
    else 
    { 
     System.out.println("Enter the replacement string"); 
    } 
    String rep = scan.nextLine(); 

    System.out.println(q.substring(0,q.indexOf('*')) + rep + q.substring(asterisk+1,b)); 

    } 

} 

工作代碼和我收到

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: 

    String index out of range: 22 

    at java.lang.String.charAt(String.java:658) 

    at Main.main(Main.java:282) 

    at Ideone.assertRegex(Main.java:125) 
    at Ideone.test(Main.java:45) 
    at Ideone.main(Main.java:28) 

我想這已經是與我使用的charAt的錯誤,儘管我如何解決此問題 我對編碼頗爲陌生,所以有可能會有一些簡單的解決方法,我可以忽略 如果有人可以幫忙的話,將不勝感激

+1

我喜歡堆棧跟蹤怎麼說的錯誤是在管線282,但你的代碼甚至無法靠近那麼久。 – Charlie

+1

你的格式也很糟糕。你能修好縮進和大括號嗎? – markspace

回答

0

問題m是你在調用charAt之前遞增c,在最後一個char中有效超出範圍。調用charAt之後,您必須增加c。您還必須與b而不是b-1進行比較,因此您不會錯過最後一個字符。

所以更換此

while(c < b-1) { 
    c++; 
    if (q.charAt(c) == '*') { 
     d++; 
     break; 
    } 
} 

與此:

while(c < b) { 
    if (q.charAt(c) == '*') { 
     d++; 
     break; 
    } 
    c++; 
} 
+0

發佈該補丁後,我得到一個不同的outofboundsexception錯誤:在線程「主要」 java.lang.StringIndexOutOfBoundsException 例外:字符串索引超出範圍:-1 \t在java.lang.String.substring(字符串。的java:1911) \t在Main.main(Main.java:293) \t在Ideone.assertRegex(Main.java:125) \t在Ideone.test(Main.java:51) \t在Ideone.main( Main.java:28) – Neutrino

相關問題