1
for(Iterator<Suit> i = suits.iterator(); i.hasNext();)
          for(Iterator<Rank> j = ranks.iterator(); j.hasNext();)
            deck.add(new Card(i.next(), j.next()));

これらのコード行で「NoSuchElementException」が発生する理由を誰か説明してください。回避する方法はありますが、例外がスローされた理由を知りたいです。前もって感謝します

4

4 に答える 4

0

上記のコードでは、内側のループに未チェックの i.next() があります。それが意図的であったかどうかは特にわかりませんが、意図的であった場合、ネストされたループは必要なく、両方を反復する 1 つのループだけです。

Iterator<Suit> i = suits.iterator();
for(Iterator<rank> j = ranks.iterator(); j.hasNext();)
    if(i.hasNext())
       deck.add(new Card(i.next(), j.next()));
于 2013-09-19T13:10:25.843 に答える
-1
for(Iterator<Suit> i = suits.iterator(); i.hasNext();){
          Suit tmp = i.next();
          for(Iterator<Rank> j = ranks.iterator(); j.hasNext();)
            deck.add(new Card(tmp, j.next()));
}

これで修正されるはずです。内側のループ内で i.next() を呼び出していました。これは、意図したものではないと思います。

あなたのコードでは、内側のループ内で i.hasNext() が i.next() を呼び出す前にチェックしないでください。そのため、エラーが発生しています。

于 2013-09-19T12:59:21.917 に答える