Java ArrayList警告-警告:[未选中]未选中的添加(E)调用,文件也不会运行
我一直在努力让这段代码在这个阶段能够正常工作。这意味着要计算一个范围内的素数,我已经写了一个方法来打印它们。不幸的是,代码将无法编译,并引用以下警告: “警告:[未选中]未选中将(E)添加为原始类型java.util.List的成员的调用” --我从谷歌上了解到,这个警告是因为没有声明您的勘误表中应该包含哪些类型的值,但我已经这样做了,而且这个错误似乎只有在我尝试在数组列表上使用.add()函数时才会出现 当我试着运行它时,它会给出一个更可怕的错误 “静态错误:未定义的名称‘素数’” 我想我在这一点上已经是代码盲了,尽管做了几次尝试,还是无法发现我做错了什么Java ArrayList警告-警告:[未选中]未选中的添加(E)调用,文件也不会运行,java,Java,我一直在努力让这段代码在这个阶段能够正常工作。这意味着要计算一个范围内的素数,我已经写了一个方法来打印它们。不幸的是,代码将无法编译,并引用以下警告: “警告:[未选中]未选中将(E)添加为原始类型java.util.List的成员的调用” --我从谷歌上了解到,这个警告是因为没有声明您的勘误表中应该包含哪些类型的值,但我已经这样做了,而且这个错误似乎只有在我尝试在数组列表上使用.add()函数时才会出现 当我试着运行它时,它会给出一个更可怕的错误 “静态错误:未定义的名称‘素数’” 我想我在这
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'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
}
import java.util.*;
公共类素数{
private List ListOfPrimeNumber;//为ArrayList添加成员变量
公共静态void main(字符串args[]){
素数primeNumberList=新素数(50);
primeNumberList.print();//使用新的打印方法
}
公共素数(int initialCapacity){
listOfPrimeNumbers=newArrayList(initialCapacity/2);//initialCapacity/2是一个简单的上限(如果不是很紧的话)
long numberOfPrimes=0;//将变量numberOfPrimes初始化为0
int start=2;
布尔值[]isPrimeNumber=新布尔值[initialCapacity+1];
对于(inti=0;i==initialCapacity;i++){//将布尔数组中的所有值设置为true
isPrimeNumber[i]=真;
}
while(启动!=初始容量)
{
if(isPrimeNumber[开始])
{
添加(开始);
//添加到数组列表
numberOfPrimes++;
用于(int i=启动;启动<初始容量;i+=启动)
{
isPrimeNumber[i]=假;
}
}
启动++;
}
}
public void print()//添加此打印输出函数
{
int i=1;
迭代器迭代器=listOfPrimeNumbers.listIterator();
while(iterator.hasNext())
{
println(“第“+i+”个素数是:“+iterator.next()”);
i++;
}
//或者只是System.out.println(ListofPrimeNumber);,让ArrayList的toString完成工作。我认为它将采用[a,b,c,…,z]格式
}
public List getPrimes(){return listOfPrimeNumbers;}//一个简单的getter也不是一个坏主意,尽管我们还没有使用它
}
更改此行
private List listOfPrimeNumbers; //add a member variable for the ArrayList
到
您已将素数标记为非类型化列表,但随后创建了整数数组列表。请将素数声明更改为:
private List<Integer> listOfPrimeNumbers;
在您的print方法中,我不需要麻烦使用迭代器并跟踪int I,只需使用普通for循环即可
如果不知道您正在使用什么命令来生成代码,然后尝试运行它,则很难诊断您的运行时错误。请确保您的命令窗口与.class文件位于同一目录中。事实上,它应该进行编译-除了完整的类文件外,您只会收到一条警告。相同的代码不会警告meIt will com但是给我一个警告,是的!:)
public void print() {
int i = 1;
for (Integer nextPrime:listOfPrimeNumbers) {
System.out.println("the " + i + "th prime is: " + nextPrime);
i++;
}
}
private List<Integer> listOfPrimeNumbers;
Arrays.fill(isPrimeNumber, true);