【问题标题】:Java: 2-dimensional char Array [closed]Java:二维字符数组
【发布时间】:2017-04-16 17:10:04
【问题描述】:

最近几天我一直在尝试编写一个名为推箱子的游戏。游戏关卡是可以交换的简单 .txt 文件。我已经使用 BufferedReader 读取了 .txt 文件,但在将其保存到二维字符数组时遇到问题,因为每个级别的行数和列数都不同。有人告诉我使用 charAt,但我该怎么做。

推箱子级别格式 (http://www.sokoban-online.de/help/sokoban/level-format.html)

希望你能帮助我。谢谢。

String file = "...";
BufferedReader br = Files.newBufferedReader();
String line = null;
int rows = file.length;
int cols = file[0].length;
char[][] room = new char [rows][cols];          
while ((line = br.readLine()) != null) {
            System.out.println(room[rows][cols]);
        }

【问题讨论】:

  • 使用数组列表。或者只使用 CSV 阅读器库。这可能更容易。
  • @LucasKot-Zaniewski 理论上是的,但我不知道 OP 是否会得到它。
  • 感谢您这么快回答。我现在将尝试使用数组列表。因为我已经编程了大约一个半星期了,我还不知道 CSV 阅读器库。

标签: java


【解决方案1】:

您可以初始化二维数组,使每一行具有不同的列数:

char[][] c = new char[7][];
c[0] = new char[5];
c[1] = new char[3];
//etc

【讨论】:

  • 问题是我无法在 [ ] 中写入数字,因为 txt 文件中的级别可能有 3x3、4x7 或其他尺寸。所以我必须为可交换的级别创建一个字符数组,我不知道措施。
【解决方案2】:

在不知道文件行数的情况下,您需要先从文件中读取所有内容以确定行数。如果您使用List<char[]> 来存储每一行​​的字符数组,这将是最简单的。

尽管如此,您可以轻松地编写与 Java 8 中的单线器具有相同功能的东西:

File fl = new File(file);
char[][] array = Files.lines(fl.toPath()).map(String::toCharArray).toArray(char[][]::new);

【讨论】:

    猜你喜欢
    • 2012-02-24
    • 2017-03-26
    • 2010-12-19
    • 2013-10-10
    • 2019-02-18
    • 1970-01-01
    • 1970-01-01
    • 2017-02-19
    • 2013-11-30
    相关资源
    最近更新 更多