所以我目前正在做我的家庭作業,似乎無法將 .csv 檔案放入二維陣列中。問題是我們必須使用 Scanner 和 .split() 方法,沒有變通方法。目前它似乎只將倒數第二行加載到整個陣列中。.csv 檔案如下所示:
8;2;0;1;4;5;7;6;9
9;0;4;2;6;7;3;0;8
7;6;0;3;8;9;4;5;2
1;0;0;7;9;0;5;4;0
5;0;6;4;2;0;0;3;7
0;0;9;5;3;6;8;2;1
3;9;7;6;1;4;0;8;0
0;0;8;9;5;2;0;7;3
2;0;5;0;0;3;6;0;4
所以問題出在“readArrayFromFile”的while回圈中,其他一切都已預先確定。
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
public class array2D{
private static int[][] readArrayFromFile(String filename) {
int[][] array = new int[9][9];
try {
Scanner myFileReader = new Scanner(new File(filename));
while (myFileReader.hasNextLine()) {
String line = myFileReader.nextLine();
String[] tokens = line.split(";");
for (int i = 0; i < tokens.length; i ) {
for (int j = 0; j < tokens.length; j ) {
if (myFileReader.hasNext()) {
array[i][j] = Integer.parseInt(tokens[j]);
}
}
}
}
} catch (FileNotFoundException e) {
System.out.println(e.getMessage());
}
return array;
}
private static void printArray(int[][] inputArray) {
for (int y = 0; y < inputArray.length; y ) {
for (int x = 0; x < inputArray[y].length; x ) {
System.out.print(inputArray[y][x] "\t");
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args) {
String filename = "./src/sudoku1.csv";
int[][] sudokuField = readArrayFromFile(filename);
printArray(sudokuField);
}
}
uj5u.com熱心網友回復:
在 while 回圈中不需要 2 個回圈,這是解決方案。
public class array2D
{
private static int[][] readArrayFromFile(String filename)
{
int[][] array = new int[9][9];
try
{
Scanner myFileReader = new Scanner(new File(filename));
int i = 0;
while (myFileReader.hasNextLine())
{
String line = myFileReader.nextLine();
String[] tokens = line.split(";");
for (int j = 0; j < tokens.length; j )
{
array[i][j] = Integer.parseInt(tokens[j]);
}
i ;
}
}
catch (FileNotFoundException e)
{
System.out.println(e.getMessage());
}
return array;
}
private static void printArray(int[][] inputArray)
{
for (int y = 0; y < inputArray.length; y )
{
for (int x = 0; x < inputArray[y].length; x )
{
System.out.print(inputArray[y][x] "\t");
}
System.out.println();
}
System.out.println();
}
public static void main(String[] args)
{
String filename = "./src/test.csv";
int[][] sudokuField = readArrayFromFile(filename);
printArray(sudokuField);
}
}
uj5u.com熱心網友回復:
據我了解,您的問題在于嵌套的 for 回圈。您當前的代碼將用最后一行填充整個二維陣列。我的解決方法是在 while 回圈內放置一個計數器,去掉其中一個 for 回圈,然后它就可以作業了。我希望這是有道理的
uj5u.com熱心網友回復:
不要害怕Scanner一次使用多個:
private static int[][] readArrayFromFile(String filename) {
int[][] array = new int[9][9];
int rowNum = 0;
try (Scanner myFileReader = new Scanner(new File(filename))) {
while (myFileReader.hasNextLine()) {
String line = myFileReader.nextLine();
Scanner sRow = new Scanner(line);
sRow.useDelimiter(";");
int colNum = 0;
while (sRow.hasNextInt()) {
array[rowNum][colNum ] = sRow.nextInt();
}
rowNum ;
}
} catch (FileNotFoundException e) {
e.printStackTrace();
}
return array;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/487942.html
