我得到了"不兼容的类型:可能会失去从long转换为int"此行中的异常:boolean arr [] = new boolean [limit];我不明白为什么会发生这种情况,因为我将输入值存储为long,如何将其转换为int?
import java.util.*;
import java.io.*;
public class PrimeSieve
{
public static void main (String args [])
{
//getting the number
Scanner x = new Scanner (System.in);
System.out.println("What is your number?");
long limit = x.nextLong();
long count = 0;
//making all the numbers upto the given number prime
boolean arr[] = new boolean [limit];
for ( long i = 2; i <=Math.sqrt(limit); i++)
{
arr[i] = true;
}
答案 0 :(得分:1)
这是因为您使用long
作为数组的大小。
Java支持数组达到某个限制,大约为Integer.MAX_VALUE - x
(请参阅this),因此不允许使用long来指定大小。
从JLS引用:
数组必须用int值索引...尝试访问具有长索引值的数组组件会导致编译时错误。
答案 1 :(得分:0)
数组长度和索引必须始终为int
s。您不能创建长度为long
的数组,也不能引用数组中的long
索引。