在循环中更改并保持2D数组中的值

时间:2015-11-01 12:18:57

标签: java loops

所以这是我到目前为止的代码:

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数组。

1 个答案:

答案 0 :(得分:0)

并非100%确定您要实现的目标,但此代码中存在一些混淆:

  1. 使用变量i两次 - 一次初始化数组,一次作为循环计数器。它可能因范围规则而起作用,但最好避免这种混淆。
  2. 您正在使用两个for循环来迭代数组,但随后要求用户指定要为哪个单元格输入数字。这是一个混乱,因为用户输入的内容 - [z][s] - 独立于for循环迭代器 - [i][j]
  3. 添加了try()块以关闭流
  4. 从您的描述中不确定您要更改哪些单元格(&#34;所需位置上的一个数字为期望值&#34;)但很明显您每次都要打印数组,所以我添加了这个功能。
  5. 这是你想要做的吗?

    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"
        }
    }