【问题标题】:Create 2D array from text file in Java从Java中的文本文件创建二维数组
【发布时间】:2018-06-11 06:55:26
【问题描述】:

我刚开始学习java,现在我正在尝试输入一个文本文件并使其成为一个二维字符串数组。但不知何故,它显示在输出中找不到任何行(NoSuchElementException)。 所以这是我的代码:

public class Maze {

final static int Max_Maze_Row = 20;
final static int Max_Maze_Column = 50;
public static String mazearray;

public static void create() throws Exception
{

   Scanner sc = new Scanner(new BufferedReader(new FileReader("Maze.txt")));
   String [][] mazearray = new String[Max_Maze_Row][Max_Maze_Column];
   while(sc.hasNextLine())
   {

       for(int i = 0 ;i<=Max_Maze_Row;i++)
       {
           for(int j = 0 ;j<=Max_Maze_Column;j++)
           {
               mazearray[i][j] = sc.nextLine();
               System.out.println(mazearray[i][j]);
           }
       }
   }
}

public static void display()
{
    System.out.println(Maze.mazearray); 
}

这里是主要方法:

    public static void main(String[] args) throws Exception
{
    Maze mazeobject = new Maze();
    mazeobject.create();

}

所以这就是文本文件的样子: Maze.txt 我看过很多论坛讨论相同的问题,但没有一个适合我。 提前致谢!非常感谢您的帮助。

【问题讨论】:

  • 先学习基础知识。比如:为什么要创建一个Maze的实例,只是为了调用一个静态方法?

标签: java arrays 2d


【解决方案1】:
import java.io.BufferedReader;
import java.io.FileReader;
import java.util.Arrays;
import java.util.Scanner;

public class Maze {
    final static int Max_Maze_Row = 20;
    public String[] mazearray;

    public void create() throws Exception {

        Scanner sc = new Scanner(new BufferedReader(new FileReader("./Maze.txt")));
        mazearray = new String[Max_Maze_Row];
        int i = 0;
        while (sc.hasNextLine()) {
            mazearray[i++] = sc.nextLine();
        }
    }

    public void display() {
        System.out.println(Arrays.deepToString(mazearray));
    }

    public static void main(String[] args) throws Exception {
        Maze mazeobject = new Maze();
        mazeobject.create();
        mazeobject.display();
    }
}

您必须确保./Maze.txt 中有足够 行,符合Max_Maze_Row = 20Max_Maze_Column = 50 的要求。否则这条线 mazearray[i][j] = sc.nextLine(); 将失败 java.util.NoSuchElementException: No line found

【讨论】:

  • 谢谢听!有 20 行和 50 列。所以总共20行。你是这个意思吗?
  • @Lynne 我现在明白你的意思了,但是你对这个文件的解决方案应该总是fail,因为它会从那个文件中读取 20 * 50 行。
【解决方案2】:

像这样改变你的创建方法:

public static void create() throws Exception {
    Scanner sc = new Scanner(new BufferedReader(new FileReader("Maze.txt")));
    String[][] mazearray = new String[Max_Maze_Row][Max_Maze_Column];
    int lineCounter = 0;

    while (sc.hasNextLine()) {
        String data = sc.nextLine();

        for (int i = 0; i < data.length(); i++) {
            mazearray[lineCounter][i] = String.valueOf(data.charAt(i));
            System.out.print(mazearray[lineCounter][i]);
        }

        System.out.println();
        lineCounter++;
    }
}

【讨论】:

  • 谢谢哈米德!! lineCounter 是个好主意!我试过了,但我认为它打印出来的文件数量是双倍的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-03-29
  • 2014-07-29
  • 1970-01-01
相关资源
最近更新 更多