我不明白lastIndexOf方法在java中是如何工作的

时间:2014-04-28 00:20:46

标签: java linked-list lastindexof

我必须编写一个名为LastIndexOf的方法,该方法接受一个整数值作为参数,并返回最后一次出现的值列表中的索引,如果未找到该值,则返回-1。这是我的代码,但它没有返回任何内容。对我来说它看起来总是会返回-1但我在输出上看不到它,因为它不会打印方法返回的内容。

这些是列出商店的值。

列表 - > [2,5,7,24,5,9,13,2]

    public class LastIndexOf {

    public static void main(String[] args) {

    System.out.println("index of 5 = " + list.lastIndexOf(5)); // should to return index of 5= 4
    System.out.println("index of 100 = " + list.lastIndexOf(100)); // should return index of 100 = -1

    }

    public static int lastIndexOf (int element) {
    int index = 0;
    ListNode current = list;
    while (current != null) {
       if (current.data == element) {
           return index;
       }
       index ++;
       current = current.next;
    }
    return -1;
    }
}

这是我得到的输出:

index of 5 = 
index of 100 = 

3 个答案:

答案 0 :(得分:0)

此代码不应包含2个return语句。此外,您正在使节点等于整个列表;当它应该等于列表的头部。

这段代码是给你纠正的吗?我问,因为它似乎没有逐步发展;相反,它看起来是从上到下写的。

答案 1 :(得分:0)

此代码段返回正确的值。

public class Test
{
    public static java.util.List<Integer> list = Arrays.asList(2, 5, 7, 24, 5, 9, 13, 2);

    public static void main(String[] args)
    {

        System.out.println("index of 5 = " + list.lastIndexOf(5));
        System.out.println("index of 100 = " + list.lastIndexOf(100));

        System.out.println(lastIndexOf(5));
        System.out.println(lastIndexOf(100));
    }


    public static int lastIndexOf (int element) {
    int index = 0;
    int found = -1;
    List<Integer> current = list;
    while (index < current.size()) {
       if (current.get(index) == element) {
           found = index;
       }
       index ++;
    }
    return found;
    }
}

我不知道ListNode的用途,因为实际上并不需要它。

我想鼓励您了解ArrayList&lt;&gt; openjdk中的实现如下:ArrayList.java#ArrayList.lastIndexOf in OpenJDK

答案 2 :(得分:0)

我猜这个:

    public int lastIndexOf (int value) {
        int index = -1;
        int size = size();
        int count = 0;

        ListNode current = front;

        for (int i = 0; i < size; i++) {
            int indexValue = current.data;
            if (value == current.data) {index = count;}
            count++;
            current = current.next;
         }
         return index;
     }