如何在java中创建包含数组的数组

如何在java中创建包含数组的数组,java,arrays,string,char,Java,Arrays,String,Char,我试图创建一个包含多个字符数组的字符数组。下面是这个方法,当我运行它时,我得到一个错误,上面写着“char[]无法转换为char”: 我理解上面的方法,但是我无法做到这一点,因为我首先必须循环字符串数组,将数组中的每个字符串转换为字符数组,然后只能将其添加到包含数组的数组中(如果不按照上面的回答用数组初始化它,我不知道如何做)此错误是正常的。您正试图将数组对象影响为char原语值数组[1][x]。它们是两种不同的类型 另外,array[1][x]将引发异常,因为数组的长度是1,因此索引应该是0

我试图创建一个包含多个字符数组的字符数组。下面是这个方法,当我运行它时,我得到一个错误,上面写着“char[]无法转换为char”:


我理解上面的方法,但是我无法做到这一点,因为我首先必须循环字符串数组,将数组中的每个字符串转换为字符数组,然后只能将其添加到包含数组的数组中(如果不按照上面的回答用数组初始化它,我不知道如何做)此错误是正常的。您正试图将
数组对象
影响为char原语值
数组[1][x]
。它们是两种不同的类型

另外,
array[1][x]
将引发异常,因为数组的长度是
1
,因此索引应该是
0

我建议您改用
ArrayList
,因为您不知道
sMaze
的大小,如果其中一个值是
字符串,则
数组中的char元素无法处理它

String[] splitString = sMaze.split("\n");
List<String> array = new ArrayList<>();

for (int x = 0; x < splitString.length; x++) {
    array.add(splitString[x]);
}
String[]splitString=sMaze.split(“\n”);
列表数组=新的ArrayList();
对于(int x=0;x

但是,根据您想做什么,您可以使用和
Char
ArrayList
,您对Java有很多误解。让我用行号来演示

private MazeStatus[][] stringToMaze(String sMaze) {
    String[] splitString = sMaze.split("\n"); // line 1
    char[][] array = new char[1][]; // line 2

    for (int x = 0; x < splitString.length; x++) {  // line 3
        array[1][x] = splitString[x].toCharArray(); // line 4
    }
    return null; // TO DO
}
private MazeStatus[]stringToMaze(字符串sMaze){
String[]splitString=sMaze.split(“\n”);//第1行
char[][]数组=新字符[1][];//第2行
对于(intx=0;x
我假设您希望获取一个输入,并将其转换为MazeStatus的对象(您的问题中似乎缺少该对象)。 一致:

1-你得到迷宫的每一行,由字符表示

2-声明2D字符数组,但仅初始化其中一个维度。如果您注意到,您会发现数组的另一个维度仍然未知

你经过迷宫的每一排

4-将行(拆分字符串[x])转换为字符数组。获取2D数组的第一个维度(尽管代码将该维度初始化为长度为1)。如果仍然没有发现问题,那么应该知道Java数组是基于0的索引。忽略此错误,您将进一步尝试在第二维度上存储整个字符数组,而您尚未初始化此维度

那么您需要做什么:

  • 您需要将第一个维度的长度设置为迷宫中的行数

  • 对于(字符串的)每一行,将第二个数组维度初始化为该字符串的长度,然后将字符数组[row]=splitString[x].ToCharray()设置

  • 您可以在下面找到修改后的版本:

    private String stringToMaze(String sMaze) {
    
        String[] splitString = sMaze.split("\n");
        char[][] array = new char[splitString.length][];
        for (int x = 0; x < splitString.length; x++) {
            array[x] = new char [splitString[x].length()];
            array[x] = splitString[x].toCharArray();
    
            for (int i = 0; i< splitString[x].length(); i++) {=
                System.out.print(array[x][i]);
            }
            System.out.println();
        }
        return null; // TO DO
    }
    
    私有字符串字符串大小(字符串大小){
    String[]splitString=sMaze.split(“\n”);
    char[][]数组=新字符[splitString.length][];
    对于(int x=0;x
    您可以在这样创建数组时初始化数组,
    char[][]array=new char[1]{'1','2'};或字符[][]数组=新字符[1][2]并更改splitString。toCharArray()[x]如果希望每行有一行,每个字有多个字符数组,则需要一个三维数组。但是,在这一点上,我建议使用ArrayList,因为在声明变量时,您似乎不知道需要每个项目中的多少项。感谢您和我的帮助!完全忘记了ArrayList系列,它将完美地满足我的需求,所以感谢@Nomadmaker感谢你写的这么好的答案!我对二维数组相当熟悉,在过去使用二维数组时,我发现自己在与二维数组作斗争。。所以,我肯定会对维度数组做更多的研究!我对修改版本中的某一行有点困惑。你说“array[x]=newchar[splitString[x].length();”,我理解,但你写“array[x]=splitString[x].tocharray();”。这会不会取代以前数组[x]中的内容?不,在java中,我们会做一些初始化和赋值。因此,在这里,假设x=2,数组[2]=new char[splitString[2].length()]告诉数组在它的第二个索引中是另一个大小为splitString[2].length()的数组。现在,数组[2]=splitString[2]。toCharArray()将在数组[2]中简单地分配该字符数组。如果没有上一步,数组[2]将不知道数组[2]中字符数组的实际大小@此外,在这些情况下,我们必须使用ArrayList(或列表列表)以获得更大的灵活性。修改后的解决方案会起作用,但您将始终需要跟踪相应的splitString索引。我现在明白了,我再次非常感谢您给我的解释。在我的课程中,我们从来没有做过任何初始化方法,比如我们没有在2d数组上花费太多时间,所以用这种方法学习真的很酷!我总是倾向于使用ArrayList,我确实在这个问题上使用了ArrayList,并使其发挥了作用。我只是想知道如何使用一个简单的2d数组来更好地理解它的工作原理。这太棒了,很高兴能提供帮助!另外,hackerrank也有一些简单的问题让你开始。
    
    private MazeStatus[][] stringToMaze(String sMaze) {
        String[] splitString = sMaze.split("\n"); // line 1
        char[][] array = new char[1][]; // line 2
    
        for (int x = 0; x < splitString.length; x++) {  // line 3
            array[1][x] = splitString[x].toCharArray(); // line 4
        }
        return null; // TO DO
    }
    
    private String stringToMaze(String sMaze) {
    
        String[] splitString = sMaze.split("\n");
        char[][] array = new char[splitString.length][];
        for (int x = 0; x < splitString.length; x++) {
            array[x] = new char [splitString[x].length()];
            array[x] = splitString[x].toCharArray();
    
            for (int i = 0; i< splitString[x].length(); i++) {=
                System.out.print(array[x][i]);
            }
            System.out.println();
        }
        return null; // TO DO
    }