繁体   English   中英

需要帮助,使Java方法可以从文本文件中创建2D字符串数组

[英]Need Help Making a Java Method for Creating a 2D String Array From a Text File

我一直试图在Java中创建一个函数,该函数将读取具有“ 1”和“ 0”的文本文件,如下所示

11000000001111111110
11111000000000011000
11111111000000001000
11111100000000001100
11111000000000011110
11111000000000111111
11111110000000001111
11111111110001111100
11111000000000001111
11000000000000000000
10000000000000000000
00000000001100000000
00000000011110000000
10000000011000000000
11000000000000000000

然后将“ 1”转换为某个字符或图像,将“ 0”转换为另一个字符/图像。 我希望将其用于我一直在计划的ASCII图形游戏。 但是,我一直在

java.lang.ArrayIndexOutOfBoundsException: 1

我的Eclipse控制台上出现错误。 下面是该函数的代码。

public static String[][] create2DStringMatrixFromFile(String filename) throws Exception {
    String[][] map = new String[20][15];
    for (int x = 0; x < 20 ; x++) {
        for (int y = 0; y < 15; y++) {
            map[x][y] = "0";
        }
    }

File inFile = new File(filename);
Scanner in = new Scanner(inFile);
in.close();

in = new Scanner(inFile);

int lineCount = 0;
while (in.hasNextLine()) {
  String[] currentLine = in.nextLine().trim().split("\\s+"); 
     for (int i = 0; i < 15; i++) {
        map[lineCount][i] = currentLine[i];
     }
  lineCount++;
 }                                 
 return map;

}

如果有人可以指出我做错了,将不胜感激:)

编辑:我考虑了@andrewdleach建议我做什么,这是我现在的代码。

    public static String[][] create2DStringMatrixFromFile(String filename) throws IOException {

    File inFile = new File(filename);
    BufferedReader reader = new BufferedReader(new FileReader(inFile));

    String[][] map = new String[20][15];
    //Arrays.fill(map, "0");
    //fill each row with 0
    for (String[] row : map) {
        Arrays.fill(row, "0");
    }
    int rowCount = 0;
    while (reader.ready()) {
        parseLine(reader.readLine(), rowCount, map);
        rowCount++;       

    }
    reader.close(); // might delete later
     return map;
}

private static void parseLine(final String theLine, final int theCurrentRow, String[][] map) {
     final char[] eachColumn = theLine.toCharArray();
     int curColumn = 0;
     for (char c : eachColumn) {
         map[theCurrentRow][curColumn] = new String(Character.toString(c));
         curColumn++;       
     }

 }

但是,现在我每次运行它都会收到此错误。

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 15
at com.trees.Map.parseLine(Map.java:62)
at com.trees.Map.create2DStringMatrixFromFile(Map.java:50)

我花了大约一个小时的时间试图修复它,但我无法弄清楚。 有什么建议吗? 如果无法使它与Arrays一起使用,我可能会像其他人提到的那样用ArrayLists重写它,这可能会更好。

好吧,对变量进行编码始终是一件坏事。 如果期望的数组大小发生变化,它将不具有灵活性。

您的错误Array Index Out of Bounds通常被称为偏离1的错误,因此,如果在代码中进行筛选,您可能会发现一个试图访问2D数组的索引部分的地方。实际宣布。

话虽如此,为解决您的问题,您可能需要考虑解决该问题,如下所示:

public static String[][] create2DStringMatrixFromFile(String filename) {

    File inFile = new File(filename);
    BufferedReader reader = new BufferedReader(new FileReader(inFile)));

    String[][] map = new String[20][15];
    Arrays.fill(map, "0");

    int rowCount = 0;
    while (reader.ready()) {
        parseLine(reader.readLine(), rowCount);
        rowCount++;       

    }                                
     return map;
}


private void parseLine(final String theLine, final int theCurrentRow) {
     final char[] eachColumn = theLine.toCharArray();
     int curColumn = 0;
     for (char c : eachColumn) {
         map[theCurrentRow][curColumn] = new String(c);
         curColumn++;       
     }

 }

调用split("\\\\s+")不会拆分值“ 11000000001111111110”,因为该值不包含任何空格。

这意味着currentLine是一个具有一个元素(未拆分的值)的数组,因此,对于i = 1currentLine[i]将失败。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM