Java 读取文本文件并制作二维数组
我想读取一个文本文件并从中生成一个二维数组,但我不熟悉二维数组。所以我的文本文件包含了所有的数字 我也尝试了for循环,但得到了相同的错误 请在这里查看我的代码Java 读取文本文件并制作二维数组,java,arrays,Java,Arrays,我想读取一个文本文件并从中生成一个二维数组,但我不熟悉二维数组。所以我的文本文件包含了所有的数字 我也尝试了for循环,但得到了相同的错误 请在这里查看我的代码 Scanner readFile = new Scanner(new File("ELEVATIONS.txt")); rowLength = readFile.nextInt(); colLength = readFile.nextInt(); Radius
Scanner readFile = new Scanner(new File("ELEVATIONS.txt"));
rowLength = readFile.nextInt();
colLength = readFile.nextInt();
Radius = readFile.nextInt();
int[][] data = new int[rowLength][colLength];
System.out.println("ROW : " + rowLength + " COl : " + colLength + " Radius : " + Radius );
int row = 0;
while (readFile.hasNextInt() && row < data.length) {
for (int col = 0; col < colLength; col++) {
data[row][col]= readFile.nextInt();
}
row++;
}
Scanner readFile=新扫描仪(新文件(“ELEVATIONS.txt”);
rowLength=readFile.nextInt();
colLength=readFile.nextInt();
Radius=readFile.nextInt();
int[][]数据=新的int[rowLength][colLength];
System.out.println(“行:“+行长度+”列:“+集合长度+”半径:“+半径”);
int行=0;
while(readFile.hasNextInt()&&row
当我运行代码时,它会给出以下错误
行:1000列:450半径:10数据1000450线程中的异常
位于的“main”java.util.NoSuchElementException
throwFor(Scanner.java:862)位于
next(Scanner.java:1485)位于
java.util.Scanner.nextInt(Scanner.java:2117)位于
java.util.Scanner.nextInt(Scanner.java:2076)位于
lab1.lab1.main(lab1.java:43)
请帮帮我。您的“2D数组”代码看起来不错,您准备了“空”数组,并根据其尺寸进行循环
你问题的本质体现在这里:
位于java.util.Scanner.throwFor(Scanner.java:862)的java.util.NoSuchElementException
关键是:读取文件时,您最终会出现错误。这与是否只将值打印到控制台,或者是否将它们存储在预定义的数组中无关
换句话说:此时,您的问题是您的文件内容不符合您的期望/假设。所以你要一个号码。。。没有的地方
答案是:退后一步。从一个非常小的文件开始,该文件只包含say2251234
。现在,用它运行代码,然后打印所有相关信息(例如从文件读取的值)。以便理解您的代码到底在做什么
换句话说:调试是必需的。可以通过实际使用调试器,也可以通过添加打印语句。您需要能够观察代码的工作情况 您遇到的错误主要是因为您的文本文件不包含代码试图获取的元素
import java.io.File;
import java.util.Scanner;
public class Test {
public static void main(String[] args) throws Exception {
// pass the path to the file as a parameter
File file =
new File("C:\\Users\\LENOVO\\Documents\\test.txt");
Scanner sc = new Scanner(file);
int rowLength = 0;
int colLength = 0;
int radius = 0;
rowLength = sc.nextInt();
colLength = sc.nextInt();
radius = sc.nextInt();
int[][] data = new int[rowLength][colLength];
System.out.println("ROW : " + rowLength + " COl : " + colLength + " Radius : " + radius);
for (int i = 0; i < rowLength; ++i) {
for (int j = 0; j < colLength; ++j) {
if (sc.hasNextInt()) {
data[i][j] = sc.nextInt();
}
}
}
// printing the array
for (int i = 0; i < rowLength; i++) {
for (int j = 0; j < colLength; j++) {
System.out.print(data[i][j] + " ");
}
System.out.println();
}
}
}
导入java.io.File;
导入java.util.Scanner;
公开课考试{
公共静态void main(字符串[]args)引发异常{
//将文件的路径作为参数传递
文件=
新文件(“C:\\Users\\LENOVO\\Documents\\test.txt”);
扫描仪sc=新扫描仪(文件);
int rowLength=0;
int colLength=0;
int半径=0;
rowLength=sc.nextInt();
colLength=sc.nextInt();
半径=sc.nextInt();
int[][]数据=新的int[rowLength][colLength];
System.out.println(“行:“+行长度+”列:“+集合长度+”半径:“+半径”);
对于(int i=0;i
我的文本文件内容-
2.
2.
5.
1.
2.
3.
4我认为最简单的方法是从文件中读取所有整数,并使用计数器填充2D数组:
public static int[][] readFile(File file) throws FileNotFoundException {
try (Scanner scan = new Scanner(file)) {
int rows = scan.nextInt();
int cols = scan.nextInt();
int[][] res = new int[rows][cols];
for (int row = 0, col = 0; row < rows; ) {
res[row][col++] = scan.nextInt();
if (col == cols) {
row++;
col = 0;
}
}
return res;
}
}
publicstaticint[]readFile(File文件)抛出FileNotFoundException{
尝试(扫描仪扫描=新扫描仪(文件)){
int rows=scan.nextInt();
int cols=scan.nextInt();
int[]res=新的int[行][cols];
for(int行=0,列=0;行<行;){
res[row][col++]=scan.nextInt();
if(col==cols){
行++;
col=0;
}
}
返回res;
}
}
谢谢GhostCat的回复,但我的朋友使用的是同一个文件,他得到的是正确的输出,而不是错误。@ArpitPatel您应该有足够的时间来理解:A)不要链接到其他网站以获取相关内容(作为您的文件链接,顺便说一句,它已经不适用于我)B)因此,如果您希望我们运行您的代码,提供一个真正的、开箱即用的东西。除此之外,我信守诺言:您的数组代码很好,这个异常与“意外”文件读取有关。如前所述:从一个小文件开始,调试正在发生的事情。C) 别指望这里的人会为你这么做。。。我们帮助你解决你的问题,我们不一定为你解决。我只是想知道背后的原因是什么,是的,我尝试了少量的数据,效果很好。但后来,我想对这些数据做一些操作,所以需要它,我没想到会为我编写代码,我只是想得到帮助@Ghost@ArpitPatel当一个小文件起作用时,然后一步一步地处理更多的数据。再次强调:这是基本的调试内容。如前所述:我仍然相信你的数据有问题。你还希望我们告诉你什么?有两个人告诉你,是的,看起来你的数据有缺陷。但是,如果没有这些数据和一个真实的答案,没有人能重新解释你的问题。如前所述:我们还能告诉你什么?我理解你的观点@Ghost,但我需要从数据中找到最低值,我需要向我的教授证明,如果我得到这个错误,那么我应该如何从那里显示最低值,它发生了多少次,以及发生在什么位置?我想弄清楚