Iteratorlar men xohlagancha harakat qilmayapti. Men nima xato qilyapman?

Men boshlovchi sifatida ruletka o'yinida ishlayapman va qotib qoldim.

Menda tanlangan Binobyekt bor

Bin(){
    outcomes = new TreeSet<Outcome>();
}

MendaBetobyekt bor

public Bet(int amount, Outcome outcome){
    this.outcome = outcome;
    this.amountBet = amount;
}

unda Natija-ob'ekt mavjud.

public Outcome(String name, int odds){
        this.name = name;
        this.odds = odds;
    }

Maqsad - Satrdagi barcha natijalarni takrorlang va savatdagi Outcome.nameni bets.outcome.name bilan solishtiring. Mach bo'lsa, g'alaba bor. Agar yo'q bo'lsa, yo'qotish bor.

Shunday qilib, bu mening kodim:

System.out.println(bin.toString());
System.out.println(table.bets.toString());

System.out.println(black.toString());

ListIterator<Bet> i = table.bets.listIterator();
    Iterator<Outcome> b = bin.outcomes.iterator();

    while(i.hasNext()) {

        while(b.hasNext()){


            if(i.next().outcome.equals(b.next())){

                System.out.println("Win!");

            }
            else System.out.println("Win :/");
        }


    }

Muammo: Chiqishda shunday bo'lsa ham:

[8 (35:1)]['7, 71' (17:1)]['8, 81' (17:1)][5, 53 (17:1)][8, 83 (17:1)][7 (11:1)][4, 41,    
43, 44 (8:1)][5, 51, 53, 54 (17:1)][7, 71, 73, 74 (8:1)][8, 81, 83, 84 (17:1)][4, 5,6,   
7, 8, 9 (5:1)][7, 8,9, 10, 11, 12 (5:1)][1 (2:1)][11 (2:1)][Low (1:1)][Even (1:1)]  

[Black (1:1)]

[10 on [Black (35:1)]]

Black (35:1)

No :/

Exception in thread "main" java.util.NoSuchElementException
at java.util.LinkedList$ListItr.next(Unknown Source)
at Roulette.Game.main(Game.java:37)

Bu shunday tuyuladi

a) Bin ichidagi barcha natijalarni takrorlamaydib) Moslikni topganda, u rost deb baholamaydi.

Men noto'g'ri qilayotganimni ko'ra olasizmi?

Yordamingiz uchun katta rahmat!!

Agar bu juda ko'p yoki juda oz matn bo'lsa, uzr so'rayman. Boshqa sinflarda nima bo'layotganini ko'rish kerak bo'lsa, ular quyidagilar:

O'yin sinfi https://gist.github.com/anonymous/5473187

Jadval sinfi https://gist.github.com/anonymous/5473188

Tikish klassi https://gist.github.com/anonymous/5473189

Natija sinfi https://gist.github.com/anonymous/5473191

Axlat qutisi https://gist.github.com/anonymous/5473192

BinBuilder sinfi https://gist.github.com/anonymous/5473197

G'ildirak sinfi https://gist.github.com/anonymous/5473200

NonRandom sinf https://gist.github.com/anonymous/5473202

Passenger57 sinfi https://gist.github.com/anonymous/5473207

Tahrirlash: System.out.println() oʻchirildi va yangi natijalar yangilandi.


person tore    schedule 27.04.2013    source manba


Javoblar (2)


Siz i.next() va b.next() har biriga ikki marta qo'ng'iroq qilyapsiz. next() keyingi elementga o'tadi, shuning uchun sizda 1, 2, 3, 4 ketma-ketligi bo'lsa, siz 1, 3 ni chop etasiz va 2, 4 ni solishtirasiz.

println() iboralarida bu kutilmagan nojo'ya ta'sirga yo'l qo'ymaslik uchun natijalarni o'zgaruvchiga nusxalang:

ListIterator<Bet> i = table.bets.listIterator();
Iterator<Outcome> b = bin.outcomes.iterator();

while(i.hasNext()) {
  Bet bet = i.next();
  System.out.println(bet.outcome.name.toString());
  while(b.hasNext()){
    Outcome o = b.next();
    System.out.println(o.name.toString());

    if(bet.outcome.equals(o)){
      System.out.println("Win!");
    } else {
      System.out.println("Win :/");
    }
}

P.S.:

Eng toza yechim, ehtimol, iteratorlardan qochish va tegishli takrorlanuvchilar ustidagi looplardan foydalanishdir.

person Stefan Haustein    schedule 27.04.2013
comment
@tore: Siz hali ham next() natijasini o'zgaruvchilarga ko'chirmadingiz. Shunday qilib, siz hali ham ichki tsiklda i.next() ni tez-tez chaqirasiz (bu b dan ortiq takrorlanadi) - person A.H.; 27.04.2013
comment
Endi siz hali ham ichki tsikldagi tashqi tsiklning keyingi() ni bir necha marta chaqirasiz. - person Stefan Haustein; 27.04.2013
comment
OK, endi harakat juda ko'p! :D Katta rahmat! Men sizning javobingizni batafsil o'rganaman va nima bo'layotganini tushunishga harakat qilaman! :) - person tore; 27.04.2013

Buni sinab ko'ring:

while(b.hasNext()){
    String str = b.next().name.toString()
    System.out.println(str);

    if(i.next().outcome.equals(str))
        System.out.println("Win!");

    else 
        System.out.println("Win :/");
}

O'rniga :

while(b.hasNext()){
    System.out.println(b.next().name.toString());

    if(i.next().outcome.equals(b.next())){    
        System.out.println("Win!");

    }
    else 
        System.out.println("Win :/");
}
person Achintya Jha    schedule 27.04.2013