【问题标题】:Am i wrong or the result is wrong?我错了还是结果错了?
【发布时间】:2020-10-08 15:36:57
【问题描述】:

我有一个 java 例子,我知道这很简单,但我只是一个初学者。第 8 行和第 9 行有问题:

while (tailFeathers > 1){
System.out.print(--tailFeathers + " ");}

我认为它会打印“5 2”,因为 1 不大于 1,但答案是 E,即“5 2 1”。你能给我解释一下吗?我是错的还是奇怪的结果?非常感谢。

【问题讨论】:

  • 请将代码和结果作为文本粘贴到问题中。作为图像很难阅读。
  • 如果 tailFeathers 为 2, 2 > 1,并且由于 --tailFeathers 将打印 1。
  • @lucumt 这是一个测验,它不是正确的。
  • @S.L.Barth-ReinstateMonica 这不是默认情况下的情况,它是一个情况 (default),然后是另一个情况 (case 3)。这就是您需要在cases 之间使用breaks 的原因。

标签: java if-statement switch-statement


【解决方案1】:

紧跟逻辑

您似乎同意第 7 行的观点。屏幕的输出是"5 "

此时tailFeathers = 3

3>1 所以进入循环,使用前先递减tailFeathers

所以屏幕输出现在是"5 2 "

此时tailFeathers = 2

2>1 所以进入循环,使用前先递减tailFeathers

所以屏幕输出现在是"5 2 1"

此时tailFeathers = 1

1=1不要进入循环

屏幕输出为"5 2 1"

【讨论】:

    【解决方案2】:

    --counter => counter = counter-1。 它的值会立即更新,这就是 pre 运算符的工作方式。 另外,请记住最后一个 while 循环,因此它会递归打印,直到条件变为 false。

    【讨论】:

      【解决方案3】:

      我认为它会打印“5 2”,因为 1 不大于 1,但答案是 E,即“5 2 1”。能给我解释一下吗?

      您认为tailFeathers==1时不会输入循环体是正确的,但是您误解了将打印的内容。

      这是循环:

      while (tailFeathers > 1) {
           system.out.print(--tailFeathers + " ");
      }
      

      假设循环体被输入是因为tailFeathers==2> 1system.out.print(--tailFeathers + " ") 语句将以明确的顺序执行几件事:

      1. 它将减少tailFeathers的值(即,它将设置tailFeathers=1),
      2. 它将调用库函数来创建一个新的String"1",以表示tailFeathers的新的十进制值,
      3. 它将字符串"1"与字符串" "连接起来创建一个新的字符串"1 ",最后,
      4. 它将调用system.out.print("1 ")

      这里的关键概念是--tailFeathers 的含义。该表达式的值是tailFeathers 的值变量被递减之后。

      如果您将其更改为 tailFeathers--,您会得到不同的结果。在这种情况下,表达式的值是 tailFeathers 在其被递减之前 的值(即上面我的示例中的 2。)

      记住这一点的方法是从左到右阅读:

      • --t 表示先递减t,然后使用t 的新值,然后
      • t-- 表示首先使用t 的原始值,然后一段时间后递减t

      【讨论】:

        猜你喜欢
        • 2011-07-20
        • 1970-01-01
        • 2011-01-11
        • 2018-12-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多