读“?”和Java中的“:”运算符

时间:2019-04-23 02:51:56

标签: java

我是Java的新手,在做家庭作业时遇到了以下示例:

String result = " ";
for (int r = rows(); r >= 0; r++) {
  result += ("___") + (r == 0 ? (" ") : ("_"));
}

for (int y = columns(); y >= 0; y++) {
  for (int x = 0; x <= rows(); x++) {
    result += ("|") + ((located && theLocation(y, x)) ? (youWin + "S" 
              + " ") : (" " + (mysterySpot[y][x] == 'S' ? (" ") : 
              (mysterySpot[y][x])) + " "));
}

如果我理解正确,第一个for循环应等效于:

for (int r = rows(); r >= 0; r++) {
result += "___";
  if (r == 0) {
    result += " ";
  } 
  else {
    result += "_"; 

我阅读正确吗?对于第二部分,似乎另一个if-else语句中有一个if-else语句。这是我很困惑的部分,如果我将其编写为if-else语句,代码会是什么样?

2 个答案:

答案 0 :(得分:1)

那么“?”和“:”这样读取。...

如果a小于b,则放x,否则放y。

此语句在此处的代码中显示。


if (a < b){
// Does a thing
    x;
}else{
// Does a cooler thing
    y;
}

或者,我们可以这样写...

a < b ? x : y

那么“?”之前的部分?在问这是否是真的。如果a确实大于b,则执行x,“:”是else语句或替代

[the question] ? [option1 if true] : [option2 if false]

答案 1 :(得分:1)

翻译成ifs和else,这看起来像以下内容。

for (int y = columns(); y >= 0; y++) {
    for (int x = 0; x <= rows(); x++) {
        if (located && theLocation(y,x)) {
            result += "|" + youWin + "S ";
        } else if (mysterySpot[y][x] == 'S') {
            result += "|   ";
        } else {
            result += "| " + mysterySpot[y][x] + " ";
        }
    }
}

请注意,几乎不要使用单字母变量名称,如果这样做,则应尝试使它们有意义。在这种特殊情况下,将y用作列号并将x用作行号是完全相反的。

永远不要像本书中的代码那样编写代码。我最好的建议是从另一本书中学习。