【问题标题】:post increment of a variable变量的后增量
【发布时间】:2016-10-12 08:38:18
【问题描述】:

谁能解释我为什么会得到

error: unexpected type
  System.out.println("PostFixOperators for b with addition of a "+b++ +=a);
  required: variable
  found:    value

在编译时运行此代码。

public class PostFixOperators {
         static int a, b ;
        public static void main(String arv[]) {
            System.out.println("PostFixOperators for a "+ a++);
            System.out.println("PostFixOpearators for b with addition of a "+b++ +=a);
        }
    }

【问题讨论】:

  • 这不是有效的 Java 语法。你这样发表声明的目的是什么?不清楚你为什么要写类似"..."+b++ +=a
  • 您不能在b++ 上调用+=a,因为b++ 不是变量——它是bb 递增之前的旧值。
  • a++ 的值存储在变量a 中并对b 执行相同操作,然后将其打印出来。

标签: java operators


【解决方案1】:

b++ += a 不会编译,因为b++ 不是变量。就是增量前b的值。

【讨论】:

    【解决方案2】:
    int i, x;
    
    i = 2;
    x = ++i;
    // now i = 3, x = 3
    
    i = 2;
    x = i++; 
    // now i = 3, x = 2
    

    【讨论】:

      【解决方案3】:

      任何 x= 运算符(如 +=、*=、...)等都只是一种快捷方式。

      喜欢:

      a += 5;

      意思:

      a = a + 5;

      换句话说:您需要在该运算符的左侧有 something,您可以为其分配一个值。但是“b++”不是这样的。因为它不再是变量了:

      “b++”是一个返回的表达式。 (与 ++b! 相比!)

      你不能给值赋值!

      【讨论】:

      • 后缀运算符是值,而
      【解决方案4】:

      我们不能不给打印语句中的变量赋值。

      因为这里提出的问题是应该在屏幕上打印什么。

      它是变量的新值还是 它是真还是假,表明分配成功..

      所以你可以这样做..

      a+=b++; System.out.println("为 b 添加一个 "+ a) 的 PostFixOpearators;

      谢谢

      【讨论】:

        【解决方案5】:

        您只能对变量使用赋值运算符。

        1. b 是一个变量
        2. b++ 是一元运算

        但是下面的陈述可能对你有些用处。

        System.out.println("PostFixOpearators for b with addition of a " + (b = b++ + a));
        

        P.S.:在上面的代码中使用 PostFix 是没有用的,因为赋值完成后该值将被覆盖。但是,当您遇到需要以类似方式使用 PreFix 的情况时,您可以使用它。

        【讨论】:

          猜你喜欢
          • 2023-03-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-03-19
          • 2012-03-07
          • 2011-09-18
          • 2012-09-15
          相关资源
          最近更新 更多