>

고등학교 과학 수업에서 마크가있는 텍스트 파일을 읽고 그 마크가있는 배열을 만들어야합니다 (나중에 조작 할 수 있습니다). 프로그램에서 줄 수를 읽으려고 할 때 한 줄보다 적게 읽습니다. 그리고 배열을 출력 할 때 계산 한 줄 수에 쓰여진 "1.00"(정확하지 않은)으로 만 구성됩니다.

import java.awt.*;
import java.io.*;
import hsa.Console;
public class Assignment3Q3
{
    static Console c;
    public static void main (String[] args) throws IOException
    {
        c = new Console ();
        BufferedReader input = new BufferedReader (new FileReader ("marks.txt"));
        String mark = input.readLine ();
        int lines = 0;
        while (input.readLine () != null)
            lines++;
        input.close ();
        c.println (lines);
        double[] marks = new double [lines];
        int count = 0;
        BufferedReader input1 = new BufferedReader (new FileReader ("marks.txt"));

        while (input1.readLine () != null)
        {
            marks [count] = Double.parseDouble (mark);
            count += 1;
            if (count == lines)
            {
                break;
            }
        }
        for (int x = 0 ; x < lines ; x++)
        {
            c.println (marks [x]);
        }
    }
}


  • 답변 # 1

    두 번째 while 루프에서 파싱 된 mark 버전을 항상 할당합니다   marks 에 변수  배열 요소. 그러나 당신은 단지 mark 를 설정했습니다  파일의 첫 번째 줄인 코드에서 한 번만 변수를 지정하십시오.

    어쨌든 파일을 두 번 읽지 않고 (한 번 줄 수를 얻은 다음 실제 줄 내용을 저장하기 위해) List 를 사용하여 단일 읽기 주기로이를 수행 할 수 있습니다.  배열 대신.

    try (BufferedReader input = new BufferedReader (new FileReader("src/marks.txt"))) {
        List<Double> marks = new ArrayList<>();
        String line;
        while ((line = input.readLine()) != null) {
            marks.add(Double.parseDouble(line));
        }
        System.out.println(marks);
    } catch (IOException e) {
        e.printStackTrace();
    }
    
    

    이 마크를 실제로 배열로 가져 오려면 다음과 같이 위의 목록을 배열로 전환 할 수 있습니다.

    Double[] marksArray = marks.toArray(new Double[marks.size()]);
    
    

    위의 코드 스 니펫에서 한 것처럼 BufferedReader 와 같은 AutoCloseable 리소스를 만들 때 리소스 접근 방법을 사용하는 것이 좋습니다.  또는 FileReader . 그러면 코드에서 명시 적으로 닫을 필요가 없습니다.

  • 답변 # 2

    이 분리가 두 단계로 진행되는 이유는 무엇입니까? 오류가 발생하기 쉽습니다. marks 에 값이 없습니다 현재 줄 count 위에 배열  액세스됩니다. 따라서 복식을 역동적으로 성장하는 ArrayList<Double> 에 저장하십시오.  대신 한 단계로 작업을 수행하십시오.

관련 자료

  • 이전 Jupyter Notebook/Lab에서 간단한 위젯 또는 앱을 작성하여 텍스트에서 하위 문자열을 대화 형으로 추출하는 방법은 무엇입니까?
  • 다음 rust - Vec 참조를 Vec 값으로 변환하는 관용적 방법은 무엇입니까?