【问题标题】:I am trying this simple sudoku我正在尝试这个简单的数独
【发布时间】:2016-12-01 13:36:08
【问题描述】:

我正在尝试一个简单的数独程序。我首先在 3D 中取值 数组,然后使用 mr.serpardum 的方法将它们复制到一维数组中。 我知道在我试图查找的地方有一个错误
重复元素,因为即使我给出与输入相同的数字输出 说“它是数独”,但我找不到它......显然我无法添加任何 图片因为我没有足够的学分

    public class SecondAssignment {
    @SuppressWarnings("unused")
    public static void main(String[] args) throws IOException {
    int i = 0, j = 0, k = 0;
    boolean result = false;
    int arr1[][];
    arr1 = new int[3][3];
    int arr2[];
    arr2 = new int[9];
    BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
    System.out.println("Enter the elements in the sudoku block");
    //getting elements into array
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            arr1[i][j] = Integer.parseInt(br.readLine());
        }
    }
    //printing it in matrix form
    for (i = 0; i < 3; i++) {
        for (j = 0; j < 3; j++) {
            System.out.print(arr1[i][j] + "\t");
        }
        System.out.println(" ");
    }
    //copying array1 elements into array 2
    for (i = 0; i < 3; i++) { 
        for (j = 0; j < 3; j++) {
            arr2[i * 3 + j] = arr1[i][j];
        }
    }

    //finding duplicate elements
    for (i = 0; i < arr2.length; i++) {
        for (int m = i + 1; m < arr2.length; m++) {
            if (arr2[i] == (arr2[m])) {
                System.out.println("Not a sudoku");
                //result = true;
            } else {
                System.out.println("Its a sudoku");
                //result = false;
            }
          }
      }
  }
}

【问题讨论】:

  • 首先,您当前的数独检查肯定是错误的。注释掉的更接近,但不完全在那里。您应该将boolean isSudoku 设置为true,然后如果您在嵌套的forif 中找到重复项,请将其设置为false。您遇到此逻辑错误的原因是因为您在每次检查时都设置了布尔值,无论是真还是假。
  • 是的,在查看了我的输出后,我知道我在每次检查时都在设置它,我试图纠正它,但它并没有完全解决,我又回到了原点......但是嘿,你是对,我试过你的解决方案,它奏效了......非常感谢:) :) :)

标签: java duplicates elements


【解决方案1】:

您可以将您的代码更新为以下内容

//finding duplicate elements
for( i = 0; i < arr2.length; i++){
 for(int m = i+1; m < arr2.length; m++){
    if(arr2[i] == (arr2[m])){ 
      result = true;
      break;
    }
 }
}  
if(result){
System.out.println("\nNot a sudoku");
}
else{
System.out.println("\nIts a sudoku");
}

您应该在找到匹配项后立即使用 break。 此代码仅检查数组(大小为 9)中是否存在重复元素。

【讨论】:

  • 是的先生!!!!..我尝试了你的方法和@MarksAtomic 方法..它们都有效。虽然我认为你们都提出了同样的建议......但无论如何..谢谢很多... :) :) :) :)
猜你喜欢
  • 2018-06-25
  • 1970-01-01
  • 2011-09-16
  • 2021-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-04
  • 1970-01-01
相关资源
最近更新 更多