【发布时间】:2013-12-18 13:59:15
【问题描述】:
我想问是否有人知道如何解决这个问题。 我收到这条消息:
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at Main.add(Main.java:40) // it is for: myList[actSize++] = object;
at Main.main(Main.java:127) //it is for: ob.add(str+str1+str2);
我想问一下我所做的是否正确。我想构建一个使用以下泛型的程序:方法添加、删除、获取、包含和大小。但是当我构建程序时,我发现泛型无法创建数组,所以我使用了本网站的另一篇文章:[如何:创建泛型数组并使用弱类型(未选中)。所以这个程序的主题是有人在控制台中输入他的名字和他的电话号码,然后把它放在泛型数组中,这样我就可以把它保存到一个对象中,然后放到一个特定的位置。之后,程序会动态增加阈值,以便用户有很多联系人。然后他会被告知他的联系人是否被复制,并且会立即删除。之后会询问他是否要删除合同,然后程序统计全部,直到用户完成他的工作(添加合同)。
我很高兴听到一些意见。
(如果我的英语听不懂,我很抱歉。)
import java.util.Arrays;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Main < T >
{
private Object[] myList;
public static int actSize = 0;
public Main(int s)
{
myList = new Object[s];
}
public T Array(int i)
{
@SuppressWarnings("unchecked")
final T t = (T) myList[i];
return t;
}
public void add(T object) //end
{
if (myList.length - actSize <= 5)
{
myList = Arrays.copyOf(myList, myList.length * 2);
System.out.println("\nNew length: " + myList.length);
}
myList[actSize++] = object;
}
public void add(T object, int position) //end
{
myList[position++] = object;
}
public boolean remove(T object) //end
{
if (myList[actSize].equals(object))
{
myList[actSize] = myList[actSize - 1];
return true;
}
else
return false;
}
public void remove(int position) //end
{
myList[position] = myList[position - 1];
}
@SuppressWarnings("unchecked")
public T get(int index) //end
{
if (index < actSize)
{
return (T) myList[index];
}
else
{
throw new ArrayIndexOutOfBoundsException();
}
}
public boolean contains(T object) //end
{
if (myList[actSize].equals(object))
{
return false;
}
else
myList[actSize] = myList[actSize - 1];
return true;
}
public int size() //end
{
return actSize;
}
@SuppressWarnings("unchecked")
public static void main(String[] args)
{
@SuppressWarnings("rawtypes")
Main ob = new Main(actSize);
String str, str1, str2;
try
{
BufferedReader br = new BufferedReader(new InputStreamReader(System. in ));
while (true)
{
System.out.print("Do you want to add a contact? press any key to continue or n to exit :");
String str5 = br.readLine();
if ("n".equalsIgnoreCase(str5))
{
System.exit(1);
}
System.out.print("Enter your First Name :");
str = br.readLine();
System.out.print("Enter your Last Name :");
str1 = br.readLine();
System.out.print("Enter your Phone Number :");
str2 = br.readLine();
ob.add(str + str1 + str2);
ob.add(str + str1 + str2, actSize);
if (ob.contains(str + str1 + str2) == true)
{
System.out.println("The contact you entered is duplicated");
ob.remove(ob.contains(str + str1 + str2));
System.out.println("The contact has been removed");
}
System.out.print("Do you want to add contracts? press y to continue :");
String str3 = br.readLine();
System.out.println("You just entered:" + str3);
if ("y".equalsIgnoreCase(str3))
{
System.out.print("Which contract do you wish to be removed?");
String str4 = br.readLine();
if (str4.equals(actSize))
{
ob.remove(actSize);
System.out.println("The contact has been deleted.");
}
}
}
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
【问题讨论】:
-
为什么不使用
java.util.ArrayList类? -
我已经有了,但我总是对泛型 T 犯同样的错误,即我不能使用泛型数组。我不知道,也许我还没有尝试过。也许你能用代码告诉我如何使用它?或者给我发个链接?
-
您基本上是在重写 ArrayList(由数组支持的 List 实现。)。我建议你看看这个类的实际代码。
标签: java arrays generics dynamic console