为了账号安全,请及时绑定邮箱和手机立即绑定

在泛型的 binarySearch() 方法中使用关系运算符会出错。如何处理这种情况?

在泛型的 binarySearch() 方法中使用关系运算符会出错。如何处理这种情况?

一只甜甜圈 2022-12-15 14:55:17
这是我的 java 代码,问题是在 binarySearch() 中使用关系运算符 (<) 会出错。我猜我得到这个错误是因为操作数是对象类型。如何消除此错误以便我的函数完美运行?import java.util.Random;import java.util.Arrays;class BinarySearch{    public static void main(String $[])    {        Integer arr[]=new Integer[20];        for(int i=0;i<20;i++)            arr[i]=(new Random()).nextInt()%10000;        display("Initial array :\n");        array(arr);        Arrays.sort(arr);        display("After sorting :\n");        array(arr);        display("Enter the element to be searched for : ");        Integer elem=(new java.util.Scanner(System.in)).nextInt();        display(elem+(binarySearch(arr,elem)?" Found":" Not found")+"\n");    }    public static <T>boolean binarySearch(T arr[],T val)    {        int start=0;        int end=arr.length-1;        while(start<=end)        {            int mid=(start+end)/2;            if(arr[mid]==val)                return true;            if(arr[mid]<val)                start=mid+1;            else                end=mid-1;        }        return false;    }    public static void display(Object o)    {        System.out.print(o);    }    public static <T>void array(T arr[])    {        for(int i=0;i<arr.length;i++)            display(arr[i]+" ");        display("\n");    }
查看完整描述

2 回答

?
犯罪嫌疑人X

TA贡献2080条经验 获得超4个赞

问题是您的 binarySearch() 方法接受的参数将是对象而不是原始类型,因此使用相等运算符 == 比较它们是不明智的,使用小于运算符 < 比较它们也是无效的。而是按如下方式定义您的 binarySearch 方法:


public static <T extends Comparable<T>> boolean binarySearch(T arr[],T val) {

    int start = 0;

    int end = arr.length-1;


    while(start <= end) {

        int mid=(start+end)/2;

        int comparison = arr[mid].compareTo(val);

        if(comparison == 0) {

            return true;

        }


        if(comparison < 0) {

            start = mid+1;

        }

        else {

            end = mid-1;

        }

    }


    return false;

}



查看完整回答
反对 回复 2022-12-15
?
守着一只汪

TA贡献1872条经验 获得超3个赞

在此处阅读有关泛型的信息。由于所有泛型都是对象 - 您不能对它们使用比较运算符。即使您键入<T extends Number.

有两种方法可以处理这个问题:

  1. 传递Comparator<T>给方法并comparator.compare(arr[mid], val)用于比较值。

  2. 写信<T extends Comparable>和打电话arr[mid].compareTo(val)

这两种方法都返回一个整数值:

  • 0,如果值相等

  • 负数,如果第一个值小于第二个

  • 正数,如果第一个值大于第二个


查看完整回答
反对 回复 2022-12-15
  • 2 回答
  • 0 关注
  • 97 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信