2

私はここが初めてで、投稿するのは初めてですので、間違えたら失礼します。4つのLinkedListの要素と、それらの要素をテーブルのように表示したいと思います。GUIが必要ないので、JTableは必要ありません。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()

リストの1つが要素から外れるとすぐに、停止します。

これを修正するには、すべてのリストの要素がなくなるまで作業を続ける必要があります。ただし、要素が不足している場合は、これらのリストにアクセスすることはできないため、回避する必要があります。

// 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(リスト4)しかないため、5つの値のみが印刷されます。

于 2013-01-02T22:28:20.283 に答える
1

使用して&&いるので、イテレータhasNext()がfalseを返すと、の評価全体(it1.hasNext() && it2.hasNext() && it3.hasNext() && it4.hasNext())がfalseになります。

于 2013-01-02T22:29:09.553 に答える