2013-12-01 3 views
0

Мне задан вопрос: напишите метод double [] threshold (double [] a, double x), который принимает массив, a, double и double, x, и возвращает массив содержащие только значения a, которые больше или равны x. Я знаю, что мой код неправильный, но не может его исправить. Пожалуйста, помогите!Методы Java с массивами

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

При инициализации вам нужно указать 'ell' размер. – kviiri

ответ

2

Определение откусит, как

List<Double> ell = new ArrayList<Double>(); 

double[] ell является массивом, и вы не имеете ell.add. Однако, если вы используете ArrayList, вы также должны вернуть его. Кроме того, если вы хотите использовать и возвращать массив, вам не нужно использовать ell.add().

+0

[Еще лучше] (http://stackoverflow.com/questions/3383726/java-declaring-from-interface-type-instead-of-class), объявите его как «Список ell;'. –

0

Вы не выделяете память для ell (и массивы не имеют метода add).

Поскольку вы не знаете заранее, насколько большой ell должно быть, у вас есть несколько вариантов:

  1. Предоставлять ell быть такого же размера, как a и обрезать его перед возвращением.
  2. Используйте ArrayList и преобразуйте его в массив в конце.
0

Причина:

Вы не можете использовать метод добавления для массива.

Решение:

У вас есть два пути так решить проблему, используя примитивный подход массива или объекты приближающихся

Вариант 1. Использование примитива массива подхода:

Как вы уже пытались этот подход, но вы забыли экземпляр массива, прежде чем его использовать, как только он будет создан с определенным количеством элементов, тогда вы должны использовать оператор [] для доступа к элементам в массиве.

Таким образом, вы должны использовать что-то вроде:

double[] ell = new double[<numElements>]; 

Где numElement должно быть по крайней мере, больше в качестве параметра элементов а длины, чтобы обеспечить все элементы попадают в массив еП, в случае если все больше х параметра , это позволяет избежать исключения IndexOutOfBoundsException.

Тогда вам нужно получить доступ к каждому элементу, используя нотацию [i] вместо метода add(), который работает только для подхода к объектам.

ell[i] 

Вариант 2. Использование объектов Подход:

Вы должны использовать объект коллекции, который реализует метод Add(), чтобы добавить элементы, которые вы хотите фильтровать. После того, как вы закончите цикл для классификации, вы можете получить содержимое в виде массива и вернуть его. Вы можете заменить:

double[] ell; 

объект типа коллекции, которая реализует метод Add(), как: Vector или ArrayList, которые находятся в иерархии классов для AbstractList, конечно, вы можете использовать другие коллекции уровня Hight, но эти два являются наиболее простым, а затем с помощью Vector класса можно закодировать:

Vector ell = new Vector(); 

затем, в конце цикла, вы можете использовать метод copyInto векторного класса, чтобы получить элементы в векторе в виде массива примитивных данных, что-то вроде:

double[] result; 
ell.copyInto(result); 
1

Вы на самом деле довольно близко. Во-первых, даже если это не очень эффективно, я прохожу через a и подсчитываю, сколько чисел больше или равно x. Затем позвоните ell = new double[sizeOfArray]. Наконец, снова перейдем к a, на этот раз добавив нужные элементы. Чтобы добавить к массиву, вы вызываете ell[index] = number.

0

Размер массива в структуре [] должен быть известен до инициализации массива. В неизвестном случае вы можете использовать объекты типа LIST, ARRAY или VECTOR.

Но в этом случае необходимо сначала измерить размер массива. Затем со вторым for-lus вы можете найти нужные индексы и установить его на новый массив. Хотя это можно было бы улучшить, этот способ должен быть принят.

И да, это было бы проблематично с длинными массивами. Таким образом, было бы лучше использовать LIST или VECTOR.

Смежные вопросы