我正在尝试使用我创建的方法 find() 来搜索泛型类型 T 的 arrayList 元素。搜索时,用户必须输入他们正在搜索的项目以及他们想要搜索的两个索引开始位置和结束位置之间。每当我运行 main() 时,它总是打印 -1,即使在我的测试代码中 Chevy 显然在数组中介于 0 和 3 之间。谁能帮我弄清楚为什么它没有打印雪佛兰所在的正确索引?谢谢!
列表:
import java.util.Scanner;
public class AList<T> implements ListInterface<T>
{
private T[] L;
private T k;
private int count;
public AList(int s)
{
L =(T[]) new Object[s];//Allows the client to decide the length of the list ASK HOW TO MAKE IT A SET SIZE OF 20
count = 0;
}//end of constructor
public void add(T item)throws ListException
{
if(count == L.length)
throw new ListException("Cannot add. List is full.");
if(item == null || item == "")
throw new ListException("Error. Unable to add. Cannot add null entries.");
L[count] = item;
count++;
}//end of add method
public void add(T item, int position)throws ListException
{
if(count == 0)
throw new ListException("Error. Unable to insert. List is empty.");
if(count == L.length)
throw new ListException("Error. Unable to insert. List is full");
if(item == null || item == "")
throw new ListException("Error. Unable to insert. Attempt to insert null object.");
if(position <= 0 || position > count)
throw new ListException("Error. Unable to insert. Bad position.");
for(int k = count-1; k >= position-1; k--)
{
L[k+1] = L[k];
L[2] = L[1];
}
L[position-1] = item;
count++;
}//end of insert method
public T get(int position)throws ListException
{
if(position <= 0 || position > count)
throw new ListException("Error. Unable to get. Bad position.");
if(count == 0)
throw new ListException("Error. Unable to get. List is empty.");
return L[position-1];
}// End of get method
public T set(T item, int position)throws ListException
{
if(item == null || item == "")
throw new ListException("Error. Unable to replace. Replacement cannot be null.");
if(position <= 0 || position > count)
throw new ListException("Error. Unable to replace. Bad position.");
if(count == 0)
throw new ListException("Error. Unable to replace. List is empty.");
T temp = L[position-1];
L[position-1] = item;
temp = item;
return temp;
}// End of set method
public int find(T item, int startPosition, int endPosition)throws ListException
{
if(startPosition < 0 || endPosition > count)
throw new ListException("Error. Unable to find. Start and/or end position bad.");
int found;
if(startPosition > endPosition)
found = -1;
else if(item.equals(L[startPosition]))
found = startPosition;
else
found = find(item, startPosition+1, endPosition);
return found;
}//method for finding
public int size()
{
return count;
}// End of size method
public String toString()
{
int k;
if(count == 0)
return "The list is empty. \n";
String temp = "";
for(k = 0; k < count; k++)
{
temp += L[k] += "\n";
}
return temp;
}//end of method toString
public T remove(int position)throws ListException
{
if(count == 0)
throw new ListException("Error. Unable to remove. List is empty.");
if(position <= 1 || position >= count)
throw new ListException("Error. Unable to remove. Bad position.");
T temp = L[position-1];
int k;
for(k = position-1; k <= count; k++)
{
L[k] = L[k+1];
}
count--;
return temp;
}//end of remove method
public void clear()
{
for(int k = count; k > 0; k--)
{
count--;
}
}// End of clear method
public boolean isEmpty()
{
if(L.length == 0)
return true;
else
return false;
}// End of isEmpty method
}//程序结束
测试代码:
public static void main(String[] args)
{
try
{
AList<String> carList = new AList<String>(20);
carList.add("Ford");
carList.add("Chevy");
carList.add("Toyota");
carList.add("Mercedes");
System.out.println(carList);
System.out.println(carList.find("Chevy", 0, 3));
}
catch(ListException e)
{
System.out.println(e);
}
}
列表接口(interface):
public interface ListInterface<T>
{
public void add(T item)throws ListException;
public void add(T item, int position)throws ListException;
public T get(int position)throws ListException;
public T set(T item, int position)throws ListException;
public int find(T item, int startPosition, int endPosition);
public int size();
public T remove(int position) throws ListException;
public void clear();
public boolean isEmpty();
}
最佳答案
您有一个显式返回 -1
的条件如果开始位置小于结束位置。我相信这是一个错字,你的意思是 >
在那里签名而不是 <
标志:
if (startPosition > endPosition) {
// Changed here --^
return -1;
关于java - 在 Java 中搜索两个 arrayList 索引之间的通用项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43568490/