英文:
How to create an array that holds arrays in java
问题
以下是翻译好的内容:
我正在尝试创建一个包含多个字符数组的字符数组。以下是该方法,当我运行它时,会出现一个错误,错误消息为:“char[] 无法转换为 char”:
private MazeStatus[][] stringToMaze(String sMaze) {
String[] splitString = sMaze.split("\n");
char[][] array = new char[1][];
for (int x = 0; x < splitString.length; x++) {
array[1][x] = splitString[x].toCharArray();
}
return null; // TO DO
}
我该如何使其保存字符数组,而不仅仅是字符?
我在 Stack Overflow 上搜索了类似的问题,并找到了一个与我问题标题相同的帖子。其中一个答案是这样的:
String[][] arrays = { array1, array2, array3, array4, array5 };
我理解上述的方法,然而我不能这样做,因为我首先必须遍历字符串数组,将数组中的每个字符串转换为字符数组,然后才能将其添加到保存数组的数组中(但我不确定如何在不初始化具有数组的数组的情况下执行此操作,正如上面的答案所述)。
英文:
I am attempting to make an char array which holds multiple char arrays. Below is the method, when I run it I get a error that says "char[] can not be converted to char":
private MazeStatus[][] stringToMaze(String sMaze) {
String[] splitString = sMaze.split("\n");
char[][] array = new char[1][];
for (int x = 0; x < splitString.length; x++) {
array[1][x] = splitString[x].toCharArray();
}
return null; // TO DO
}
How do I make it so that it holds char arrays apposed to just chars?
I have searched stack overflow for similar question and found one with the same title as mine. One of the answers were this:
String[][] arrays = { array1, array2, array3, array4, array5 };
I understand the above method, however I am not able to do that as I first have to loop through the string array, convert each String in the array to a char array and then can I only add it to the array that holds arrays (which I am not sure how to do without initializing it with the arrays as the above answers says)
答案1
得分: 1
你对Java有许多误解。我将通过行号进行演示。
private MazeStatus[][] stringToMaze(String sMaze) {
String[] splitString = sMaze.split("\n"); // 第1行
char[][] array = new char[1][]; // 第2行
for (int x = 0; x < splitString.length; x++) { // 第3行
array[1][x] = splitString[x].toCharArray(); // 第4行
}
return null; // 待完成
}
我假设您想要输入并将其转换为MazeStatus对象(在您的问题中似乎缺失)。在代码的以下部分:
1 - 您获取迷宫的每一行,每行由字符表示。
2 - 您声明了一个二维字符数组,但只初始化了一个维度。如果您注意到,您会发现数组的另一个维度仍然未知。
3 - 您遍历了迷宫的每一行。
4 - 您将行(splitString[x])转换为字符数组。您采用了二维数组的第一个维度(尽管您的代码将该维度初始化为长度为1)。如果您仍然没有找到问题,您应该知道Java数组是从0开始索引的。在此处了解更多信息。忽略此错误,您进一步尝试将整个字符数组存储在第二维上,而您尚未初始化此维度。
您需要做的是:
-
您需要将第一个维度的长度设置为迷宫中的行数。
-
对于每一行(字符串),将第二个数组维度初始化为该字符串的长度,然后设置字符数组[row] = splitString .toCharArray();
您可以在下面找到修改后的版本:
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; // 待完成
}
英文:
You have many misconceptions on Java. Let me demonstrate with line numbers.
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
}
I am assuming you want to take an input and convert that to an object of MazeStatus (which appears to be missing with your question).
In Line:
1 - you get each row of the maze, which is represented by characters.
2 - You declare a 2D char array, but only initialize one of the dimensions. If you notice, you will find that the other dimension of the array is still unknown.
3 - You go by each of the rows of the maze.
4 - You convert the row (splitString[x]) to a character array. You take the 1st dimension of the 2D array (although your code initialized this dimension to have length 1). If you still haven't found a problem, you should know that Java arrays are 0-based indexed. Read up more on it. Ignoring this mistake, you further try to store a whole character array on the 2nd dimension, whereas you have not initialized this dimension yet.
So what you need to do:
-
You need to set the length of the first dimension to the number of rows you will have in the maze.
-
For each row (of string), initialize the 2nd array dimension to the length of that string, and then set the character array[row] = splitString .toCharArray();
You can find a modified version below:
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
}
答案2
得分: 0
这个错误是正常的。您正在尝试将一个 Array Object
赋值给一个 char 原始值 array[1][x]
。它们是两种不同的类型。
另外 array[1][x]
会抛出一个异常,因为您的数组长度为 1
,所以索引应该是 0
。
我建议您改用 ArrayList
,因为您不知道 sMaze
的大小,如果其中一个值是 String
,您的 array
中的 char 元素可能无法处理它。
String[] splitString = sMaze.split("\n");
List<String> array = new ArrayList<>();
for (int x = 0; x < splitString.length; x++) {
array.add(splitString[x]);
}
但根据您想要做的事情,您也可以使用 ArrayList
的 Char
类型。
英文:
This error is normal. You are trying to affect an Array Object
to a char primitive value array[1][x]
. They are two different types.
Also array[1][x]
will throw an exception because the length of your array is 1
so the index should be 0
.
I would suggest you to use ArrayList
instead, because your don't know the size of sMaze
and if one of the value is a String
, your char element in array
could not handle it.
String[] splitString = sMaze.split("\n");
List<String> array = new ArrayList<>();
for (int x = 0; x < splitString.length; x++) {
array.add(splitString[x]);
}
But depending on what you want to do, you can use and ArrayList
of Char
.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论