java - 幻方最终值始终为真

标签 java magic-square

对于类,我们必须做一个幻方。我的代码有些工作,但它执行多个方 block ,最后一个总是返回 0,这是幻方的工作原理。 enter image description here

这是我检查的方法

  public int downDiagSum() {
int sum = 0;
for(int r = 0; r < grid.length; r++){
    for(int c = 0; c < grid.length; c++){
        sum += grid[r][c];
    }
}
return sum;



 public int upDiagSum() {
int sum = 0;
for(int r = grid.length - 1; r >= 0; r--){
    for(int c = 0; c < grid.length; c++){
        sum += grid[r][c];
    }
}
return sum;



 public int colSum(int col) {
int sum1 = 0;
for(int r = 0; r < grid[0].length; r++){
    sum1 += grid[r][col];
}
return sum1;

public int rowSum(int row) {
int sum2 = 0;
for(int r = 0; r < grid[0].length; r++){
    sum += grid[row][r];
  }
return sum2;


 public boolean isMagicSquare() {
int num = rowSum(0);
boolean isEqual = false;
if(downDiagSum() == upDiagSum()){
    //row check
    for(int r = 0; r < grid.length; r++){
        if(rowSum(r) == num){
            isEqual = true;
        }
      }
    //column check
    for(int r = 0; r < grid.length; r++){
        for(int c = grid.length - 1; c >= 0; c--){
            if(colSum(c) == num){
                isEqual = true;
            }
        }
    }
}
return isEqual;}

该代码大部分都可以工作,但如果我有一个系列,由于某种原因它总是返回 true。下面设置的数字应该返回 false 但返回 true

6 32 2 34 35 1
7 11 27 28 8 30
19 14 16 15 23 24
18 20 22 21 17 13
25 29 10 9 26 12
36 5 33 4 3 31

抱歉格式错误,我对网站还很陌生。 谢谢, 加罗斯

最佳答案

在两个循环中,您都会检查每一行和每一列。你的逻辑说,当一个行或一个列总和等于第一行的总和(并且这包括第一行的总和row!!!),你的变量 isTrue 变为 true(永远)! 所以,你应该颠倒你的逻辑......

伪算法:

isTrue = true
int magicSum = sumOfFirstDiagonal
if (magicSum != sumOfSecondDiagonal) {isTrue = false; return}
for each row
    if (magicSum != sumOfRow) {isTrue = false; return}    
for each column
    if (magicSum != sumOfColumn) {isTrue = false; return} 

这是计算对角线总和的正确方法:

public static int diagSumTwo() {
    int sum = 0;
    for (int r = 0; r < grid.length; r++) {
        sum += grid[r][r];
    }
    return sum;
}

public static int diagSumOne() {
    int sum = 0;
    for (int r = grid.length - 1; r >= 0; r--) {
        sum += grid[r][grid.length - 1 - r];
    }
    return sum;
}

关于java - 幻方最终值始终为真,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48604228/

相关文章:

java - Java 中的哈希

java - java jar 的 list 属性

java - 如何在android 4中将日历事件添加到默认日历,无需Intent,静默?

java - 碧 Jade 报告 : Store in variable value of parameter bean property

java - 是否可以将我的代码压缩成少于 3 行?

java - HashSet 和 LinkedHashSet 有什么区别

c - 打印二维数组会打印垃圾(Magic Square)

python - 幻方 python

java - 如何在 Java 中将 ArrayList 更改为二维数组