我希望输入一个int
和另一个long
ex:1和1000000000,现在我想创建一个大小为1000000000的数组。然后在数组的每个索引处存储int val,例如:arr[100000000] = 4
。
当我尝试这样做时,Netbeans在这一行中向我显示错误:
arr = new long[y+1]` and `arr[j] = 0`
“从long到int的可能有损转换”。 这是我的代码: -
public static void main(String[] args) throws IOException
{
BufferedReader s = new BufferedReader(new InputStreamReader(System.in));
String[] xe = s.readLine().split(" ");
int x = Integer.parseInt(xe[0]);
long y = Long.parseLong(xe[1]);
long []arr;
arr = new long[y+1];
for(long j=0;j<=y;j++)
arr[j] = 4;
}
答案 0 :(得分:9)
Array index是Java中的一个整数,编译器会给你建议。因此,最大数组大小(近似)Integer.MAX_VALUE
。对于更大的数组,您应该使用ArrayList。
绕过这个污垢&快速
arr = new long[(int)y+1];
答案 1 :(得分:1)
您需要将y和j转换/转换为int。 当你只是添加1时,你的增量变量也不会很长。
答案 2 :(得分:1)
数组的大小只能是int
。那就是你,不能创建大于Integer.MAX_VALUE(2147483647)的数组,可能少一些元素(取决于VM)。您可以将值转换为int
arr = new long[(int)(y+1)];
但是当y
的值实际上大于允许的最大大小时,这会产生无效结果。
答案 3 :(得分:1)
您无法创建超过2 ^ 31-1个条目的数组,因此在执行此操作时应使用int
值(编译器只是警告您大小将被截断) long
到int
)。 1000000000小到足以容纳int
,因此您基本上没有理由使用long y
来存储此值。
根据您的描述,数组本身被指定存储int
值,因此它不需要是long
值的数组。
简而言之,您可以 将代码中的每个long
更改为int
。
答案 4 :(得分:1)
我认为你对这里的类型转换有一些误解。在Java中,如前所述,允许向下转换,你可以将其向下转换为整数
arr = new long[(int)(y+1)];
但是这里的主要问题是数组分配应该采用整数值,以便可以分配相同数量的同类空间。 如果你想要更多的空间而不是整数范围那么你应该使用可动态增长的数组ArrayList,因为如果我们给用户承担很大的责任来声明一个大量的数组内存,那么我们的系统可能会耗尽内存,因为数组是静态内存分配数据结构。
也是如此arr[j]=4;
应该是:
arr[(int)j]=4;
答案 5 :(得分:0)
在静态数组中,我们不能使用长数据类型值来分配索引位置。 1.在 for/while/do while 循环中将 long 转换为 int。 2. 类型转换 arr[(int)i] 以消除错误