为什么我在这个程序中出错?
如果我将中间运算符更改为负值(如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
答案 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)
在这里,因为+运算符和++运算符具有相同的优先级(类似地,-和-具有相同的优先级。)因此,+++和---会给出错误,因为它将被分解为'+'和' ++”(“-”和“-”)。
要解决此错误,我们可以使用+(++)。
希望有帮助。