有人可以解释这种类型的语法,以及它在做什么?

时间:2014-07-01 02:57:24

标签: java

我不确定print语句中发生了什么。更具体地说,“&”,“?”是什么和“:”对这个打印语句中的格式做了什么?

 for (int j = 0; j < x; j++) {
            System.out.print((maze[j][i] & 8) == 0 ? "|   " : "    ");
        }

6 个答案:

答案 0 :(得分:4)

'&amp;'这是按位运算符。并且变量 == 某事? x:y这是三元运算符,在这个例子中你可以这样读'如果8位的迷宫[i] [j]的按位AND等于0,则打印“|”否则打印“”'

答案 1 :(得分:0)

(maze[j][i] & 8) == 0 ? "|   " : "    ")
如果"| "的8位为0,则

评估为maze[j][i];如果为{1>,则评估为" "

maze[j][i] & 8maze[j][i]的值和数字8进行按位AND。结果将为8(如果maze[j][i]的值在位对应的位置为1到8&s;或0(如果它有0)。

如果它为零(== 0),则(?)表达式解析为带有管道的字符串("| ");否则(:)它解析为没有管道的字符串(" ")。

答案 2 :(得分:0)

&amp;是bitwise and(当两个数字中的第八位为1时,它将为1),==是布尔条件,?:ternary conditional expression (jls-15.25)

System.out.print((maze[j][i] & 8) == 0 ? "|   " : "    ");

相当于

if ((maze[j][i] & 8) == 0) {
  System.out.print("|   ");
} else {
  System.out.print("    ");
}

答案 3 :(得分:0)

让我们说它是一个快捷方式if / else条件或者它们称之为三元运算符。当你想要在打印出某些东西或将某些内容存储到变量中之前测试某些值时,它实际上是一种很好的方法。 &是一个按位AND运算符,它比较每一方的位。 ?就像那样,当条件为真时,它将在其中执行任务, :else如果条件不正确,它将在其中执行任务

这是一个更具可读性的片段,因此您可以理解我在谈论的内容

for (int j = 0; j < x; j++) {
    if(maze[j][i] & 8) {
        System.out.print("|   ");
    } else {
        System.out.print("    ");
    }
}

答案 4 :(得分:0)

System.out.print((maze[j][i] & 8) == 0 ? "|   " : "    ");

翻译为:

如果迷宫[j] [i]的值在第4个最低有效位中为0,则打印“|”;否则,请打印“”。

&安培;是一个按位;如果操作数之间没有共同的1位,则返回0。

? :是三元运营商。它评估第一个参数的真实性。如果为true,则执行第二个参数;否则,它执行第三个。

答案 5 :(得分:0)

&bitwise and。仅当1a b

时才返回1
  

a和b为individual bits,其中可以表示数字,其真值可以为01

例如12 & 13

  

12 = 1100(二进制)

     

13 = 1101(二进制)

     

12&amp; 13 = 1100

并且语句x == 0 ? 1 : 2被称为ternary operators ..如果?之前的语句为真,则打印第一个语句(即)1,否则{{1}它等同于2 ..它可以写成

if else