java string 二维数组-二维布尔型数组中的使用字符串索引表示法
发布时间:2023-06-27 09:18 浏览次数:次 作者:佚名
我的第一个建议是尝试使用不同的数组索引表示法。在您的示例数组中,您声明用户将输入行,然后输入行。行通常是向上和向下的。我建议使用row,column或者i,j或者n,m这两种更常见的方式来描述2d数组中的位置。
此外,在本例中使用字符串数组会产生不必要的开销。一个二维布尔型数组就足够了。
要回答您的问题,这取决于您想要存储哪些座位被占用。如果您希望您的类存储其当前状态
public class SomeSeatClass {
private String[][] currentState;
public SomeSeatClass(int rows, int cols) {
currentState = new String[rows][cols];
// sets the size of the 2d array and then initialize it so that no seats are
// taken.
for (int i = 0; i < rows; i++) {
for (int j = 0; j < rows; j++) {
currentState[i][j] = "0";
}
}
}
public void setSeat(int rows, int lines) {
currentState[rows][lines] = "x";
}
public String[][] getCurrentState() {
return this.currentState;
}
}
复制
但是,如果您只想让函数处理新位置并返回更新后的数组,那么我建议您将函数设为静态的,如下所示
public static String [][] seatInfo(String [][] a, int rows, int lines){
String[][] returnString = a.clone();
returnString[rows][lines] = "x";
return returnString;
}
复制
然后在你的主代码中
int numberOfRows =5;
int numberOfColumns = 3;
String[][] seating = new String[numberOfRows][numberOfColumns];
//initialize array to "0"s
for (int i = 0; i < numberOfRows; i++) {
for (int j = 0; j < numberOfColumns; j++) {
seating[i][j] = "0";
}
}
//get the row and col from user
int userRow = 1;
int userCol = 1;
//seating now holds the most current state
seating = SomeSeatClass.seatInfo(seating, userRow, userCol);
复制
我认为你遇到的问题是,你正在循环你的数组java string 二维数组,并在每次函数调用时将所有东西重置为"0“。您只需要在开始时将所有内容设置为零,然后更新哪个座位被占用。
注意:要小心地认为数组是从1,1开始的。它们从0,0开始,这样使用起来最简单,但对用户隐藏了这些细节。使用字符串作为方法参数时要小心java string 二维数组,因为它们是不可变的。对字符串的任何更改都不会反映在函数外部。但是,您使用了一个字符串数组,这对它进行了一些更改。在考虑如何保存数据时要小心。字符串实际上是一个3d数组。在您的函数中,您传递了一个String[],它并不能真正帮助我们弄清楚如何处理字符串seatingArray