当我的方法花费很长时间时出现“整数太长”错误(Java)
我有一个按顺序排列的联系人数组,每个对象都有一个名称(字符串)和电话号码(长)。我使用的是一种二进制搜索方法,它返回的联系人索引与用户输入的号码相同。即使我的二进制搜索需要一个较长的as参数,但当我调用该方法时,它会将其视为int。因此,如果我输入一个大于int max limit的数字,我会得到一个错误,表示整数太长
我只是通过尝试使用阵列中的电话号码运行该方法来测试代码
System.out.println(binarySearch(contacts,9077867820,0,1000));
它抛出一个“整数太大”错误。当我使用小于int max limit的数字重试时,如下所示:
System.out.println(contacts[binarySearch(contacts,1171652637,0,1000)]);
它返回数组中联系人的索引
以下是我的方法:
public static int binarySearch(Contact[] A, long key, int low, int high)
{
int rangeSize = (high-low) + 1;
int mid = (high+low)/2;
if(key==A[mid].getNum()) return mid;//found it, no further recursion needed
else if(rangeSize==1) return -1;//not in array
if (key<A[mid].getNum()) return binarySearch(A, key, low, mid);
else return binarySearch(A, key, mid+1, high);
}
当key被声明为long时,为什么它仍然需要int
# 1 楼答案
当您将数字写为
123
时,它是一个整数文本。它只能表示整数范围(Integer.MIN_VALUE
-Integer.MAX_VALUE
)内的数字要编写长文本,请附加
L
后缀:123L
是一个long
,可以表示长范围内的所有数字(Long.MIN_VALUE
-Long.MAX_VALUE
)输出: