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

这是我的 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");

    }


一只甜甜圈
浏览 98回答 2
2回答

犯罪嫌疑人X

问题是您的 binarySearch() 方法接受的参数将是对象而不是原始类型,因此使用相等运算符 == 比较它们是不明智的,使用小于运算符 < 比较它们也是无效的。而是按如下方式定义您的 binarySearch 方法:public static <T extends Comparable<T>> boolean binarySearch(T arr[],T val) {&nbsp; &nbsp; int start = 0;&nbsp; &nbsp; int end = arr.length-1;&nbsp; &nbsp; while(start <= end) {&nbsp; &nbsp; &nbsp; &nbsp; int mid=(start+end)/2;&nbsp; &nbsp; &nbsp; &nbsp; int comparison = arr[mid].compareTo(val);&nbsp; &nbsp; &nbsp; &nbsp; if(comparison == 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return true;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; if(comparison < 0) {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; start = mid+1;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; &nbsp; &nbsp; else {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; end = mid-1;&nbsp; &nbsp; &nbsp; &nbsp; }&nbsp; &nbsp; }&nbsp; &nbsp; return false;}

守着一只汪

在此处阅读有关泛型的信息。由于所有泛型都是对象 - 您不能对它们使用比较运算符。即使您键入<T extends Number.有两种方法可以处理这个问题:传递Comparator<T>给方法并comparator.compare(arr[mid], val)用于比较值。写信<T extends Comparable>和打电话arr[mid].compareTo(val)。这两种方法都返回一个整数值:0,如果值相等负数,如果第一个值小于第二个正数,如果第一个值大于第二个
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java