当前位置: 首页 > 知识库问答 >
问题:

泛型java的数组搜索

逄宁
2023-03-14

我试图搜索任何数据类型(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);


}
}

在这种情况下,最好的解决方案是什么?

谢谢

共有2个答案

田权
2023-03-14
  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
        
        }
        }
宋涵忍
2023-03-14

您需要创建类的实例来调用实例方法。比如:

class Demo {
    public void show() { }
}

new Demo().show();

现在,我让你来实例化你的泛型类。

此外,您的find()方法也被破坏。如果找不到元素,它将返回索引=0。这是数组中的有效索引。您应该将索引初始化为-1

int index = -1;

关于将方法设置为静态的尝试,它会给您带来错误,因为类型参数不适用于类的static成员。

来自Java泛型常见问题解答-Angelika Langer:

类的类型参数的作用域是该类的整个定义,但该类的任何静态成员或静态初始值设定项除外。这意味着类型参数不能用于静态字段或方法的声明,也不能用于静态嵌套类型或静态初始值设定项。

 类似资料:
  • 问题内容: 我的任务是用Java编写哈希表,该哈希表必须适用于任何数据类型。我正在编写的代码规则如下:-哈希表必须具有一个数组作为基础数据结构,其大小在构造对象时确定- 发生冲突时,应该放置碰撞的元素链接列表,该列表包含哈希表中该索引(键)处的所有元素 因此,对于基础数据类型,我做了一个LinkedList类型的数组(自定义,不是Java API LinkedList)。 当然,问题是实例化此数组

  • 问题内容: 因此,我正在开发这个通用的HashTable类,并且希望将其通用地用于任何数量的传入类型,并且我还想将内部存储数组初始化为LinkedList的数组(出于冲突目的),其中为确保类型安全,每个LinkedList都被预先指定为HashTable类中的泛型类型。我该怎么做?以下代码最能阐明我的意图,但当然不会编译。 问题答案: Java中的泛型不允许创建具有泛型类型的数组。您可以将数组转换

  • 我不想为每个类型T编写这个方法只是为了调用getMessage()并将其传递给下一个方法。 有可能写出这样的方法吗?我只想访问ConstraintViolation接口的方法,这些方法不依赖于类型T(如字符串getMessage())。

  • 问题内容: 我最近开始学习JAVA泛型。一切都说得通,我现在有点理解。但是有一件事让我烦恼-您无法创建通用类型的数组。 我想实现诸如队列和堆栈之类的抽象数据类型,但是要使用某种通用类型作为存储在堆栈中的基础数据。我将如何解决?我确定我想念但那是什么? 提前致谢。 问题答案: 《有效的Java》,第5章,GENERICS,第25项:首选列表而不是数组 : 数组在两个重要方面不同于通用类型。首先,数组

  • 问题内容: 我有一个代表文本片段的泛型类。该文本片段可能具有多种不同模式(突出显示的不同类型)中的任何一种。这些模式用枚举表示。每个项目的Enum可能不同,但是它必须实现一个接口,该接口提供了一种将其中两个结合的方法(可以突出显示并加粗显示)。所以我有一个界面: 然后我的TextFragment是文本字符串和模式的容器。但是当我尝试声明该类时: 我收到以下错误: 令牌“扩展”的语法错误,预期 根据

  • 问题内容: 我正在尝试创建一个泛型类型的数组。我收到错误消息: 我很困惑。任何线索为什么会这样。 问题答案: 其背后的原因是,您不能创建通用或参数化类型的数组,而只能 创建可验证的 类型(即可以在运行时推断出的类型)。 尽管可以将此类数组类型 声明 为变量或方法参数。这有点不合逻辑,但这就是Java的样子。 Java泛型和集合在第6章中广泛讨论了此问题和相关问题。