【问题标题】:java keep checking on the original array in the constructor after I add an element to the reference array将元素添加到引用数组后,java继续检查构造函数中的原始数组
【发布时间】:2018-12-08 20:34:18
【问题描述】:

我用二维数组创建了一个数独游戏,但是用户输入一个值后,编译器一直在构造函数中检查原始数组!

public void addInitial(int row, int column, int value) {

    for (int i = 0; i < board.length; i++) {

        if (board[i][column] == value || board[row][i] == value || board[row][column] != 0) {
            //first condition to check the place itself. Second condition to check the rows, third for columns. fourth to check if the given row and column is a blank space (0)
            //not solved correctly yet
            System.out.println("Wrong value, try again!");
            break;

        }
        if (board[i][column] != value || board[row][i] != value || board[row][column] == 0) {
            board[row][column] = value;
            System.out.println(value + " has been added");

            break;
        }
    }
}


public class Sudoku {
    public static void main (String[] args) {
        Scanner input = new Scanner(System.in);

        SudokuPuzzle game = new SudokuPuzzle();
        int i = 0;
        do{
            System.out.println(game);
            i++;
            System.out.println("Enter row, column, and value");
            System.out.print("Row: ");
            int r = input.nextInt() - 1;
            System.out.print("Column: ");
            int c = input.nextInt() - 1;
            System.out.print("Value: ");
            int v = input.nextInt();
            game.addInitial(r, c, v);

        }while(i < 3); // the loop is just to try 3 values
    }
}

我不希望用户在彼此上方或彼此相邻的地方输入两个相同的值,但编译器允许这样做,因为它会不断检查构造函数中的原始数组。

【问题讨论】:

  • "compiler keep checking on the original array in the constructor!" 这是什么意思?什么原创Array
  • 不确定你对原始数组的意思——但这行不会检查你是否已经在 s roe 或列中添加了一个值——最好把它写在纸上if (board[i][column] != value || board[row][i] != value || board[row][column] == 0) {
  • 我的意思是构造函数中的数组。我在构造函数中初始化了数组。

标签: java arrays 2d


【解决方案1】:

我对“原始数组”的含义有些困惑,因为您没有对此提供解释,但您的程序似乎遇到了问题,即您的程序正在分析一个板/数组你不希望它检查。无论如何,根据您提供的代码,我将尝试一下。

我认为您的问题可能源于您似乎正在编辑您所引用的同一块板,以首先查看答案是否正确。我建议您使用两个不同的板:一个以所有正确答案开始填写(并且对玩家隐藏),然后在游戏过程中由玩家填写第二个板.因此,在您的实现中,您将获取玩家在 main 中给出的值,然后检查填写的“答案”板,然后如果玩家的猜测与板上的值匹配,您将该值输入到玩家的板上。

如果这不是您的问题,我深表歉意并将删除我的答案,但由于您没有提供太多背景信息,我想我会尝试一下。希望这会有所帮助。

【讨论】:

  • public SudokuPuzzle(){ board = new int[][]{ {1,2,3,4,9,7,8,6,5}, {4,5,9,0 ,0,0,0,0,0}, {6,7,8,0,0,0,0,0,0}, {3,0,0,0,1,0,0,0,0 }, {2,0,0,0,0,0,0,0,0}, {9,0,0,0,0,5,0,0,0}, {8,0,0,0 ,0,0,0,0,0}, {7,0,0,0,0,0,0,0,0}, {5,0,0,9,0,0,0,0,0 } };这是我的构造函数。我的问题是,如果用户在这个板上输入一个数字,“addInitial”方法会继续检查构造函数中的板。
  • 好的,谢谢。正如欧文建议的那样,我认为你的条件有问题。我认为您试图在一个循环中做太多事情。尝试将其分解为几个循环和 if 语句。第一个可以检查玩家尝试填充的位置是否已经被正确猜测(它不是零),然后 然后 遍历行检查以查看猜测是否已经包含在行,然后在单独的“for”循环中对列执行相同的操作。将一个布尔变量绑定到每个条件/循环,如果所有 3 个布尔变量都为真,则更改表中的值。
  • 我认为正在发生的事情是你得到一个或多个条件的误报,这导致没有任何改变。
  • 另外,如果您还没有这样做,可能值得将 board 设置为静态变量并将 initValue 设置为静态方法。它可能不会改变任何东西,但值得一试。
猜你喜欢
  • 2019-09-30
  • 1970-01-01
  • 2016-07-31
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2015-06-12
  • 2014-04-22
  • 2015-05-14
相关资源
最近更新 更多