Java 读取文本文件并制作二维数组

Java 读取文本文件并制作二维数组,java,arrays,Java,Arrays,我想读取一个文本文件并从中生成一个二维数组,但我不熟悉二维数组。所以我的文本文件包含了所有的数字 我也尝试了for循环,但得到了相同的错误 请在这里查看我的代码 Scanner readFile = new Scanner(new File("ELEVATIONS.txt")); rowLength = readFile.nextInt(); colLength = readFile.nextInt(); Radius

我想读取一个文本文件并从中生成一个二维数组,但我不熟悉二维数组。所以我的文本文件包含了所有的数字

我也尝试了for循环,但得到了相同的错误

请在这里查看我的代码

  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

关键是:读取文件时,您最终会出现错误。这与是否只将值打印到控制台,或者是否将它们存储在预定义的数组中无关

换句话说:此时,您的问题是您的文件内容不符合您的期望/假设。所以你要一个号码。。。没有的地方

答案是:退后一步。从一个非常小的文件开始,该文件只包含say
2251234
。现在,用它运行代码,然后打印所有相关信息(例如从文件读取的值)。以便理解您的代码到底在做什么


换句话说:调试是必需的。可以通过实际使用调试器,也可以通过添加打印语句。您需要能够观察代码的工作情况

您遇到的错误主要是因为您的文本文件不包含代码试图获取的元素

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,但我需要从数据中找到最低值,我需要向我的教授证明,如果我得到这个错误,那么我应该如何从那里显示最低值,它发生了多少次,以及发生在什么位置?我想弄清楚