0

在 get 方法中,我想从第一个元素到最后一个元素。但它以相反的顺序返回列表(最后到第一个元素)。我怎样才能用这段代码解决这个问题?

import java.util.*;

class List {

    Customer listPtr;
    int index;

    public void add(Customer customer) {
        Customer temp = customer;
        if (listPtr == null) {
            listPtr = temp;
            index++;
        } else {
            Customer x = listPtr;
            while (x.next != null) {
                x = x.next;
            }
            x.next = temp;
            index++;
        }
    }

    public Customer get(int index) {
        Customer temp = listPtr;
        int size = size();
        if (index == 0) {
            return listPtr;
        } else {
            while (size != index) {
                size--;
                temp = temp.next;
                System.out.println(size + "------" + index);
            }
            return temp;
        }
    }

    public int size() {
        int size = 0;
        Customer temp = listPtr;
        while (temp != null) {
            temp = temp.next;
            size++;
        }
        return size;
    }

    public void printList() {
        Customer temp = listPtr;
        while (temp != null) {
            System.out.println(temp);
            temp = temp.next;
        }
    }
}

class DemoList {

    public static void main(String args[]) {
        List list = new List();
        Customer c1 = new Customer("10011", "A");
        Customer c2 = new Customer("10012", "B");
        Customer c3 = new Customer("10013", "C");
        Customer c4 = new Customer("10014", "D");
        Customer c5 = new Customer("10015", "E");
        list.add(c1);
        list.add(c2);
        list.add(c3);
        list.add(c4);
        System.out.println(list.get(1));
        //list.printList();

    }
}

class Customer {

    String id;
    String name;
    Customer next;

    public Customer(String id, String name) {
        this.id = id;
        this.name = name;
    }

    public String toString() {
        return id + " : " + name;
    }

    public boolean equals(Object ob) {
        Customer c = (Customer) ob;
        return this.id.equals(c.id);
    }
}
4

3 回答 3

2

这个问题有点模棱两可。看起来你在问为什么 .get() 没有返回预期的元素?

while (size != index) {
    size--;
    temp = temp.next;
    System.out.println(size + "------" + index);
}
return temp;

似乎是罪魁祸首。当您的参考在列表中向前移动时,您的循环计数器从 size() 递减到所需的索引。这意味着 size 的值与您正在查看的索引没有真正的相似之处。

我会用

int i =0;
while(++i <= index && i < size){
    temp = temp.next;
}
if (i == index) {
   return temp
} else {
   //off the end, so throw exception
}
于 2013-08-12T09:45:36.017 回答
1

由于这是一项任务,因此不适合(或出于您的长期利益考虑)为您提供解决方案...

基本问题是您的get(i)方法没有返回值 a position i

这应该足以让你弄清楚它到底在做什么......并因此修复它。

于 2013-08-12T09:46:24.117 回答
0

看起来你正在以非常复杂的方式做一些非常简单的事情。

我建议:

首先,从客户中删除“下一个”字段。

然后,不要费心编写自己的 List 类。Java 有几个非常好的 List 实现。

例子:

导入 java.util.*;类演示列表 {

public static void main(String args[]) {
    List<Customer> list = new ArrayList<Customer>();
    Customer c1 = new Customer("10011", "A");
    Customer c2 = new Customer("10012", "B");
    Customer c3 = new Customer("10013", "C");
    Customer c4 = new Customer("10014", "D");
    Customer c5 = new Customer("10015", "E");
    list.add(c1);
    list.add(c2);
    list.add(c3);
    list.add(c4);

    //first customer:
    System.out.println(list.get(0)); //zero-based

    //all customers:
    for (Customer c : list) {
       System.out.println(c);
    }

}

}

于 2013-08-12T09:47:17.433 回答