2014-01-14 2 views
1

У меня возник вопрос, который я не буду вдаваться в подробности, потому что мне удалось правильно его закодировать в массив. Или, по крайней мере, закодируйте его в массив, который работал правильно; следующим образом:Использование списка в java

static double getSolution (int n) 
{ 
    double [] w = new double [n]; 
    w[0] = -1; 
    for (int i = 0; i < n; i++) 
    { 
     w[i + 1] = w[i] + ((2/3*n) * Math.cos (w[i]));   
    } 
    double x = w[n]; 
    return x; 
} 

Я тогда узнал, что я не должен был закодировали его, используя массив, но вместо того, чтобы с помощью списка. Я попытался это, и следующий код, который я придумал:

static double getSolution1 (int n) 
{ 
    List <double> w = new ArrayList <double>(); 
    w[0] = -1; 
    for (int i = 0; i < n; i++) 
    { 
     w[i+1] = w[i] + ((2/3*n) * Math.cos (w[i])); 
    } 
    return w[n]; 
} 

Теперь я знаю, что это неправильно от начала, но может кто-нибудь сказать мне, что я сделал не так и где? Также; при попытке компиляции я получаю сообщение об ошибке «не может найти список классов символов».

EDIT 1: Я попытался изменить линию на Double вместо double, многие люди предложили, я все равно получаю ту же самую компиляционную ошибку.

EDIT 2: Итак, если бы я должен был преобразовать массив в список, каков будет правильный код? Потому что я действительно смущен тем, как я должен это писать.

+0

"не может найти символ - список класса" <- Вы * отсутствует * импорт для [Список] (http://docs.oracle.com/javase/7/docs/api/java/util /List.html) (то есть 'java.util. *') И не использовать FQN (полностью квалифицированное имя). – user2864740

+0

@ user2864740 проверить мои ans –

+0

@ user2864740 eww 'java.util. *'. Импорт зверей отвратительный (я чувствую). Скорее, используйте IDE, которая будет автоматически импортироваться для вас. – Justin

ответ

1

Использование

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

вместо

List <double> w = new ArrayList <double>(); 

двойной примитивный тип, но список будет принимать только объект так, то будет использовать Double. Double - это обертка поверх примитивного типа double.

Edit:

w[0] this is not list operation so if you are using this type of operation to access element you should use array. else mperform add remove operations 

Контрольный список операций: http://docs.oracle.com/javase/6/docs/api/java/util/List.html

вы должны объявить оператор импорта для пакетов

import java.util.List; 
import java.util.ArrayList; 


так Ваш метод становятся
Использование массива

static double getSolution1 (int n) 
{ 
    Double[] w = new Double[n+1]; 
    w[0] = -1d; 
    for (int i = 0; i < n; i++) 
    { 
     w[i+1] = w[i] + ((2/3*n) * Math.cos (w[i])); 
    } 
    return w[n]; 
} 

Использование списка

static double getSolution1(int n) { 
    List<Double> w = new ArrayList<Double>(); 
    w.add(-1d); 
    for (int i = 0; i < n; i++) { 
     double d = w.get(i) + ((2/3 * n) * Math.cos(w.get(i))); 
     w.add(d); 
    } 
    return w.get(n); 
} 
+0

Вы по-прежнему получаете ошибку: 'can find find symbol - class List' – Justin

+0

Да, я все еще получаю сообщение об ошибке« cannoy find symbol - class List ». – user3013480

+0

@ user3013480 Мой ответ единственный (на данный момент), который решает, что – Justin

1

Дженерики предназначены для использования в классах, а не для примитивных типов.

Просто измените код, чтобы использовать Double вместо double:

List <Double> w = new ArrayList <Double>(); 
1

Вы Shoule есть

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

вместо

List <double> w = new ArrayList <double>(); 

Поскольку коллекция структура не позволяет примитивный тип данных , он принимает только классы Wrapper e примитивный тип данных.

+0

Не только рамки коллекции, но каждый класс/интерфейс с использованием генериков –

+0

@LuiggiMendoza, это тоже правильно. –

0

В Java каждый тип первичных данных имеет тип объекта. , например.

int --> Integer 
double --> Double 
byte --> Byte 

Если вы хотите поместить свои первичные данные в коллекцию, вам необходимо объявить сбор с соответствующим типом объектов этого числа.

Так,

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

будет работать.

И

double d = 12.34; 
w.add(d); 

также будет работать. Java автоматически преобразует d в двойной тип. Механизм называется автоматическим боксом.

0

Вы получаете эту ошибку, потому что не импортировали интерфейс List и класс ArrayList. Вставьте этот код в начале файла:

import java.util.List; 
import java.util.ArrayList; 

В качестве альтернативы, вы можете сделать это (не импорт необходимости):

static double getSolution1 (int n) 
{ 
    //If you do the import, remove the java.util. that follows. 
    //This also fixes the other errors. 
    java.util.List <Double> w = new java.util.ArrayList<Double>(); 
    //w[0] = -1; //this does not work; a list is not an array. 
    w.add(-1.0); 
    for (int i = 0; i < n; i++) 
    { 
     //w[i+1] = w[i] + ((2/3*n) * Math.cos (w[i])); this does not work either; 
     //             just add the result to the list. 
     w.add(w.get(i) + ((2/3*n) * Math.cos (w.get(i)); 
    } 
    return w.get(n); 
} 

Вот объяснение изменений, которые я сделал (кроме java.util.List или import s):

Для общего типа double не работает. Вам необходимо использовать Double (класс обертки для double), поэтому код изменяется от List<double> до List<Double>. Это необходимо для Java из-за Type Erasure. Во время компиляции общий тип удаляется, а List обрабатывается так, как если бы это был список объектов. Поскольку примитивы не являются объектами, нам нужен класс-оболочка.

Вместо использования w[0]=-1;, мы используем w.add(-1);. w - это объект, а не массив, доступ к которому невозможен с помощью [number]. К счастью, List имеет несколько полезных методов; а именно List#add() и List#get(). Вызов w.add(-1) добавляет -1 в конец списка.

Для части w[i+1] в цикле мы просто добавляем новый элемент, используя w.get(i), а не w[i].

+0

w [0] этот тип операции не выполняется в списке –

+0

@AshishAggarwal Я знаю; Я специально сказал, что не исправил ошибки. Я исправил их сейчас. Кроме того, обратите внимание, что мой ответ был единственным, кто заметил фактическую проблему, о которой говорил ОП. Вам действительно нужно обратить внимание на ответы, и полезно отметить downvote, пока у автора не будет возможности редактировать. – Justin

+0

Нигде в моих заметках из моего курса не говорится об импорте или java.util.list; есть ли другой способ сделать это, когда я укажу его как класс или что-то еще? – user3013480

0

Вы должны использовать только список, в котором данные не всегда являются фиксированным. Они добавляют дополнительные накладные расходы по сравнению с обычным массивом.

Чтобы создать объект List, используйте реализацию типа ArrayList.

ArrayList<Double> w = new ArrayList<Double>(); 

Вы также не имеете доступа к списку через [].

w.get(index) // Gets value. Throws exception if index is greater than or equal to size() or less than 0. 
w.add(index, value); // Adds value 
w.set(index, value); // Replaces value 
Смежные вопросы