Java - Problem z instrukcją switch

0

Witam, piszę w javie od kilku dni i już napotkałem pierwszy problem. W poniższym programie ciągle wyrzuca mi błędy co do typu zmiennej zastosowanej w instrukcji switch. Ostatecznie stanęło na tym:

 
package stringi;
import java.util.Scanner;
public class Stringi {

    public static void main(String[] args) {
        Scanner tekst = new Scanner(System.in);
        System.out.println("Jak masz na imię?");
        String imie = tekst.nextLine();
        System.out.println("Czy masz na imię " + imie + "?\nt/n");
        
        String nie = tekst.next();
        
        String nazwisko;
        char [] tak;
        tak = nie.toCharArray();
        
        
        boolean i=true;
        while (i = !false){
            switch (tak){     //   incompatible types
                              //   required: int
                              //   found:    char[]
                
                case "t":
            System.out.println("Jak masz na nazwisko?");
            nazwisko = tekst.nextLine(); 
            System.out.println("Nazywasz się " + imie + nazwisko);
            i = false;
            break;
                case "n":
            System.out.println("Jak masz na imię?");
            imie = tekst.nextLine();
            System.out.println("Jak masz na nazwisko?");
            nazwisko = tekst.nextLine(); 
            System.out.println("Nazywasz się " + imie + nazwisko);
            i = false;
            break;
                default:
            System.out.println("Podałeś zły symbol. Podaj jeszcze raz:\nt/n");
            nie = tekst.next();
            tak = nie.toCharArray();
            }
    }
    }
}

Proszę o pomoc, siedziałem nad tym do 3 w nocy i nie dałem rady samemu temu sprostać. Z góry dziękuję za pomoc.

0

Jaka wersja Javy? W 7 zmienna użyta w switchu może być typu String, we wcześniejszych musi być typu stałoprzecinkowego (char, byte, int). W żadnej wersji nie może być typu char[].

0
bogdans napisał(a):

Jaka wersja Javy? W 7 zmienna użyta w switchu może być typu String, we wcześniejszych musi być typu stałoprzecinkowego (char, byte, int). W żadnej wersji nie może być typu char[].

Java w wersji 7., tak przynajmniej mi się wydaje, bo aktualizowałem wszystko niedawno ze strony Oracle'a. Po zmianie z char [], na char pokazuje taki błąd:

 
package stringi;
import java.util.Scanner;
public class Stringi {

    public static void main(String[] args) {
        Scanner tekst = new Scanner(System.in);
        System.out.println("Jak masz na imię?");
        String imie = tekst.nextLine();
        System.out.println("Czy masz na imię " + imie + "?\nt/n");
        
        String nie = tekst.next();
        
        String nazwisko;
        char tak;
        tak = nie.charAt(0);
        
        
        boolean i=true;
        while (i = !false){
            switch (tak){
                case "t":   // incompatible types
                            //required: char
                            //found:    String
            System.out.println("Jak masz na nazwisko?");
            nazwisko = tekst.nextLine(); 
            System.out.println("Nazywasz się " + imie + nazwisko);
            i = false;
            break;
                case "n":   // incompatible types
                            //required: char
                            //found:    String
            System.out.println("Jak masz na imię?");
            imie = tekst.nextLine();
            System.out.println("Jak masz na nazwisko?");
            nazwisko = tekst.nextLine(); 
            System.out.println("Nazywasz się " + imie + nazwisko);
            i = false;
            break;
                default:
            System.out.println("Podałeś zły symbol. Podaj jeszcze raz:\nt/n");
            nie = tekst.next();
            tak = nie.charAt(0);
            }
    }
    }
}
1

Zmień "t" na 't' i "n" na 'n'. "t" i "n" są typu String, a zmienna tak jest typu char.

0

Już działa, wielkie dzięki :) Nigdzie jakoś nie mogłem się doczytać, że " " to string a ' ' char...

0

Wyskoczył jeszcze jeden problem ;/

do{
            switch (tak){
                case 't':
                    i = true;
            System.out.println("Jak masz na nazwisko?");
            nazwisko = tekst.next(); 
            System.out.println("Nazywasz się " + imie + " " + nazwisko);
            break;
            
                case 'n':
                    i = true;
            System.out.println("Jak masz na imię?");
            imie = tekst.next();
            System.out.println("Jak masz na nazwisko?");
            nazwisko = tekst.next(); 
            System.out.println("Nazywasz się " + imie + " " + nazwisko);
            break;
                default:
                    i = false;
            System.out.println("Podałeś zły symbol. Podaj jeszcze raz:\nt/n");
            nie = tekst.next();
            tak = nie.charAt(0);
            }
    }
        while (i = false);

Kiedy wybieram inną literę niż 't' lub 'n', zamiast ponownie zapytać o znak i wrócić na początek pętli, program po ponownym podaniu znaku kończy działanie:

run:
Jak masz na imię?
kamil
Czy masz na imię kamil?
t/n
d
Podałeś zły symbol. Podaj jeszcze raz:
t/n
t
<font color="green">BUILD SUCCESSFUL (total time: 7 seconds)</span>

Co zrobiłem źle?

0

= to operator przypisania
== to operator porównania
popraw warunek w while

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