2017-06-02 117 views
0

下面是我正在努力工作的一些代碼。Java StringOutOfBounds僅在循環中出現錯誤

public class Main 
{ 
    public static void main(String[] args) 
    { 
     try 
     { 
      BufferedReader reader = new BufferedReader(new FileReader(args[0])); 
      String line = reader.readLine(); // start with the first line 
      String[] a = new String[3]; 

     a = line.split(" "); 
     int n = a[0].charAt(0) - '0'; 
     int m = a[1].charAt(0) - '0'; 
     int k = a[2].charAt(0) - '0'; 

     DisjointUnionSets dus = new DisjointUnionSets(n); 
     line = reader.readLine(); 
     while(line != null) 
     { 
      String[] b = new String[2]; 
      b = line.split(" "); 
      int tmp1 = b[0].charAt(0) - '0'; 
      int tmp2 = b[1].charAt(0) - '0'; 
      dus.union(tmp1,tmp2); 
      line = reader.readLine(); 
     } 
     reader.close(); 

     // Check if 4 is a neighbour of 1 
     if (dus.find(4) == dus.find(1)) 
      System.out.println("Yes"); 
     else 
      System.out.println("No"); 

     // Check if 1 is a neighbour of 2 
     if (dus.find(1) == dus.find(2)) 
      System.out.println("Yes"); 
     else 
      System.out.println("No"); 
    } 
catch(IOException ex){} 
} 
} 

它編譯沒有任何錯誤,但是當我嘗試運行它,我定義TMP1時得到一個異常:

java.lang.StringIndexOutOfBoundsException:字符串索引超出範圍:0

我真的不明白爲什麼當我定義n,m和k時不會發生這種情況。我使用b的方式與使用a相同,至少這就是我的想法。

在此先感謝!

+0

給你輸入以及 –

+0

告訴您試圖運行代碼的命令? –

+0

我的輸入是第一行中的3個數字,然後是兩個數字的行。數字由一個空格分隔。 @Nixal Saxena不確定你的意思,但我只是從終端運行Java main input.txt,如果這是你的問題。 – cgss

回答

0

除了null檢查,還檢查line是否只包含空格。如果確實如此,那麼陣列b的長度將爲0

+0

我會檢查,但我認爲這個問題不存在(沒有這樣的線)。不管怎麼說,還是要謝謝你! – cgss

+0

好的。你也可以嘗試在'while'循環中設置一個調試點來找出數組'b'的值。 –

0

隨着line.split(" ")你會得到空字符串在結果數組,如果在line的文字,被不止一個空格隔開。嘗試

b = line.split("\\s+"); 

改爲。它匹配一個或多個(+)空格(\s)字符。

您在一個實例中遇到問題而不是另一個問題的原因是輸入中的線到線差異。在使用單個空間的行上,當您使用多個空間的行時,kaboom!看完最後一行之後

while(line != null && !(line.matches("\\s*"))) 

現在它工作正常,我以爲是碰到的問題:

+0

我會給它一個鏡頭,但正如我在上面關於我的輸入的註釋中指定的那樣,它不包含多於一個空格。 – cgss

+0

@cgss如果你的輸入的確如你所說,這不會幫助你的眼前的情況,但它是一個方便的技巧知道未來。 –

0

結合從凱文·安德森和阿尼什坎我兩個答案想出了這一點。我認爲不是按照預期創建一個空字符串,而是創建一個空字符串。所以我不確定我是解決問題還是隱藏它。這就是爲什麼我還沒有接受任何答案(我雖然upvoted他們雖然)