有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

当我的方法花费很长时间时出现“整数太长”错误(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) 个答案

  1. # 1 楼答案

    当您将数字写为123时,它是一个整数文本。它只能表示整数范围(Integer.MIN_VALUE-Integer.MAX_VALUE)内的数字

    要编写长文本,请附加L后缀:123L是一个long,可以表示长范围内的所有数字(Long.MIN_VALUE-Long.MAX_VALUE

    System.out.println(((Object)123).getClass());
    System.out.println(((Object)123L).getClass());
    

    输出:

    java.lang.Integer
    java.lang.Long