如何从文本文件中读取游戏板并将其转换为2D数组

时间:2020-03-20 11:52:45

标签: java multidimensional-array text-files

我需要阅读的董事会示例如下:

Example Board in text file

现在,“测试文件”仅是板的名称,并且不会存储在阵列中。 “ 3 3”部分指定了电路板的尺寸,但也不会读入阵列。我需要读入数组的唯一位是这些行下面的字符。

这是我的代码:

if let pdf = PDFDocument(url: url) {
    let pageCount = pdf.pageCount
    let documentContent = NSMutableAttributedString()

    for i in 1 ..< pageCount {
        guard let page = pdf.page(at: i) else { continue }
        guard let pageContent = page.attributedString else { continue }
        documentContent.append(pageContent)
    }
}

只有在我解释自己尝试背后的原因时,我才觉得有帮助。首先,我仅通过阅读其中的一行并获取其长度就设法找到了no.columns。其次,我设法通过遍历文件并计算行数来找到行数,然后减去2,以解决先前不需要的行数。这样,我得到了数组的尺寸;行和列。

下一部分,我发现更加棘手。我再次遍历文件,并检查变量lineCount是否大于1(以解释前面的行)。如果是这样,则将数组 rowN 指定为等于我们想要的第一行字符的不同字符。在这之后,我陷入困境,并且已经尝试了一段时间以解决此问题。谢谢您的时间!

1 个答案:

答案 0 :(得分:0)

我不明白为什么您尝试从文本文件的尺寸中获取电路板尺寸,如果您可以直接从所述文件中读取它的话。 在我看来,您当前尝试执行此操作的方式似乎包含一些错误:

col = boardInput.nextLine().split("").length;

如果您查看测试文件的9列,这将为您提供帮助,因为测试文件的第一行:“测试文件”包含9个字符,但是面板只有3个宽。

像现在一样确定行也将带来问题,因为boardInput.hasNextLine()直到您实际使用boardInput.nextLine()移至下一行之前都不会改变,因此从本质上讲,这里有一个无限的while循环。 / p>

修复此问题实际上非常容易,因为该文件包含有关列和行的信息:

String name = boardInput.nextLine(); // Store the name of the board so the next line can be processed.
String[] rowAndCol = boardInput.nextLine().split(" "); // Takes the second line and splits it into its two parts.
// Parse the two Strings to integers(Assuming the first number is the row and the second is the column):
int row = Integer.parseInt(rowAndCol[0]);
int col = Integer.parseInt(rowAndCol[1]);

现在解决了,现在该解决您实际提出的问题了。首先,您需要制作一个代表您的木板的二维数组,然后在每一行中填充字符。实际上,填充数组非常容易,因为您可以通过单个函数调用将String转换为chars数组:

char[][] board = new char[row][];
for(int r = 0; r < row; r++) {
    board[r] = boardInput.nextLine().toCharArray();
}

需要注意的一件有趣的事情是,您甚至不需要知道创建正确数组的列数(假设文件格式正确)。

相关问题