当前位置: 首页 > 面试题库 >

ArrayList警告-警告:[unchecked]对add(E)的未经检查的调用,也不会运行文件

令狐宣
2023-03-14
问题内容

我一直在尝试使此代码在这个阶段适合年龄。它的目的是计算一个范围内的素数,我已经编写了一种打印它们的方法。不幸的是,该代码由于警告而无法编译:

“警告:[未经检查]以未经检查的方式将add(E)作为原始类型java.util.List的成员进行调用”

-我从谷歌搜索中了解到,该警告不是为了声明您应该输入哪种类型的值,但是我已经这样做了,并且该错误似乎仅在尝试在我的.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<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
}

问题答案:

更改此行

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++;
  }
}


 类似资料:
  • 问题内容: 令人反感的代码 错误: 不确定这样的错误需要多少信息。 问题答案: 问题在于上面的代码没有使用泛型。 以下将起作用: (如果为,则为要保存的元素的type参数)内部的类型名称告诉编译器应期望的对象类型。 如果尝试添加一个指定类型的对象(例如,在这种情况下,尝试添加和),则会发生编译时错误,这表明正在使用一种非预期类型的​​对象添加。 就是说,应该尽量不要使用该类。为了更多的目的,例如从

  • 我不明白为什么我收到以下代码的警告: 未选中对<code>isAssignableFrom(类)的调用 当我使用< code>isInstance方法时(根据我的理解,它提供相同的结果),我没有得到警告:

  • 问题内容: 奇怪的情况-以下是代码: 构建项目时(在项目属性中带有编译器选项),我得到一个警告: 警告:[unchecked]未经检查的强制转换 ArrayList list =(ArrayList)obj [1]; 必需: 找到ArrayList :对象 但是以相同的方式转换String是可以的。这里有什么问题? 问题答案: 这是因为编译器无法在列表级别验证内部类型,因此您需要首先验证列表。以及

  • 其中T是类型变量: java:93:警告:[rawtypes]发现原始类型:可比较的私有类Customer extends JPanel实现可比较{^ 泛型类可比性缺少类型参数,其中T是类型变量: 6个警告

  • 假设我有一个map。现在我只想从中获取条目并创建一个新的map与这些条目。 我正在尝试做以下事情: 这似乎可行,但我得到了一个警告:类型模式(String,Int)中的非变量类型参数字符串未选中,因为它已被擦除消除。 我怎样才能摆脱警告?