2016-09-22 64 views
1

我正在嘗試從文本中讀取adjMatrix圖形,它只讀取第一行,但是我遇到了這個錯誤。有什麼建議嗎?我怎樣才能從inp文本中讀取adjMatrix圖形

java.lang.NumberFormatException: For input string: "0 1 1 1" 
    at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) 
    at java.lang.Integer.parseInt(Integer.java:580) 
    at java.lang.Integer.parseInt(Integer.java:615) 

public static void main(String[] args)throws IOException { 
     int row_num = 0; 
     //InputGraph gr = new InputGraph("input.txt"); 
    // Cells w= gr.copyMatrix(); 
    // w.printAdjMatrix(); 


     try { 

      String fileName = ("input.txt"); 
      File file = new File(fileName); 

      BufferedReader br = new BufferedReader(new FileReader(file)); 

      //get number of vertices from first line 

      String line = br.readLine(); 
      System.out.println("hi"); 

      //InputGraph.size = Integer.parseInt(line.trim()); 
      InputGraph.size=Integer.parseInt(line); 
      InputGraph.adMatrix = new int[InputGraph.size][InputGraph.size]; 
      br.readLine(); 

      for (int i = 0; i < InputGraph.size; i++) { 

       line = br.readLine(); 
       String[] strArry = line.split(" "); 
       for (int j = 0; j < InputGraph.size; j++) { 
        InputGraph.adMatrix[i][j] = Integer.parseInt(strArry[j]); 
        if (Integer.parseInt(strArry[j]) == 1) 
         row_num++; 

       } 
      } 


     } catch (Exception e4) { 
      e4.printStackTrace(); 
     } 

輸入文本文件

0 1 1 1 
0 0 0 0 
1 1 0 1 
0 1 0 0 

回答

0

0 1 1 1:這是一條線。你試圖用Integer來解析它,但是這行並不是完全的整數,因爲它包含的空格也是字符。

爲了得到大小,你可以做這樣的事情:

String line = br.readLine(); 
    InputGraph.size = (line.size()+1)/2; 

因爲如果行有X整數它將有X-1的空間(考慮到只有一個空間B/W兩個整數)所以,2x -1 =行的大小。

+0

非常感謝你的回覆,但我寫它與同樣的錯誤 –

+0

您可以發佈更新後的代碼,請與給還更新錯誤?因爲我猜這個錯誤至少已經改變了。 –

0

您沒有一行指定輸入文件中圖形中的頂點數。這就是爲什麼

InputGraph.size=Integer.parseInt(line); 

不起作用。 line這裏包含"0 1 1 1",它不止一個整數。
您需要從第一行的整數中找到大小。此外,我也建議關閉輸入文件讀取它,使用最好的嘗試,與資源後:

try (FileReader fr = new FileReader(fileName); 
       BufferedReader br = new BufferedReader(fr)) { 
    String line = br.readLine(); 

    String[] elements = line.trim().split(" +"); 
    InputGraph.size=elements.length; 
    InputGraph.adMatrix = new int[InputGraph.size][InputGraph.size]; 

    for (int i = 0; i < InputGraph.size; i++, line = br.readLine()) { 
     String[] strArry = line.trim().split(" +"); 
     for (int j = 0; j < InputGraph.size; j++) { 
      InputGraph.adMatrix[i][j] = Integer.parseInt(strArry[j]); 
      if (InputGraph.adMatrix[i][j] == 1) 
       row_num++; 

     } 
    } 
} catch (Exception e4) { 
    e4.printStackTrace(); 
} 
+0

非常感謝您的建議,但仍然InputGraph.adMatrix [i] [j] = Integer.parseInt(strArry [j]); java.lang.NumberFormatException:對於輸入字符串:「」 \t at java.lang.NumberFormatException.forInputString(NumberFormatException.java:65) –

+0

然後似乎有a)以空格開始的行或b)int與多個空格或c)輸入文件中的空行......編輯答案 – fabian