2017-04-25 18 views
1

私は "一般的な配列を持つことはできません。私のクラスメートの誰もそれを理解することができず、どちらも私たちのクラスのTAを持っていません。これは可能なのですか?もしそうなら、正しい方向に私を向けることができますか?あなたは Javaで一般的な配列を作成しませできおかげ一般的な線形検索

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
  • あなたは確かにです。は、配列の総称的な参照で動作します。

  • このコードの問題は、プリミティブ配列を持ち、ジェネリックスが参照のみで動作することです。あなたがInteger[]代わりのint[]を使用する場合は

プログラムが動作します。配列の

1

要素は、オブジェクトがComparableを実装しなければなりませんので、あなたは、整数配列を使用する必要があります。

Integer[] anArray = new Integer[length]; 
1
ジェネリックはプリミティブで動作するように許可されていない

、あなたがラッパーIntegerクラスを使用するNEDDますので、

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

必要なのは、タイプComparablejava.lang.IntegeranArrayComparable型を持つようにすることです。コード:

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; 
    } 

} 

プリント:resultはアレイanArray

で検索要素のインデックスであることを

I 
4 
12 
3 
4 
6 
3 
1 

関連する問題