2017-01-05 1 views
-1

저는 몇 달 동안의 경험이있는 비교적 새로운 자바 프로그래머입니다. 그래서 나는 실수를 저 지르지 않습니다.Java 스캐너 NextInt가 텍스트 파일의 모든 정수를 출력하지 않습니다.

저는 현재 대화 형 GUI를 사용하여 Dijkstra 기반 패스 파인더를 만드는 대학 프로젝트에 참여하고 있습니다. 이 부분에 대한 연구를 시작하기 위해 먼저 값을 직접 입력해야하는 것과 달리 그래프 자체의 무 방향성 가중치를 나타내는 미리 정의 된 인접성 행렬을 읽을 수 있기를 원했습니다.

이 때문에 필자는 문제의 텍스트 파일에서 빠르게 읽을 수 있도록 스캐너와 구분 패턴을 사용하기로 결정했습니다. 내 주요 목표는 텍스트 파일 내의 각 값을 꺼내서 2D 정수 배열에 추가하여 데이터를 효율적으로 사용할 수있게하는 것입니다.

내 주된 문제는 스캐너 자체가 텍스트 파일 내의 처음 3 개의 정수만 읽은 다음 읽기를 중지하고 프로그램이 종료된다는 것입니다. 내 구분 기호에 대해 잘 작동하는 것으로 보이는 공백 문자 ("")를 사용하고 있지만 문제의 원인이되는 줄 끝과 관련이 있다고 가정합니다.

public static void readMatrixFromFile() throws IOException { 

    File file = new File("Matrix.txt"); //Instance of File with parameter of filename in default location. 
    Scanner myScan = new Scanner(file); 
    myScan.useDelimiter(" "); 

    while(myScan.hasNextInt()){ //Checks whether or not there is a next token within the Text file. 
     System.out.println(myScan.nextInt()); //Prints out next item within text file, with respect to Delimiter being ignored. 
    } 

    myScan.close(); //Safely closes Scanner. 
} 

많은 감사,

  • 마이클
+4

외부 링크를 제공하지 말고 질문에 코드를 넣으십시오. – user2004685

+7

당신이 제공 한 전부가 화면 덤프라면 어떻게 테스트 할 것입니까? 실제 코드와 데이터를 질문에 복사/붙여 넣으십시오. 실제 코드 및 텍스트로서 이미지가 아닌 우리는 당신의 일을 재 입력 할 인내심이 없습니다. –

+1

'useDelimeter' 라인을 제거하십시오 – Michael

답변

0

내가 지금 당신의 2 차원 배열이 첫 번째 줄에 얼마나 많은 숫자를 기반으로 같은 것을 할 것입니다. 한 번에 하나의 숫자 만 읽으면 코드에서 매직 넘버를 사용하지 않아도됩니다. 이 방법은 단순히 첫 번째 행에있는 숫자의 수에 의존합니다.

public static void readMatrixFromFile() throws IOException { 

    File file = new File("Matrix.txt"); //Instance of File with parameter of filename in default location. 
    Scanner myScan = new Scanner(file); 
    Double[][] matrix = null; 
    int rowNumber = 0; 

    while(myScan.hasNextLine()){ //Checks whether or not there is a next token within the Text file. 
     String[] rowOfNumbers = myScan.nextLine().split(" "); 
     if(matrix == null) 
     { 
      matrix = new Double[rowOfNumbers.length][rowOfNumbers.length]; 
     } 

     for(int i = 0; i < rowOfNumbers.length; i++) 
     { 
      if(rowOfNumbers[i].matches("\\d+")) 
       matrix[rowNumber][i] = Double.parseDouble(rowOfNumbers[i]); 
     } 
     rowNumber++; 
    } 

    myScan.close(); //Safely closes Scanner. 
} 
관련 문제