【问题标题】:turning an array of strings into a 2d array of chars将字符串数组转换为二维字符数组
【发布时间】:2019-02-15 01:48:30
【问题描述】:

我的代码从一个内部写有迷宫的文件中读取输入,文件内部看起来像这样。 7 7 咕咕咕 XXOXOOX OXOOOOXX XXXOOXO XXXOXX 太棒了 XXXXXXX(这些都在一个单独的行中,不知道如何在此处显示)

数字是维度,G 是目标,S 是开始,现在这并不重要。我将文件逐行读入字符串数组。所以我的数组看起来像这样 {"GOOOOXO",...,"XXXXXXX"} 现在我想将字符串转换为 2d 字符数组,其中字符的存储方式与上面显示的迷宫相同。

第一个嵌套 for 循环只是读取文件输入并将每一行保存为数组中的字符串,第二个数组旨在将字符串转换为字符以将它们保存到二维数组中,并且仍然设法保持形状迷宫。我得到一个数组索引越界异常。但老实说,在被困在这个问题上几个小时后,我的大脑被炸了,我无法弄清楚我的问题。

    int dimensionsX = input.nextInt();
    int dimensionsY = input.nextInt();
    String[] lines = new String[dimensionsY];
    char[][] maze2 = new char[dimensionsX][dimensionsY];

    for (int j = 0; j < dimensionsY; ++j) {
        if (input.hasNextLine()) {
            lines[j] = input.nextLine();
            System.out.println(lines[j]);
            //System.out.println(j);
        }

    }



    for (int i = dimensionsX; i > 0; --i) {
        for (int j = dimensionsY; j > 0; --i) {
            maze2[i][j] = lines[i].charAt(j);
            System.out.print(maze2[i][j]);
            if (i == lines.length) {
                System.out.println();
            }
        }
    }

【问题讨论】:

  • 基本上:maze2[j]=input.nextLine().toCharArray(); (您可能需要做一些额外的错误检查)
  • 这实际上对我没有帮助,在第一个 forloop 中,我将输入保存在字符串数组中,在 for 循环中我的代码的底部,我试图获取这些字符串并分隔每个字符串,以便我以保持迷宫形状的方式将每个字符分别保存在 2D 字符数组中。我不确定你的评论是想做什么。是否像在 char 数组中一样将输入保存为字符?
  • 每个输入文件都有不同的迷宫,行数和列数已经给我们了。这就是为什么我把它设置成这样。现在我已经解决了这个问题,我得到了一个数组索引越界异常
  • 是的,我忽略了代码中的一个问题并复制了它,内部循环需要递减 j 而不是 i。 "for (int j = dimensionsY; j > 0; --i) {" -> "for (int j = dimensionsY; j > 0; --j) {"

标签: java string multidimensional-array char type-conversion


【解决方案1】:

例如:

int dimensionsX = input.nextInt();
int dimensionsY = input.nextInt();
String[] lines = new String[dimensionsY];
char[][] maze2 = new char[dimensionsY][];

for (int j = 0; j < dimensionsY; ++j) {
    if (input.hasNextLine()) {
        lines[j] = input.nextLine();
        if(lines[j].length()<dimensionsX){
           System.err.println("we are doomed. Input malformed in line j: it has less then" + dimensionsX + "characters");
           System.exit(1);     
        }
        maze2[j] = lines[j].toCharArray();
        System.out.println(lines[j]);
        //System.out.println(j);
    }else{ 
       System.err.println("we are doomed. Input has too few lines");
       System.exit(1);
    }
}
//taken as is, but makes me wonder if it is intended to have dimensionsX as the Y coordinate but well...
for (int i = dimensionsX; i > 0; --i) {
    for (int j = dimensionsY; j > 0; --j) {
        System.out.print(maze2[j-1][i-1]);
    } 
    System.out.println();
}

当然,如果输入格式不正确,您当然想做一些与退出程序不同的事情,例如如果您的输入始终正确,则抛出异常或不执行任何操作(是吗?)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-03-28
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 1970-01-01
    • 2016-02-22
    • 2021-01-28
    • 1970-01-01
    相关资源
    最近更新 更多