如果我这样做就行了
elements.getElement(j).getValues().getArray()[i]=(elements.getElement(j).getValues().getVariable(i)-minimum)/(maximum-minimum);
但是,如果我这样做,它告诉我他左侧应该是一个变量
elements.getElement(j).getValues().getVariable(i)=(elements.getElement(j).getValues().getVariable(i)-minimum)/(maximum-minimum);
这两个功能是
double[] getArray(){
return array;
}
double getVariable(int position){
return array[position];
}
我相信前面的东西并不重要,而且工作正常,错误必须在最后。为什么我分配让我们说这样(第一行)它的工作原理,这意味着它是一个变量,但当我尝试分配东西时(第二行)它不起作用。我是多么愚蠢?我错过了什么?
double max=elements.getElement(j).getValues().getVariable(i);
elements.getElement(j).getValues().getVariable(i)=0.0;
答案 0 :(得分:7)
getVariable(i)
绝对不同于
getArray()[i]
第一个返回一个数组,该数组可以由[]
索引,然后用作有效的l值。
后者返回一个值(r值),该值只能在assignemnt的左侧使用。
简单来说,您不能为值赋值,但可以将值赋给由数组和索引指定的内存位置。
0 = 5 // this just won't work
array[0] = 5 // this will, because array[0] is a valid l-value
但是,您可以创建一个可用作设置器的方法。
void setVariable(int position, double value) {
array[position] = value;
}
它会像这样使用
elements.getElement(j).getValues().setVariable(i, value);
答案 1 :(得分:2)
错误不言自明:您无法分配从方法调用返回的结果。
您的第一个代码段可能会对从方法返回的结果进行赋值,但该外观会产生误导:您的第一个代码段会将索引运算符[]
应用于调用方法的数组结果,然后只分配[]
运算符产生的结果。
允许分配[]
返回的内容,因此您的第一个代码段会正确编译并运行。但是,第二个代码段在方法实现中应用[]
,并返回double
。此时,返回的double
与它所来自的数组没有连接,因此分配是非法的。
要解决此问题,请添加其他方法,然后执行内部分配:
void setVariable(int position, double newValue){
array[position] = newValue;
}
...
elements.getElement(j)
.getValues()
.setVariable(i
, (elements.getElement(j).getValues().getVariable(i)-minimum)/(maximum-minimum)
);
答案 2 :(得分:2)
当您访问具有括号字符[i]
的数组(即数组访问表达式)时,Java允许该表达式位于赋值运算符的左侧。
然而,通过调用getVariable(i)
,这是一个方法,并且方法返回的内容始终是值,这在赋值运算符的左侧是不允许的。分配的价值在哪里?我们只有一个值,而不是变量。
如果要避免公开数组,可以创建并使用setVariable
方法在指定索引的列表中写入值。
void setVariable(int position, double value){
array[position] = value;
}
elements.getElement(j).getValues().setVariable(i,
elements.getElement(j).getValues().getVariable(i)-minimum)/(maximum-minimum);
答案 3 :(得分:1)
功能不是替换,所以当你做
时elements.getElement(j).getValues().getVariable(i)
你认为这相当于这个
elements.getElement(j).getValues().getArray()[i]
但事实并非如此。为什么?这很简单;
第一次通话的返回值为VALUE
array[i]
。
在第二种情况下,函数的返回是array
本身,因此您可以为其分配元素并从中读取。
答案 4 :(得分:1)
getVariable()
函数返回value
。您可以在任何可以使用primitive
的地方使用它。所以不要这样:
int x = 7;
你可以这样做:
int x = getVariable(i);
但请注意,您可以不执行此操作:
3 = 7;
由于3是value
,而不是variable
。您的代码正在尝试执行类似的操作,因此您会收到错误。
getArray()
函数有效,因为它返回一个数组,然后使用[]
索引运算符,可以用作变量。
getArray()[i] = 5;
答案 5 :(得分:1)
你可以这样想。
函数的格式为countLetters("hello")
,它们可以直观地将返回值发送到左侧;
int count = countLetters("hello");
<---------------------+
你正在做的是在视觉上碰到括号。
getValue(1) = 5;
<------+X<--+
希望这有助于你记住。
答案 6 :(得分:0)
让我们说这些方法
public int[] getArray(){
return array;
}
public int getValue(int i){
return array[i];
}
您的问题意味着您希望这两者都能正常工作
getArray()[0] = 2;
getValue(0) = 3;
第一个有效,因为如果你放松&#34;电话,你得到
int[] arrayFromMethod = getArray();
arrayFromMethod[0] = 2;
第二个因为获得int
值而不是数组而无法工作。而试图放松它实际上相当于
// pretend array[0] is already 42
42 = 3; // Nope
与
不同int x = array[0];
x = 3;
因为您在说getValue(i) = 3
时内联呼叫,而is_charge
并未分配新变量。即使它确实如此,一旦达到下一个陈述,价值就会消失,所以它没有任何用处。