打印出索引和元素

时间:2015-01-22 05:50:08

标签: java arrays indexing

所以我正在编写一个程序,用于打印出数组中的位置和该位置的数字(使用线性搜索)。这是我到目前为止所得到的,但输出并非我的预期。

输出:

Number 0  Linear Search Index At 0
Number 1  Linear Search Index At 1
Number 2  Linear Search Index At 2
Number 2  Linear Search Index At 2
Number 2  Linear Search Index At 2
Number 3  Linear Search Index At 5

我的预期输出:

Number 0  Linear Search Index At 0
Number 1  Linear Search Index At 1
Number 2  Linear Search Index At 2
Number 2  Linear Search Index At 3
Number 2  Linear Search Index At 4
Number 3  Linear Search Index At 5

代码:

    public class LinearSearch {
    public int linearSearch(int[] array, int key) {
        int size = array.length;
        for ( int i = 0; i < size; i++ ) {
            if ( array[i] == key ) {
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] arg) {
        int[] array = { 0, 1, 2, 2, 3, 3, 4, 4, 5, 6, 8, 8, 9, 9, 9, 10, 11, 12, 13, 15, 16, 20, 21, 22, 22, 23, 24, 24, 26, 27, 27, 28, 30};

        LinearSearch linSearch = new LinearSearch();
        for (int i = 0; i < array.length; i++) {
            System.out.println("Number " + array[i] + " " + " Linear Search Index " +
                linSearch.linearSearch(array, array[i]));
        }
    }

  }

任何帮助都会很棒!谢谢!

3 个答案:

答案 0 :(得分:1)

i函数中的

linearSearch()始终从0开始。 linearSearch()始终从数组的开头开始搜索。因此,linearSearch()将始终返回与您的密钥匹配的第一个元素。

答案 1 :(得分:0)

您拥有的代码将返回第一个索引,在该索引中找到值:

public int linearSearch(int[] array, int key) {
    int size = array.length;
    for ( int i = 0; i < size; i++ ) {
        if ( array[i] == key ) {
            return i;
        }
    }
    return -1;
}

因此,如果您的数组是{1,2,2}并且您查找2,那么总是获取索引1(对于数组中的第二项) )。

除非数组元素是唯一的,否则在一般情况下无法解决这个问题。在查找有多个元素的元素时,您必须做出某些决定您要使用哪个元素。

答案 2 :(得分:0)

要检索预期的输出,您只需执行以下操作:

for (int x = 0; x < array.length; x++){
   System.out.println("Number " + array[i] + " " + " Linear Search Index " + x);
}

您的方法有两个问题: 它试图找到int的第一次出现,这就是为什么你的输出与你的预期混淆的原因。 2.绝对不是O(n)。它是O(n ^ 2),这可能是你首先想做的事情,因为你要求进行线性搜索。