2017-04-25 43 views
1

我必須「實現線性搜索的以下通用方法」,但據我所知,不可能有一個通用數組。我的同班同學中沒有人能夠弄清楚,我們班也沒有TA。這是否可能,如果是的話,你能指出我的方向是正確的嗎?由於通用線性搜索

public static void main(String[] args){ 
    Scanner scan = new Scanner(System.in); 
    String type = scan.next(); 
    int length = scan.nextInt(); 

    //checks the type and makes the appropriate array 
    if (type.equals("I")) { 
     int[] anArray = new int[length]; 
     for (int i = 0; i<length; i++) { 
      anArray[i] = scan.nextInt(); 
     } 
     int key = scan.nextInt(); 
     linearSearch(anArray, key); //Error, the method is not applicable for the arguments 
    } 
} 

public static <E extends Comparable<E>> int linearSearch(E[] list, E key) { 
    for (int i = 0; i<list.length; i++) { 
     if (list[i].equals(key)) { 
      return i; 
     } 
    } 
    return 0; 
} 

回答

2
  • 不能創建 Java中的泛型數組。

  • 你肯定可以有到陣列的通用參考工作。

  • 所示代碼的問題在於您有一個基本數組,泛型只能與引用一起工作。

如果使用Integer[]代替int[]程序將正常工作。

1

數組的元素必須是對象實現可比,所以你應該使用一個整數數組:

Integer[] anArray = new Integer[length]; 
1

泛型不允許與原語的工作,你會NEDD使用包裝Integer類,因此

Integer[] anArray = new Integer[length]; 
0

所有你需要的是讓ComparableanArrayjava.lang.Integer具有Comparable類型。的代碼:

package com.stackoverflow.json; 

import java.util.Scanner; 

public class Main { 
    public static void main(String[] args) { 
     Scanner scan = new Scanner(System.in); 
     String type = scan.next(); 
     int length = scan.nextInt(); 

     // checks the type and makes the appropriate array 
     if (type.equals("I")) { 
      Integer[] anArray = new Integer[length]; 
      for (int i = 0; i < length; i++) { 
       anArray[i] = scan.nextInt(); 
      } 
      int key = scan.nextInt(); 
      Comparable result = linearSearch(anArray, key); // Error, the method is not applicable 
             // for the arguments 
      System.out.println(result); 
     } 
    } 

    public static <E extends Comparable<E>> int linearSearch(E[] list, E key) { 
     for (int i = 0; i < list.length; i++) { 
      if (list[i].equals(key)) { 
       return i; 
      } 
     } 
     return 0; 
    } 

} 

打印:

I 
4 
12 
3 
4 
6 
3 
1 

注意result是在陣列搜索元素的索引anArray