我刚刚做了一个家庭作业,它只是在java中创建一个线性搜索算法。但是,我也想让这个代码适用于任何数据类型,如字符串,整数,双精度等,以及不同类型的容器,如数组,哈希集,列表和集合,所以我不必浪费这么多额外的用于重载方法的行。这是当前的代码。
public class Search
{
public int linear (Object[] contents, Object query)
{
for (int index = 0; index < contents.length; ++index)
{
if (query.equals(contents[index]))
{
return index;
}
}
return -1;
}
}
但是,在我的其他类中,为了进行测试,我有一个int数组和一个要搜索的int。我收到一个错误,上面写着“搜索类型中的方法线性(Object [],Object)不适用于参数(int [],int)”
答案 0 :(得分:3)
int不是一个对象,它是一个原始的。你可以使用Integer []。更好的是,你应该使用泛型。您可能还想使用列表而不是数组(只是一个想法):我在下面显示。
import java.util.List;
public class LinearSearch<E>
{
public int linear (E[] contents, E query)
{
for (int index = 0; index < contents.length; ++index)
{
if (query.equals(contents[index]))
{
return index;
}
}
return -1;
}
public int linear (List<E> contents, E query)
{
for (int index = 0; index < contents.size(); ++index)
{
if (query.equals(contents.get(index)))
{
return index;
}
}
return -1;
}
}
答案 1 :(得分:0)
同样的问题,但由于更新了JavaSE 1.8的IDE,因此使用了新的设置
public static <E extends Comparable<>> int linear (E[] contents, E query) {
for (int index = 0; index < contents.length; ++index)
{
if (query.equals(contents[index]))
{
return index;
}
}
return -1;
}
不
<E extends Comparable<>>
你得到E无法解析为某种类型。
要使用该方法,您必须使用
创建数组Integer[] intArray = {23,45,21,55,234,1,34,90};
而不是
int[] intArray = {23,45,21,55,234,1,34,90};
然后调用方法:
System.out.println("Key found at Index: " + linear(intArray, 21));