第一:我不能使用Arrays包;我们老师的要求。我查看了该网站,似乎很多提议的解决方案都涉及该软件包。
我的问题是:
我有一个包含Object类型对象的数组,我需要使用一个方法来查找该数组中的特定项并返回数组索引。如果没有找到,则返回-1。
我创建的方法如下
public int find(Object item) {
int isFind = -1;
for (int i = 0; i <= array.length; i++) {
if (array[i] == item)
isFind = i;
} return isFind;
当我使用arrayofObjects.find((Object)userInput)运行时,我总是在这一行得到一个异常:
if (array[i] == item)
我做错了什么?
感谢您的投入。
初始化空数组的代码
private Object array[];
ContainerVer1(int size){
array = new Object[size];
for (int i = 0; i <=(size-1); i++) {
array[i] = null;
}
}
如果单元格为空,则将对象添加到数组的代码
public boolean add(Object item) {
boolean hasSpace = false;
for (int i = 0; i < array.length; i++) {
if (array[i] == null) {
array[i] = item;
hasSpace = true;
break;
} else hasSpace = false;
} return hasSpace;
对于大小为5的数组,我要求用户输入,如此
ContainerVer1 arrayofStrings = new ContainerVer1(5);
do {
System.out.println("Please enter a string or 'DONE' to finish");
Scanner sc = new Scanner(System.in);
userInput = sc.next();
userInput = userInput.toUpperCase();
if (userInput.equals("DONE") == false)
arrayofStrings.add(userInput);
count++;
} while (userInput.equals("DONE") == false && count <=4);
答案 0 :(得分:0)
if (array[i] == (int)item) // if array is of type int []
C#语法btw,在Java中也应该类似
答案 1 :(得分:0)
这里有几个问题:
1)索引关闭1(改变&lt; = to&lt;)。
2)比较是看两个变量是否指向完全相同的对象,而不是字符串是否是相同的字符序列。如果在do / while循环中执行以下操作:
arrayofStrings.add(userInput);
int index = arrayofStrings.find(userInput);
System.out.printf("object index: %d\n", index);
然后比较将起作用,因为您正在检查刚刚添加的对象是否存在于数组中。另一方面,如果您检查以下内容:
arrayofStrings.add(userInput);
int index2 = arrayofStrings.find("TEST");
System.out.printf("string index: %d\n", index2);
然后比较将失败,因为即使字符串相同,底层对象也是不同的(通过传入&#34; TEST&#34;创建了一个新对象)。 find函数不知道它正在比较字符串。修改查找功能的一种方法是检查项目和数组[i]是否是&#34; instanceof&#34;字符串并利用&#34; compareTo&#34; String函数检查是否相等。