2016-08-25 4 views
0

txt 파일과 함께 sudoku answer를 삽입하고 싶습니다. 내 책은 다음과 같이 지시합니다 :Java의 입력 파일

"프로그램에서 테스트 할 때 입력을 파일로 저장할 수 있습니다 (예 : CheckSudokuSolution.txt (www.cs.armstrong 참조)). 에듀/리앙/데이터/CheckSudokuSolution.txt), 다음과 같은 명령을 사용하여 프로그램을 실행합니다. 내 자바 파일과 같은 디렉토리에 CheckSudokuSolution.txt 파일을 저장하고 여러 번 시도하지만

java CheckSudokuSolution < CheckSudokuSolution.txt" 

오류 다음 명령 promp 쇼 :

"Error : The system can not find the file specified". 

import java.util.Scanner; 

public class CheckSudokuSolution { 
    public static void main(String[] args) { 
     // Read a Sudoku solution 
     int[][] grid = readASolution(); 

     System.out.println(isValid(grid) ? "Valid solution" : 
     "Invalid solution"); 
    } 

    /** Read a Sudoku solution from the console */ 
    public static int[][] readASolution() { 
     // Create a Scanner 
     Scanner input = new Scanner(System.in); 

     System.out.println("Enter a Sudoku puzzle solution:"); 
     int[][] grid = new int[9][9]; 
     for (int i = 0; i < 9; i++) 
      for (int j = 0; j < 9; j++) 
       grid[i][j] = input.nextInt(); 

     return grid; 
    } 

    /** Check whether a solution is valid */ 
    public static boolean isValid(int[][] grid) { 
     for (int i = 0; i < 9; i++) 
      for (int j = 0; j < 9; j++) 
       if (grid[i][j] < 1 || 
        grid[i][j] > 9 || 
        !isValid(i, j, grid) 
       ) 
        return false; 
       return true; // The solution is valid 
    } 

    /** Check whether grid[i][j] is valid in the grid */ 
    public static boolean isValid(int i, int j, int[][] grid) { 
     // Check whether grid[i][j] is unique in i's row 
     for (int column = 0; column < 9; column++) 
      if (column != j && grid[i][column] == grid[i][j]) 
       return false; 

    // Check whether grid[i][j] is unique in j's column 
    for (int row = 0; row < 9; row++) 
     if (row != i && grid[row][j] == grid[i][j]) 
      return false; 

    // Check whether grid[i][j] is unique in the 3-by-3 box 
    for (int row = (i/3) * 3; row < (i/3) * 3 + 3; row++) 
     for (int col = (j/3) * 3; col < (j/3) * 3 + 3; col++) 
      if (row != i && col != j && grid[row][col] == grid[i][j]) 
       return false; 

    return true; // The current value at grid[i][j] is valid 
    } 
} 

어떻게 명령 줄을 사용하여 CheckSudokuSolution.txt 파일로이 java 프로그램을 컴파일 할 수 있습니까?

+1

"_Error : 지정한 파일을 찾을 수 없습니다."는 Java 오류가 아닙니다. –

+1

읽고있는 지침은 ** 컴파일 한 후 ** 코드를 실행하는 방법을 알려주고 있습니다. 그것을 컴파일하는 것에 관한 질문은 말이 안되는 것처럼 보입니다. 가장 가능성있는 문제는 데이터 파일의 이름에 간단한 타이핑 오류입니다. 파일이 저장된 이름과 명령 줄 명령에서 참조하기 위해 사용하는 이름을 정렬하려면 매우주의 깊게 확인하십시오 (복사 및 붙여 넣기를 더 잘 사용하십시오). – jwpfox

답변

0

파일은 Java 명령을 실행하는 디렉토리와 동일한 디렉토리에 있어야합니다. 수업이 디렉토리 classes에있는 경우

그래서, 다음과 같은 명령을 실행한다 :

java -cp ./classes CheckSudokuSolution < CheckSudokuSolution.txt

0

코드에 기반을, 당신이 콘솔에서 입력을 받아 grid[][]에 넣어 것으로 알고 있습니다. 그러나, 나는 당신이 파일 이름을 입력으로하고 파일에서 그것을 읽는 것 같아요.

try{ 
    BufferedReader reader = new BufferedReader(new FileReader(new File("<absolute path of CheckSudokuSolution.txt>"))); 
} catch(FileNotFoundException fe) { 
    fe.printStackTrace(); 
} finally { 
} 
0

입력하는 명령은 무엇입니까?

나는 다음과 같은 그들이 뭔가를 찾아야한다 생각 :

java CheckSudokuSolution < CheckSudokuSolution.txt

의 .class 파일을 만들려면 먼저 코드를 컴파일 한 후 수행 할 수있다. 이 두 개의 서로 다른 단계로 이루어집니다 참고 :

  • 컴파일을 javac의 명령을 사용하여.
  • java 명령을 사용하여 실행하십시오.

두 번째 단계에서만 텍스트 입력 파일을 사용하므로 CheckSudokuSolution.txt 파일을 입력으로 사용하여 프로그램을 실행하고 있다고 말하면 정확합니다. 그것을 컴파일하는 것이 아닙니다.

이 예에서 문자 <은 파일의 내용을 표준 입력으로 프로그램에 전달하는 데 사용됩니다. 이를 리디렉션이라고하며 이에 대한 자세한 정보는 online입니다. 여기서 중요한 점은 파일을 찾는 데 문제가있는 java가 아니라 현재 디렉토리에있는 쉘을 찾는 쉘입니다.

따라서 디렉토리에 .class 파일 , .txt 입력 데이터 등이 있습니다. 그들은 별도의 폴더에있는 경우 java 명령에 대한 -cp 인수를 살펴보고 클래스 파일의 위치를 ​​지정하는 데 사용할 수 있습니다.