亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

在泛型的 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條經驗 獲得超4個贊

在此處閱讀有關泛型的信息。由于所有泛型都是對象 - 您不能對它們使用比較運算符。即使您鍵入<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 關注
  • 122 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號