[英]read .csv file into 2D-array
所以我目前正在做我的家庭作业,似乎无法将 .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);
}
}
据我了解,您的问题在于嵌套的 for 循环。 您当前的代码将用最后一行填充整个二维数组。 我的解决方法是在 while 循环内放置一个计数器,去掉其中一个 for 循环,然后它就可以工作了。 我希望这是有道理的
在 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);
}
}
不要害怕一次使用多个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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.