2016-08-25 4 views
0

Я хочу вставить sudoku ответ с txt-файлом. В моей книге указано, что я делаю следующее:Входной файл в Java

«Это громоздко ввести 81 номер с консоли. Когда вы тестируете программу, вы можете сохранить ввод в файле, скажем CheckSudokuSolution.txt (см. Www.cs.armstrong. Edu/лян/данные/CheckSudokuSolution.txt) и запустить программу с помощью следующей команды:

java CheckSudokuSolution < CheckSudokuSolution.txt" 

Я сохранил CheckSudokuSolution.txt файл в том же каталоге, как мой файл Java и попытался несколько раз, но команда 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 
    } 
} 

как я могу скомпилировать эту java-программу с файлом CheckSudokuSolution.txt с помощью командной строки?

+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 файлы. Обратите внимание, что это будет сделано в двух различных этапов:

  • Compile используя JAVAC команду.
  • Запуск с использованием команды java.

Только второй шаг будет использовать текстовый файл ввода, и мы будем более правильно сказать, что мы запускаем нашу программу с файлом CheckSudokuSolution.txt в качестве ввода; а не компилировать его.

В нашем примере символ < используется для передачи содержимого файла в качестве стандартного ввода в программу. Это называется redirection, и есть намного больше информации, чтобы найти online. Дело здесь в том, что у него нет проблемы с поиском файла, а скорее с вашей оболочкой, которая будет выглядеть в каталоге, в котором вы находитесь.

Поэтому вы должны убедиться, что ваш каталог содержит файл .class , а также ваши входные данные .txt. Если они находятся в отдельных папках, возможно, посмотрите на аргумент -cp для команды java, которая может использоваться для указания, где находятся файлы вашего класса.

Смежные вопросы