计算百分比的方法(来自我不想改变的数组,但它是):
private float values[] = { AGREE, DISAGREE };
private float[] calculateData(float[] data) {
// TODO Auto-generated method stub
float total = 0;
for (int i = 0; i < data.length; i++) {
total += data[i];
}
// 180 is the amount of degrees of the circle - setting it up to half
// circle 360 means full circle
for (int i = 0; i < data.length; i++) {
data[i] = 180 * (data[i] / total);
}
调用方法:
float[] degrees = calculateData(values);
如果我在调用此方法之前记录数组的值,我得到1.0,1.0但是在调用方法之后我得到90.0,90.0为什么?如果我不改变values[]
。
我知道它在这个方法中正在发生,因为当我删除它时,我得到1.0,1.0(我实际想要得到的)
编辑:
感谢您的答案,所以如果我理解正确的话:如果方法的参数被更改,那么当调用方法时,设置为参数的对象也会被更改。
答案 0 :(得分:1)
您正在修改第二个阵列
答案 1 :(得分:1)
数组变量只是引用。如果您将values
作为data
传递,则data
指向与<{1}}相同的相同数组。请考虑以下示例:
values
如果您不想这样,则需要制作副本:
答案 2 :(得分:1)
您正在此处修改数组:data[i] = 180 * (data[i] / total);
您在函数的参数中获取数组的地址,而不是它的副本,因此如果您在函数中修改它,它将修改您在calculateData
函数上挂起时传递的数组。 / p>
答案 3 :(得分:1)
您需要在方法中使用新的数组,例如下面的代码中的newData
,您需要从return
方法中获取该数组:
private float[] calculateData(float[] data) {
float[] newData;
float total = 0;
for (int i = 0; i < data.length; i++) {
total += data[i];
}
for (int i = 0; i < data.length; i++) {
newData[i] = 180 * (data[i] / total);
}
return newData;
}