所以这是我到目前为止的代码:
static int[][] change() throws IOException {
BufferedReader ein = new BufferedReader(new InputStreamReader(System.in));
int i = 4;
int MatrixNew[][] = new int[i][i];
for (int i = 0; i < MatrixNew.length; i++) {
for (int j = 0; j < MatrixNew[i].length; j++) {
if (MatrixNew[i][j] == 0) { //edit: added content from above into if
System.out.println("Enter numbers:"); // numbers entered like so: zse
String zf = ein.readLine();
int z = Character.getNumericValue(zf.charAt(0));
int s = Character.getNumericValue(zf.charAt(1));
int e = Character.getNumericValue(zf.charAt(2));
MatrixNew[z][s] = e;
}
}
return MatrixNew;
}
除了4个特定位置外,我得到一个由0
组成的4x4字段。
输入zse
后,我就可以将所需位置([z][s]
)上的一个数字更改为所需的值(e
)。它有点像数独场。
我不知道的是我如何能够有效地重复“改变位置”的价值。用于替换所有0
的函数。
我尝试了一个while循环(12次重复(固定数字)),但该字段没有保留我已经更改的数字,但再次显示0
。
编辑:添加了if
语句,并将用户输入移至if
。
如果所有0
都被更改(正确的用户输入),则允许我重复用户输入12次;如果未更改0
,则可以重复用户输入16次(可能是错误的用户输入)。
现在唯一缺少的就是在每次用户输入后打印2D数组。
答案 0 :(得分:0)
并非100%确定您要实现的目标,但此代码中存在一些混淆:
i
两次 - 一次初始化数组,一次作为循环计数器。它可能因范围规则而起作用,但最好避免这种混淆。for
循环来迭代数组,但随后要求用户指定要为哪个单元格输入数字。这是一个混乱,因为用户输入的内容 - [z][s]
- 独立于for
循环迭代器 - [i][j]
try()
块以关闭流这是你想要做的吗?
static int S = 4; // Don't use variable `i` twice.
static int[][] change() throws IOException {
// Variable name starts with lower-case
int matrix[][] = new int[S][S];
try(BufferedReader ein = new BufferedReader(new InputStreamReader(System.in))) {
for (int i = 0; i < matrix.length; i++) {
for (int j = 0; j < matrix[i].length; j++) {
System.out.println(String.format("Enter number for cell [%d,%d]:", i, j));
String line = ein.readLine();
int e = Character.getNumericValue(line.charAt(0));
matrix[i][j] = e;
print(matrix);
}
}
}
return matrix;
}
static void print(int[][] m) {
for (int i = 0; i < m.length; i++) {
System.out.print("[");
for (int j = 0; j < m[i].length; j++) {
System.out.print(m[i][j]);
System.out.print(", ");
}
System.out.println("]"); // Only here has a "new line"
}
}