2

我是新人,第一次发帖,如有错误请见谅。我想显示来自 4 LinkedList 的元素以及要像在表格中一样显示的元素。我不需要 JTable,因为我不需要 GUI。我试过使用 ListIterator 但它并没有全部显示:我的意思是如果一个列表有 5 个元素而另一个有 3 个元素,则每个列表中只会显示 3 个元素。一段代码价值超过一百万字,所以:

    LinkedList list1 = new LinkedList();
    LinkedList list2 = new LinkedList();
    LinkedList list3 = new LinkedList();
    LinkedList list4 = new LinkedList();

    list1.addFirst("A");
    list1.addFirst("B");
    list1.addFirst("C");
    list1.addFirst("D");
    list1.addFirst("E");
    list1.addFirst("F");

    list2.addFirst("G");
    list2.addFirst("H");
    list2.addFirst("I");
    list2.addFirst("J");
    list2.addFirst("K");
    list2.addFirst("L");
    list2.addFirst("M");

    list3.addFirst("N");
    list3.addFirst("O");
    list3.addFirst("P");
    list3.addFirst("Q");
    list3.addFirst("R");
    list3.addFirst("S");
    list3.addFirst("T");
    list3.addFirst("U");

    list4.addFirst("V");
    list4.addFirst("W");
    list4.addFirst("X");
    list4.addFirst("Y");
    list4.addFirst("Z");

    ListIterator it1 = list1.listIterator();
    ListIterator it2 = list2.listIterator();
    ListIterator it3 = list3.listIterator();
    ListIterator it4 = list4.listIterator();

    while (it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext()){

        System.out.println(it1.next()+"\t\t\t"+ it2.next()+"\t\t\t"+it3.next()+"\t\t\t"+it4.next());
    }

输出是这样的:

http://imageshack.us/photo/my-images/9/capturelkt.png/

我很困惑为什么这是输出,所以如果有人能解释我做错了什么或者能给我一个提示或一个例子,我将不胜感激。这不是作业,我只是一个人学习JAVA。先感谢您 !

4

3 回答 3

2

您看不到其中的行的原因A是因为这一行:

it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext()

一旦您的列表中的一个元素不足,您就会停止。

要修复它,您必须继续工作,直到您的所有列表都没有元素为止。但是,如果它们没有元素,你不能只访问这些列表,所以你必须解决它。

// change && to ||
while(it1.hasNext() || it2.hasNext() || it3.hasNext() || it4.hasNext()) {
    Object[] objs = new String[] { "", "", "", ""}; // empty strings
    // if iterators on this row are not empty, replace with values
    if(it1.hasNext()) objs[0] = it1.next();
    if(it2.hasNext()) objs[1] = it2.next();
    if(it3.hasNext()) objs[2] = it3.next();
    if(it4.hasNext()) objs[3] = it4.next();
    // now print
    String tabs = "\t\t\t";
    System.out.println(objs[0] + tabs + objs[1] + tabs + objs[2] + tabs + objs[3]);

}

如果没有数组,这会更快,而是使用严格数量的对象。但我认为如果我们将它保留为数组,它会更清晰、更容易重构。

于 2013-01-02T22:29:19.920 回答
1

它从头开始打印,因此当您下次打印时(遍历它),您将打印最近添加的项目,因为您每次都在开始添加项目)

用这条线

while (it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext()){

您也仅在所有列表都有下一个值时才打印,仅打印 5 个值,因为您的最短列表的大小仅为 5(列表 4)

于 2013-01-02T22:28:20.283 回答
1

您正在使用&&迭代器hasNext()返回 false 的那一刻,整个评估(it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext())将是 false。

于 2013-01-02T22:29:09.553 回答