2017-02-20 28 views
1

我想要做的是讀取文件並將數據存儲到數組中。它選擇的數組取決於文件中每行的數字量。我一直在爲索引超出界限。我做錯了什麼,而且我的代碼是否正確,我正在嘗試做什麼?讀取文件並將數據存儲到多個陣列時出錯

對於我正在閱讀的文件是這樣的。

>2.0 5.0 3.5 
> 
>5.2 0.5 4.8 
> 
>1.0 
> 
>2.5 

我想具有3個數字的行被存儲在盒數組內並具有1數的行要被存儲球陣列的內部。不過,我希望能夠以線中的任意金額存入數組不只是這些4.


這是到目前爲止我的代碼。

import java.io.*; 

public class MainProg{ 
    public static void main(String[] args) throws IOException{ 
     FileReader fr = new FileReader("info.txt"); 
     BufferedReader br = new BufferedReader(fr); 
     String nums; 
     int count =0; 
     int lineNo = 0; 


     while((nums = br.readLine()) != null){  
      String numbers[] = nums.split(" "); 
      double[][] ball = new double[lineNo][]; 
      if(numbers.length == 3){ 
       for(int i = 0; i < numbers.length; i++){ 
        double[][] box = new double[lineNo][i]; 
        box[lineNo][i] = Double.parseDouble(numbers[lineNo]); 

        lineNo++; 

        System.out.println(box[i] + " "); 
       } 
      }else{ 
       while(numbers.length == 1 && ((nums = br.readLine()) != null)){ 
        int p = 0; 
        ball[count][p] = Double.parseDouble(numbers[count]); 
        p++; 
        count++; 
       } 
      } 
     } 
    } 
} 

我應該這樣做的對象數組,但我想弄清楚如何做到這一點,首先。

+0

一個問題:'p'可以用一個硬編碼的'0'代替。是的,'p'偶爾會增加到'1',但是在超出範圍之前永遠不會讀取該值。 –

+0

此外,你的輸入文件是否真的包含這些'>'字符,或者他們是否嘗試使用塊引號格式? –

回答

1

你的代碼有幾個邏輯問題。

lineNoi的值爲零時,以下幾行代表什麼意思? (儘量想)

double[][] ball = new double[lineNo][]; 
double[][] box = new double[lineNo][i]; 

你爲什麼要增加可變lineNofor循環內部,而不是while循環?

for(int i = 0; i < numbers.length; i++){ 
    ... 
    lineNo++; 
    ... 
} 

爲什麼有while環路else塊內?

while(numbers.length == 1 && ((nums = br.readLine()) != null)){ 
    int p = 0; 
    ball[count][p] = Double.parseDouble(numbers[count]); 
    p++; 
    count++; 
} 

爲什麼你正在閱讀使用BufferedReader br這個while循環?這些沒有意義。

其他問題是,

  • 請問您輸入包含空行,你在輸入的例子提供?
  • 您想要將值存儲在球和框數組中,但您不知道輸入文件中有多少行?那麼如何在不知道大小的情況下創建一個數組?我寧願建議你使用ArrayList來完成你的任務。

例如,您可以執行如下操作。

BufferedReader br = new BufferedReader(new FileReader("info.txt")); 
ArrayList<Double> ball = new ArrayList<>(); 
ArrayList<Double[]> box = new ArrayList<>(); 

String nums; 
while((nums = br.readLine()) != null){  
    String numbers[] = nums.split(" "); 
    if(numbers.length == 3){ 
     Double[] box_row = new Double[numbers.length]; 
     for(int i = 0; i < numbers.length; i++){ 
      box_row[i] = Double.parseDouble(numbers[i]); 
     } 
     box.add(box_row); 
    }else if(numbers.length == 1){ 
     ball.add(Double.parseDouble(numbers[0])); 
    } 
} 

System.out.println("Box Array"); 
for(Double[] element: box){ 
    System.out.println(Arrays.toString(element)); 
} 
System.out.println("Ball Array"); 
System.out.println(ball.toString()); 

我假設您的輸入文件不包含空行,並且沒有>字符。以上代碼片段輸出以下內容。

Box Array 
[2.0, 5.0, 3.5] 
[5.2, 0.5, 4.8] 
Ball Array 
[1.0, 2.5] 
+0

在相關說明中,爲什麼'ball'特別是'box'被拋出並重復創建?他們確實看起來像他們打算存儲的東西。 –

+0

我相信,OP沒有正確理解他在做什麼! –

+0

謝謝,你的回覆真的很有幫助。 –

相關問題