Подтвердить что ты не робот

Предупреждение предупреждения ArrayList: [unchecked] непроверенный вызов для добавления (E), также файл не запускается

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

"предупреждение: [unchecked] unchecked call для добавления (E) в качестве члена исходного типа java.util.List"

- Я понимаю, что это предупреждение предназначено для того, чтобы не объявлять, какие типы значений должны быть в вашей эре, но я сделал это, и ошибка возникает, когда я пытаюсь использовать .add() функции в моем списке массивов.

и когда я пытаюсь запустить его, он дает несколько более страшную ошибку "Статическая ошибка: Undefined имя" PrimeNumbers "

Я думаю, что на данный момент я оставил код-слепой, и, несмотря на несколько попыток, я не могу понять, что я делаю неправильно.

import java.util.*;

public class PrimeNumbers { 

    private List listOfPrimeNumbers;  //add a member variable for the ArrayList
    public static void main(String args []){    
      PrimeNumbers primeNumberList = new PrimeNumbers(50);
      primeNumberList.print();  //use our new print method
    }

public PrimeNumbers (int initialCapacity) {
    listOfPrimeNumbers = new ArrayList<Integer>(initialCapacity/2);  //initialCapacity/2 is an easy (if not tight) upper bound
    long numberOfPrimes = 0; //Initialises variable numberOfPrimes to 0
    int start = 2;
    boolean[] isPrimeNumber = new boolean[initialCapacity + 1];

    for (int i=0;i==initialCapacity;i++) {//setting all values in array of booleans to true
    isPrimeNumber[i] = true;
    }
     while (start != initialCapacity)
        {
          if (isPrimeNumber[start])
          {
            listOfPrimeNumbers.add(start);
            //add to array list
            numberOfPrimes++;
            for (int i = start; start < initialCapacity; i+=start)
            {
              isPrimeNumber[i] = false;
            }
          }
          start++;
        }
    }

 public void print()  //add this printout function
 {
     int i = 1; 
     Iterator iterator = listOfPrimeNumbers.listIterator();
     while (iterator.hasNext())
     {
          System.out.println("the " + i + "th prime is: " + iterator.next());
          i++;
     }
     //or just System.out.println(listOfPrimeNumbers);, letting ArrayList toString do the work.  i think it will be in [a,b,c,..,z] format
 }

 public List getPrimes() {return listOfPrimeNumbers;} //a simple getter isnt a bad idea either, even though we arent using it yet
}
4b9b3361

Ответ 1

Измените эту строку

private List listOfPrimeNumbers;  //add a member variable for the ArrayList

к

private List<Integer> listOfPrimeNumbers;  //add a member variable for the ArrayList

Это устранит предупреждение.


Бонус - вы можете использовать расширенный цикл for внутри метода print в качестве альтернативного подхода:

public void print() {
  int i = 1; 
  for (Integer nextPrime:listOfPrimeNumbers) {
      System.out.println("the " + i + "th prime is: " + nextPrime);
      i++;
  }
}

Ответ 2

Вы декалировали primeNumbers как нетипизированный список, но затем создали ArrayList из Integer. Измените объявление primeNumbers на:

private List<Integer> listOfPrimeNumbers; 

Цикл for, который вы используете, чтобы установить все isPrimeNumber в true, не работает, условие должно быть i<=initialCapacity или даже лучше использовать:

Arrays.fill(isPrimeNumber, true);

В вашем методе печати я бы не стал использовать итератор и отслеживать int i, просто используйте обычный цикл.

Не зная, какую команду вы используете для сборки кода, а затем попытайтесь запустить его, трудно диагностировать свою ошибку времени выполнения. Убедитесь, что ваше командное окно находится в том же каталоге, что и ваш .class файл.