在数组中寻找项目

时间:2014-03-11 01:35:41

标签: arrays indexing

第一:我不能使用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);

2 个答案:

答案 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函数检查是否相等。