带数组的Java方法

时间:2013-12-01 19:17:44

标签: java arrays static-methods

我有一个问题:编写一个方法,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;   
}

5 个答案:

答案 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应该有多大,所以您有以下几种选择:

  1. ell分配为与a相同的尺寸,并在返回前修剪它。
  2. 使用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会更好。