Java (a+;+;+;+;+;b)不';当(a+;+;-+;+;b)工作时,它不工作

Java (a+;+;+;+;+;b)不';当(a+;+;-+;+;b)工作时,它不工作,java,prefix,postfix,Java,Prefix,Postfix,为什么我会在这个程序中出错 如果我像这样将中间运算符更改为减号(a++-++b),则它执行时没有任何错误: class Demo { public static void main(String []args){ int a=10; int b=20; System.out.println (a+++++b); } } 减号之所以有效,是因为它被标识为一个独立于加法序列的运算符。然而,加法似乎变成了一组运算符。如果您只

为什么我会在这个程序中出错

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

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

        int a=10;
        int b=20;

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

     }
}

减号之所以有效,是因为它被标识为一个独立于加法序列的运算符。然而,加法似乎变成了一组运算符。如果您只是在加法符号之间添加一个空格,它应该可以正常工作,因为它将单独识别加法运算符。。例如System.out.println(a+++++b)

//输出
三十一

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

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

(a+++++b)
作为

但是,解析器将其视为

(a++++ +b)
因此,它抛出了一个编译错误,因为++操作符需要一个变量,但它得到了一个++,这是一个值

(a++-++b);
解析器知道,int上没有+-或-+运算符,因此它可以在(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;但这是一种糟糕的样式,因为您必须在head中包含运算符优先级的详细信息

是允许+++b,还是允许a++

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

-> a++++;
|  Error:
|  unexpected type
|    required: variable
|    found:    value
|  a++++;
|  ^-^
不。为什么不呢?你可以说,它是(a+++++;或+++(++b);但这两个步骤都包括两个步骤,递增1并返回一个值,所以

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

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

考虑到这一点,对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这样的负值。

这里,+运算符和++运算符具有相同的优先级(类似地,-和-,具有相同的优先级)。所以,+++和-,给出一个错误,因为它将被分为“+”和“++”(“-”和“--”)

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


希望对您有所帮助。

正确设置代码段的格式,然后添加有关遇到的问题的详细信息编译器错误、运行时错误、完整消息、预期结果、收到的结果。
-++
+-
也不是有效的运算符。
a=100
b=0
c=a++;
c=++b;
-> c=a++ + ++b;
|  Variable c has been assigned the value 101
c=a--- - --b;