Problem NoSuchElementException

0

Mam metodę, która ma sprawdzać czy jest karta o dannej wartości. Program najpierw losuje karty z pośród liczb od 0 do 13 a w metodzie nazwykart przyporządkuje liczby do nazw i chcę aby ta wpisana nazwa była porównywana z przypisaną wartością. Gdy uruchamiam metodę wywala mi java.util.NoSuchElementException i za bardzo nie rozumiem dlaczego skoro sprawdzam czy istnieje kolejny element. Z góry dzięki za pomoc.

public void wyswietlWartosc()
	{
		Scanner sc = new Scanner(System.in);
		System.out.println("Podaj wartość: ");
		String wybor = sc.next();
		
		Iterator<Karta> it = karty.iterator();
		while (it.hasNext())
		{
			if(nazwykart(String.valueOf(it.next().wartosc))==wybor)
			{
			System.out.println(it.toString());
			}
		}
		sc.close();
		menu();
		
	}
public String nazwykart(String wartosc)
	{
		switch(wartosc)
		{
			case "1":  return "as"; 
			case "11": return "walet";
			case "12": return "dama";
			case "13": return "król"; 
			default: return wartosc;
		}
	}
1
  1. GDZIE rzuca ci wyjątek?
  2. Stringi porównuje się przez .equals() a nie ==
0

Dokładnie to wyskakuje takie coś:

Exception in thread "main" java.util.NoSuchElementException
	at java.util.Scanner.throwFor(Unknown Source)
	at java.util.Scanner.next(Unknown Source)
	at java.util.Scanner.nextInt(Unknown Source)
	at java.util.Scanner.nextInt(Unknown Source)
	at Karta.menu(Karta.java:107)
	at Karta.wyswietlWartosc(Karta.java:71)
	at Karta.menu(Karta.java:115)
	at Karta.menu(Karta.java:113)
	at Karta.menu(Karta.java:112)
	at Main.main(Main.java:7)

Jak poprawiłam na equlas to wyświetla mi się takie coś "java.util.ArrayList$Itr@1021e58" zamiast wartości.

public String toString()
    {		
		return nazwykart(String.valueOf(wartosc)) + " " + nazwykolorow(String.valueOf(kolor));
    }

W lini 71 w metodzie wyswietlWartosc jest menu(); bo chcę by po wyświetleniu tych kart z powrotem wyświetliło się menu. Metoda menu działa poprawnie.
W klasie main na 7 lini jest wywołanie metody menu..

1
  1. Brawo, a widzisz ze wstawiasz kawałek kodu NIEZWIĄZANY z tym wyjątkiem? o_O Trace wskazuje na błąd w funkcji menu() bo wywołujesz nextInt() kiedy inta wcale w System.in nie ma...
  2. Wywołanie it.toString() powoduje wywołanie toString() na ITERATORZE a nie na obiekcie na który iterator pokazuje. Pobierz referencje do obiektu tam gdzie wołasz it.next() a potem na tym obiekcie wołaj equals() i toString()...
0

Dziękuję bardzo za ad 2, teraz już rozumiem :) Z ad 1 już też sobie poradziłam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1