我有一个问题:编写一个方法,double [] threshold(double [] a,double x),它接受一个数组a,一个double,一个double,x,并返回一个只包含这些值的数组一个大于或等于x的。我知道我的代码是错的,但似乎无法修复它。 请帮忙!
public static double[] threshold(double[] a, double x){
double[] ell;
//ell = new double[];
for (int i = 0 ; i < a.length; i++){
if (a[i] >= x) {
ell.add(a[i]);
}
}
System.out.println(ell);
return ell;
}
答案 0 :(得分:2)
将ell定义为
List<Double> ell = new ArrayList<Double>();
double[] ell
是一个数组,但您没有ell.add
。但是,如果您使用ArrayList
,则还应将其返回。或者,如果要使用并返回数组,则不需要使用ell.add()
。
答案 1 :(得分:1)
你其实非常接近。首先,尽管这不是超级有效的,但我会遍历a
并计算有多少数字大于或等于x
。然后拨打ell = new double[sizeOfArray]
。最后,再次循环a
,这次添加您想要的元素。要添加到数组,请调用ell[index] = number
。
答案 2 :(得分:0)
您没有为ell
分配内存(并且数组没有add
方法)。
由于您事先并不知道ell
应该有多大,所以您有以下几种选择:
ell
分配为与a
相同的尺寸,并在返回前修剪它。ArrayList
并将其转换为最后的数组。答案 3 :(得分:0)
<强>原因:强>
您不能对数组使用add方法。
<强>解决方案:强>
您有两种方法可以解决问题,使用原始数组方法或对象方法
选项1.使用原始数组方法:
正如您所尝试的那样,但是您忘记在使用它之前对数组进行实例化,一旦使用特定数量的元素进行实例化,那么您必须使用运算符[]来访问数组中的元素。阵列。
所以,你必须使用类似的东西:
double[] ell = new double[<numElements>];
其中numElement应该至少更大作为一个长度参数,以确保所有元素都进入ell数组,如果所有元素都大于x参数,这将避免IndexOutOfBoundsException。
然后你必须使用符号[i]来访问每个元素,而不是add()方法,它只适用于对象方法。
ell[i]
选项2.使用对象方法:
您应该使用实现add()方法的集合对象来添加要过滤的元素。完成分类循环后,您可以将内容作为数组获取并返回。 你可以替换:
double[] ell;
通过实现add()方法的集合类型对象,如:Vector或ArrayList,它们在AbstractList的类层次结构中,当然你可以使用另一个高级集合,但这两个是最简单的,然后使用你可以编码的矢量类:
Vector ell = new Vector();
然后,在循环结束时,您可以使用Vector类的copyInto方法获取向量中的元素作为原始数据的数组,如:
double[] result;
ell.copyInto(result);
答案 4 :(得分:0)
在初始化数组之前,必须知道[]结构中数组的大小。在未知的情况下,您可以使用LIST,ARRAY或VECTOR等对象。
但在这种情况下,首先需要测量数组的大小。然后使用第二个for-lus,您可以找到所需的索引并将其设置在新阵列上。虽然可以改进,但必须采取这种方式。
是的,这对长阵列来说会有问题。所以,如果你使用LIST或VECTOR会更好。