我正在尝试一起添加到列表中。 (我知道我的班级名称不适合它,但无论如何)
我面临的问题是我有代码的地方:
C[i] = v[i] + x[i];
它说表达式的类型必须是一个数组但是已经解析成一个变量.....任何建议如何绕过它并且能够使用方法将两个数组加在一起?
import java.util.Arrays;
public class reverse {
int n;
double [] arr;
public reverse( int input){
n =input;
arr = new double[n];
}
public double[] get_array(){
for (int i = 0; i < n; i ++)
{
arr[i] = i + 1;
}
return arr;
}
public reverse add(reverse v, reverse x){
reverse C = new reverse(3);
for( int i = 0; i < n; i++){
C[i] = v[i] + x[i];
System.out.println(C[i]);
}
return C;
}
public static void main(String[] args){
reverse A = new reverse(5);
reverse B = new reverse(5);
System.out.println( Arrays.toString(A.get_array()));
System.out.println( Arrays.toString(B.get_array()));
}
}
答案 0 :(得分:0)
要从v
和x
拨打get_array()
来获取各个数组。此外,按照惯例,方法get_array()
应为getArray()
,而类reverse
应为Reverse
。要正确调整C
的大小,请获取v
和x
的长度,然后选择max
(或min
,如果您只想要出现在两边的元素)。迭代并添加值,将结果存储在C
的数组中。像,
public reverse add(reverse v, reverse x) {
reverse C = new reverse(Math.max(v.n, x.n));
double[] vals = C.get_array(), left = v.get_array(), right = x.get_array();
for (int i = 0; i < C.n; i++) {
if (i < left.length && i < right.length) {
vals[i] = left[i] + right[i];
} else if (i < left.length) {
vals[i] = left[i];
} else {
vals[i] = right[i];
}
}
return C;
}
如上所述,如果您只想添加双方存在的元素,则可以简化代码。使用Math.min
获取正确的长度,您可以消除数组长度检查。像,
public reverse add(reverse v, reverse x) {
reverse C = new reverse(Math.min(v.n, x.n));
double[] vals = C.get_array(), left = v.get_array(), right = x.get_array();
for (int i = 0; i < C.n; i++) {
vals[i] = left[i] + right[i];
}
return C;
}
答案 1 :(得分:0)
问题在于,通过说reverse C;
,您没有创建数组,因此您无法使用C [i]。
public reverse add(reverse v, reverse x){
reverse C = new reverse(3);
for( int i = 0; i < n; i++){
//Replace C with C.arr
C.arr[i] = v[i] + x[i];
System.out.println(C.arr[i]);
}
return C;
}
此处C.arr
指的是C
arr
字段
同样按惯例,类型名称应以大写字母
开头答案 2 :(得分:0)
C,v和x是Reverse类型的对象,而不是数组。您需要访问对象中的数组。
C.arr[i] = v.arr[i] + x.arr[i];
System.out.println(C.arr[i]);
此外,您不允许它们可能不是相同大小的数组。您可能需要考虑到这一点。