2

入力した要素と一致する要素が存在するかどうかを確認するために、任意のデータ型 (Int、Strings、Chars など) の配列を検索しようとしています。一致する要素のインデックスを返す必要があります。2つのクラスが使用されています。

私が得るエラーは次のとおりです。

"Cannot make a static reference to the non-static method find(Object[], Object) from the type ArraySearch"

その提案は、メソッドを静的にすることですが、それを行うと Search クラスでエラーが発生します。

"Cannot make a static reference to the non-static type E".

検索クラス:

public class ArraySearch<E> {
public int find (E[] array, E item) {
      int index = 0;
      for (int i = 0; i < array.length; i++) {
          if (array[i].equals(item)) {
              System.out.println("There is a element " + array[i] + 
                      " at index " + i);
              index = i;
              break;
          }
      }
      return index;
  }
}

ランナークラス:

public class ArraySearchRunner {

public static void main(String[] args) {

    String[] strings = new String[]{"Jim", "Tim", "Bob", "Greg"};
    Integer[] ints = new Integer[]{1, 2, 3, 4, 5};

    ArraySearch.find(strings, "Bob");
    ArraySearch.find(ints, 4);


}
}

この場合の最善の解決策は何ですか?

ありがとう、

4

2 に答える 2

1

インスタンス メソッドを呼び出すには、クラスのインスタンスを作成する必要があります。このようなもの:

class Demo {
    public void show() { }
}

new Demo().show();

ここで、ジェネリック クラスのインスタンス化はあなたに任せます。

また、あなたのfind()方法は壊れています。要素が見つからない場合は、 が返されindex = 0ます。配列内の有効なインデックスです。むしろに初期化する必要がありindexます-1

int index = -1;

メソッドを静的にしようとすると、型パラメーターがstaticクラスのメンバーに適用されないため、エラーが発生します。

Java Generics FAQs - Angelika Langerから:

クラスの型パラメーターのスコープは、クラスの静的メンバーまたは静的初期化子を除いて、クラスの定義全体です。これは、静的フィールドまたはメソッドの宣言、または静的な入れ子にされた型または静的初期化子で型パラメーターを使用できないことを意味します。

于 2013-09-21T06:43:08.143 に答える
0
  public class ArraySearch<E> 
        {
        public int find (E[] array, E item) 
        {
              int c = 0;
              for (int i = 0; i < array.length; i++) 
              {
                  if (array[i].equals(item)) 
                  {
                      c++;
                       
                  }
              }
              System.out.println("There is a element " + item + 
                      " repeated " + c + " time(s)");
              return c;
          }
        
        public static void main(String[] args) 
        {
        
            String[] strings = new String[]{"Jim", "Tim", "Bob", "Greg","Bob"};
            String[] strings2 = new String[]{"Jim", "Tim", "Bob", "Greg","Bob"};
            Integer[] ints = new Integer[]{1, 2, 3, 4, 5,2};
            Double[] dbl= new Double[] {1.2,3.6,8.4,8.4,8.4,3.6};
            ArraySearch arr = new ArraySearch();
            arr.find(strings, "Bob");
            arr.find(strings, "Tim");
            arr.find(ints, 2);
            arr.find(dbl, 8.4);
            enter code here
        
        }
        }
于 2021-06-26T14:54:14.607 に答える