(a +++++ b)不起作用,而(a ++ - ++ b)起作用

时间:2018-03-03 03:27:13

标签: java prefix postfix

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

如果我将中间运算符更改为负值(如class Demo { public static void main(String []args){ int a=10; int b=20; System.out.println (a+++++b); } } ),则执行时没有任何错误:

In [263]: np.savetxt('test',column)
....
ValueError: Expected 1D or 2D array, got 0D array instead

5 个答案:

答案 0 :(得分:1)

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

(a+++++b)

作为

(a++ + ++b)

但是,解析器将其视为

(a++++ +b)
因此,它正在抛出一个编译错误,因为++运算符期望一个变量,但它得到的是一个值,这是一个值。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

public class Demo {
    public static void main(String[] args) {
        int a=10;
        int b=20;
        System.out.println(a++ + ++b);
    }
}

//输出
31

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

答案 3 :(得分:0)

对于

(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或+ + + b?好吧,它被解释为c = (一++)+ B;但它的风格很糟糕,因为你必须掌握运算符优先级的详细信息。

允许使用++++,还是++++?

-> ++++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);什么得到了回报?

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

和++ ++ ++ b;工作:

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

但是因为它很少使用,并且插入两个空格并不是一件大事,而且读者更友好,无论如何,我们应该忍受不一致,+++++被拒绝,而a ++ - +允许使用+ b,这不会使后者成为一个很好的读表达式。水平空间使代码也能为人类更好地解析,这应该是你主要考虑的问题。

如果你想开车疯狂,请使用

c=a--- - --b;

因为有这个一元 - 这对于产生像-7这样的负值很方便。

答案 4 :(得分:0)

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

要解决此错误,我们可以使用+(++)。

希望有帮助。