可能有损转换从long到int

时间:2015-06-30 17:32:12

标签: java exception

我得到了"不兼容的类型:可能会失去从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;
   }

2 个答案:

答案 0 :(得分:1)

这是因为您使用long作为数组的大小。

Java支持数组达到某个限制,大约为Integer.MAX_VALUE - x(请参阅this),因此不允许使用long来指定大小。

从JLS引用:

  

数组必须用int值索引...尝试访问具有长索引值的数组组件会导致编译时错误。

答案 1 :(得分:0)

数组长度和索引必须始终为int s。您不能创建长度为long的数组,也不能引用数组中的long索引。