ArrayList警告 – 警告:未经检查的调用添加(E),也不会运行文件

我一直试图让这段代码适合现阶段的感觉。 它是为了计算一个范围内的素数,我写了一个方法来打印它们。 不幸的是,代码不会编译,引用警告:

“警告:[未选中]未选中调用添加(E)作为原始类型java.util.List的成员”

– 我从谷歌搜索中了解到这个警告是因为没有声明你的erray中应该包含哪些类型的值,但是我已经这样做了,当我尝试在我的上使用.add()函数时,似乎只出现了错误。数组列表。

当我尝试运行它时,它会给出一个更可怕的错误“静态错误:未定义的名称’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(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's 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 } 

改变这一行

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

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

这将消除警告。


奖励 – 您可能希望在print方法中使用增强的for循环作为替代方法:

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

您已将primeNumbers标记为无类型List,但随后创建了一个Integer的ArrayList。 将primeNumbers的声明更改为:

 private List listOfPrimeNumbers; 

你用来将所有isPrimeNumber设置为true的for循环不起作用,条件应该是i<=initialCapacity或甚至更好地使用:

 Arrays.fill(isPrimeNumber, true); 

在你的打印方法中,我不打算使用迭代器并跟踪int i,只需使用普通for循环。

在不知道用于构建代码的命令然后尝试运行它的情况下,很难诊断出运行时错误。 确保您的命令窗口与.class文件位于同一目录中。