【问题标题】:(a+++++b) doesn't work, while (a++-++b) works(a+++++b) 不起作用,而 (a++-++b) 起作用
【发布时间】:2018-08-11 07:54:05
【问题描述】:

为什么我在这个程序中得到一个错误?

如果我将中间运算符更改为像这样(a++-++b) 的减号,它正在执行而没有任何错误:

class Demo
{  
    public static void main(String []args){

        int a=10;
        int b=20;

        System.out.println (a+++++b);

     }
}

【问题讨论】:

  • 正确格式化您的 sn-p,然后添加有关您面临的问题的一些详细信息
  • 编译器错误、运行时错误、完整消息、预期结果、接收结果。

标签: java prefix postfix


【解决方案1】:

解析器无法看到您希望它看到的内容。你想让它看到

(a+++++b)

作为

(a++ + ++b)

但是,解析器将其视为

(a++++ +b)

因此,它会引发编译错误,因为 ++ 运算符需要一个变量,但它得到的是一个 ++,这是一个值。

【讨论】:

    【解决方案2】:

    减号之所以有效,是因为它被识别为与一系列加法不同的运算符。然而,这些添加似乎成为一串运算符。如果您只是在加法符号之间添加一个空格,它应该可以正常工作,因为它会单独识别加法运算符.. 例如 System.out.println(a++ + ++b);

    【讨论】:

      【解决方案3】:
      public class Demo {
          public static void main(String[] args) {
              int a=10;
              int b=20;
              System.out.println(a++ + ++b);
          }
      }
      

      // 输出
      31

      我想你可能想要这个,不要使用 +++ 它在 java 中不是有效的运算符, 顺便说一句,您下次应该发布更好的问题。

      【讨论】:

      • -++++- 也不是有效的运算符。
      【解决方案4】:

      对于

      (a++-++b);
      

      解析器知道,在 int 上没有 +- 或 -+ 运算符之类的东西。所以它可以拆分 (a++ - ++b) 中的表达式;

      对于

      (a+++++b);
      

      这可以是 (a+ ++... 或 (a++ +...),但我们先来看一个更简单的表达式:

      int a = 100;
      int b = 0;
      -> int c=a+++b;
      |  Added variable c of type int with initial value 100
      

      期望的结果是什么? a++ +b 还是 a+ ++b?嗯,它被解释为 c= (a++)+b;但这是一种糟糕的风格,因为您必须在头部了解运算符优先级的详细信息。

      是允许 ++++b 还是 a++++?

      -> ++++b;
      |  Error:
      |  unexpected type
      |    required: variable
      |    found:    value
      |  ++++b;
      |    ^-^
      
      -> a++++;
      |  Error:
      |  unexpected type
      |    required: variable
      |    found:    value
      |  a++++;
      |  ^-^
      

      没有。为什么不?你可以争辩说它是 (a++)++;或 ++(++b);但是两者都包括两个步骤,加一并返回一个值,所以对于

      a=100
      b=0
      c=a++;
      c=++b;
      

      我们知道,c 会变成 100 或 1,在一种情况下,返回是在递增 (c=a++) 之前执行,另一种情况是在 (++b) 之后执行;

      现在 ++++b 会发生什么;或 ++(++b);返回什么?

      考虑到这一点,a+++++b 的唯一有效解释是 a++ + ++b;没有a+ ++ ++b,也没有a+ +++ +b。

      还有 a++ + ++b;作品:

      -> c=a++ + ++b;
      |  Variable c has been assigned the value 101
      

      但是由于它很少使用,插入两个空格也没什么大不了的,而且对读者更友好,无论如何,我们应该忍受不一致,a+++++b被拒绝,而a++-+ +b 是允许的,但这不会使后者成为一个很好读的表达式。水平空间也使代码更易于人类解析,这应该是您主要关心的问题。

      如果你想把某人逼疯,请使用

      c=a--- - --b;
      

      因为有这个一元 -,它对于产生负值(如 -7)很方便。

      【讨论】:

        【解决方案5】:

        这里,因为 + 运算符和 ++ 运算符具有相同的优先级(类似地,- 和 -- 具有相同的优先级。)因此,+++ 和 --- 会给出错误,因为它将被分解为 '+' 和 ' ++'('-' 和 '--')。

        为了解决这个错误,我们可以使用+(++)。

        希望对您有所帮助。

        【讨论】:

          【解决方案6】:

          a+++++b ,a++---b,a--------b 和 a--+++b 会抛出错误,因为 + 和 ++ 具有相同的优先级。所以 Java 会抛出+++b、---b、---b 和 +++b 的参数无效。

          【讨论】:

            猜你喜欢
            • 2019-10-27
            • 2018-03-25
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-11-22
            • 2014-03-29
            • 2011-01-14
            相关资源
            最近更新 更多