これは数独パズル ソルバーであると想定されており、パズルには 2 次元の ArrayList を使用する必要があります。
txt ファイルの数値を使用して ArrayList を埋めようとしています。私のテスト クラスのコードは、9x9 ArrayList を作成し、2 次元の ArrayList がどのように機能するかをテストするために作成したループを使用して、1 ~ 9 の数字で埋めることができます。
import java.util.*;
import java.io.*;
public class test
{
public static void main(String args[])
{
ArrayList<ArrayList<Integer>> data = new ArrayList<ArrayList<Integer>>();
//Loop to add 9 rows
for(int i=1; i<=9; i++)
{
data.add(new ArrayList<Integer>());
}
//Loop to fill the 9 rows with 1-9
for(int k=0; k<9; k++)
{
for(int j=1; j<=9; j++)
{
data.get(k).add(j);
}
}
//Loop to print out the 9 rows
for(int r=0; r<9; r++)
{
System.out.println("Row "+(r+1)+data.get(r));
}
//Reads the file. Need to use this to set the array
File file = new File("F:\\Data Structures 244\\FINAL PROJECT\\SudokuSolver\\sudoku.txt");
try {
Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
System.out.println(line);
}
scanner.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}
}
}
私の問題は、txt ファイルに保存した数値を取得し、それらを使用して、読み取った順序で ArrayList を埋めようとしたときに発生します。このコードを試して、txtファイルから数値を読み取り、それを繰り返すことでArrayListに配置して、txtファイルから最初の9つの数値をArrayListの最初の行に入れ、次の行に移動するようにしましたtxt ファイルの行と ArrayList を使用して、これらの数値を入力します。
File file = new File("F:/Data Structures 244/FINAL PROJECT/SudokuSolver/sudoku.txt");
//Needs this try and catch
try {
Scanner solutionFile = new Scanner(file);
int cell=0;
while (solutionFile.hasNextInt())
{
//Loop to fill the 9 rows with the numbers from the sudoku.txt
for(int k=0; k<9; k++)
{
for(int j=1; j<=9; j++)
{
cell = solutionFile.nextInt();
data.get(k).add(cell);
}
}
}
solutionFile.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
for(int r=0; r<9; r++)
{
System.out.println("Row "+(r+1)+data.get(r));
}
私はException in thread "main" java.util.NoSuchElementException
この行でcell = solutionFile.nextInt();
これはsudoku.txtファイルです
346791528
918524637
572836914
163257489
895143762
427689351
239415876
684372195
751968243
最初はそのように試してみましたが、そのエラーが発生しましたが、すべての数字を取得して1行に配置しようとしたため、forループは一度に9つの数字しか読み取れませんが、テストしてArrayListまたは何を印刷する必要があるかそれらを追加した後、ArrayList全体が空白になります。
ファイルから数値を読み取らずに ArrayList に入れて印刷することの問題は何ですか?