2017-02-20 2 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의 값이 0 일 때 다음 줄은 무엇을 의미합니까? 왜 while 루프 대신 for 루프 내부의 변수 lineNo을 증가

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

(생각하려고)?

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

이유 else 블록 내부 루프 while 있는가?

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

관련 메모에서 왜 '볼'이고 특히 '상자'가 던져지고 계속 반복 재생되는 이유는 무엇입니까?그들은 뭔가를 저장하려고했던 것처럼 보입니다. –

+0

나는 OP가 자신이하는 일을 정확하게 이해하지 못한다고 생각합니다! –

+0

고맙습니다. 회신이 도움이됩니다. –

관련 문제