2

我正在尝试搜索任何数据类型(Int、Strings、Chars 等)的数组,以查看是否存在与您输入的元素匹配的元素。您应该返回匹配元素的索引。有两个类被使用。

我得到的错误是:

"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 泛型常见问题解答 - 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 回答