Instrukcja switch – interpretacja case

0

Hej, jak już wspominałem w poprzednim swoim wątku, uczę się Javy z "Przewodnikiem dla początkujących" Schildta i dotarliśmy do instrukcji switch. Wszystko ładnie pięknie, mój kod (wariacja propozycji Schildta) uruchamia się bez problemu, ale...

package moje;

public class javahelp {

	public static void main(String[] args)
		throws java.io.IOException {
		char wyb;
		System.out.println("Wybierz temat, jaki chcesz poruszyć:"
				+ "\n\t1. instrukcja if."
				+ "\n\t2. instrukcja switch.");
		System.out.println();
		wyb=(char)System.in.read();
		switch(wyb){
			case '1': System.out.println("Instrukcja warunkowa \"if\":"
					+ "\nif(warunek) instrukcja"
					+ "\nelse instrukcja;");
			break;
			case '2': System.out.println("Instrukcja wyboru \"switch\":"
					+ "\nswitch(wyrażenie) {"
					+ "\n\tcase stała"
					+ "\n\t\tsekwencja instrukcji"
					+ "\n\t\tbreak"
					+ "\n}");
			break;
			default: System.out.println("Złe polecenie!");
	}

}}

...niestety wychodzi na to, że "odpowiednie" rezultaty wchodzą również przy wpisywaniu wieloznakowych case'ów, tj. np. "1234" skutkuje wyjaśnieniem instrukcji if, a "21" – instrukcji switch, zamiast "Złe polecenie", jak każe instrukcja default. Jak wg Was można by to zdebugować i czy dałoby się to zrobić bez nadmiernej ingerencji w algorytm (o metodzie nie wspominając)? Z góry dzięki.

0

Wczytuj ciąg znaków, a nie pojedynczy znak.

0

No właśnie wczytuję ciąg znaków i mi wyszukuje odpowiedź na pierwszy z nich, choć nie powinno.

0

Tak?
A przeczytaj na głos, jaki typ ma zmienna wyb.

0

Ech... zmienna wyb ma typ char. Mogę ją zmienić na int? Mogę. Rezultat? Ten sam.

Możesz po prostu napisać konkretnie jak mam sobie z tym problemem poradzić? Odpowiedzi w formie zdań prostych nie udzielają mi zbyt wielu informacji. Kiedy piszesz "Wczytuj ciąg znaków, a nie pojedynczy znak", to chętnie dowiedziałbym się, gdzie konkretnie mam to wczytać (a może chodzi o coś jeszcze innego?).

Serio, ja bawię się w to od 10 dni!

1

Serio, ja bawię się w to od 10 dni!

Dlatego tym bardziej powinieneś myśleć, a nie oczekiwać i wklejać potem do kodu na pałę gotowe odpowiedzi ;)

zmienna wyb ma typ char. Mogę ją zmienić na int? Mogę. Rezultat? Ten sam.

Masz wczytać ciąg znaków.
char to pojedynczy znak, a int to liczba.

Utwórz zmienną zawierającą ciąg znaków, ale nie zgaduj.
Jeżeli nie wiesz, otwórz nową kartę i szukaj java ciągi znaków.

1

Już Ci pisałem, korzystaj z klasy Scanner.

        System.out.println("Wybierz temat, jaki chcesz poruszyć:"
                + "\n\t1. instrukcja if."
                + "\n\t2. instrukcja switch.");
        System.out.println();
        Scanner sc = new Scanner(System.in);

        String wyb = sc.next();
        switch(wyb)
        {
             case "1":
...
0

Trochę mi zajęło, zanim zaczaiłem, że między String wyb a sc.next() powinien być =, ale teraz już wszystko działa. Sam zastanawiałem się, że Scanner pewnie zadziałałby tu najlepiej, ale po pierwsze chciałem sprawdzić, czy nie ma żadnej opcji zrobić tego na char (żeby akceptował tylko pojedyncze litery), a po drugie to nie byłem do końca pewien, jak należy wstawić String, żeby dał radę odczytać go switch. Tak czy siak dzięki!

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