变化,并保持在一个二维数组的值在循环
问题描述:
因此,这里是我到目前为止要去代码:变化,并保持在一个二维数组的值在循环
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;
}
我得到由0
个4×4场,除了4个特定位置。 通过输入zse
我可以将所需位置([z][s]
)上的一个数字更改为所需的值(e
)。它有点像数独领域。
我不知道的是我如何有效地重复“位置更改值”功能来替换所有0
s。
我试了一下while循环(12重复(固定数量)),但该字段没有保留我已经改变的数字,但再次显示0
s。
编辑:添加了if
语句并将用户输入移动到if
。 如果所有的0
都被更改(正确的用户输入),则允许我重复用户输入12次,如果0
未被更改(可能是错误的用户输入),则允许我重复用户输入12次。
现在唯一缺少的是在每次用户输入后打印2D阵列。
答
不是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"
}
}
你把环路放在哪里?也许你不小心把'MatrixNew'的初始化放在循环中,导致它每次都被重置。 – Arc676
我把while循环放在change()被初始化的主函数中。 – Corazon