使用不熟悉的java语法的数独算法

时间:2013-02-24 04:56:18

标签: java

当我遇到一些我以前从未见过的语法时,我正在查看一个Sudoku求解算法。

我感到困惑的是

    System.out.print(solution[i][j] == 0 ? " " : Integer.toString(solution[i][j]));

我不明白问号在问号后面是什么意思。 这一行是方法的一部分

    static void writeMatrix(int[][] solution) {
    for (int i = 0; i < 9; ++i) {
        if (i % 3 == 0)
            System.out.println(" -----------------------");
        for (int j = 0; j < 9; ++j) {
            if (j % 3 == 0)
                System.out.print("| ");
            System.out.print(solution[i][j] == 0 ? " " : Integer.toString(solution[i][j]));

            System.out.print(' ');
        }
        System.out.println("|");
    }
    System.out.println(" -----------------------");
}

我从http://www.colloquial.com/games/sudoku/java_sudoku.html获得了此代码。任何解释都将不胜感激!

4 个答案:

答案 0 :(得分:4)

这是标准ternary operator,它存在于大多数语言中:C,C ++,Java,Perl等。

condition ? value_if_true : value_if_false

答案 1 :(得分:1)

 System.out.print(solution[i][j] == 0 ? " " : Integer.toString(solution[i][j])); 

相同
    if(solution[i][j] == 0){
        System.out.print(" ");
    }
    else{
        System.out.print(Integer.toString(solution[i][j]));
    }

它基本上是一种编写if / else语句的内联方式。

答案 2 :(得分:0)

这基本上是一个if语句。如果" ",则会打印出solution[i][j] == 0,如果不是,则打印出Integer.toString(solution[i][j])

答案 3 :(得分:0)

基本上说如果该值为0,则打印“”,如果没有,则打印该数组存储的字符串表示。