Instrukcja Switch

0

Witam, mam problem ze "switchem", minowicie, zadeklarowałem sobię tablice

double[] VAT = new double[prod]; 

po czym następnie prosze użytkownika o wpisywanie różnych wartości, między innymi właśnie VAT, który ma tylko trzy możliwe do wpisania, i zaimplementowałem to tak

 System.out.print("Wprowadz stawkę VAT produktu:");
            double VATProd = liczba.nextDouble();
                switch(VAT) {
                    case 0.23:
                        System.out.println("23%");
                        break;
                    case 0.08:
                        System.out.println("8%");
                        break;
                    case 0.05:
                        System.out.println("5%");
                        break;
                    default:
                        System.out.println("23%");
                            }
 
            VAT[i] = VATProd;

No i cały czas wyskakuje mi błąd
error: incompatible types
switch(VAT) {
^
required: int
found: double[]

Nie rozumiem czemu wymaga tutaj int, kombinuje kombinuje i nic nie wykombinowałem. Za jakąkolwiek podpowiedź będę wdzięczny

1

Sprawa jest bardzo prosta: switch w Javie wymaga typow ktore sa kompatybilne z int (byte, short, int), enumy (jak sie uprzec to sa kompatybilne z int), oraz od Java 7, String. Wszystko inne (w tym long, double) nie sa mozliwe do uzycia w switchu.
Dodatkowo u Ciebie jest chyba bug - pobierasz VATProd, i chyba na nim chciales robic switch, a w switch uzywasz VAT, ktory jest double[] - widac to po ostatniej linijce twojego kodu.

Innymi slowy - nie ma uja, nie uzyjesz double w switchu tak jak probuja.

1

Nie da się zrobić switch z doublem. Musisz tutaj mieć if..else. Poza tym NIE WOLNO porównywać doubli w taki sposób. Musisz to robić z pewną deltą tzn (próg-wartość)<epsilon

0

Dzięku za odpowiedzi panowie - oczywiście od razu pojawia się następny problem.
Skoro nie da rady double to chciałem rozwiązać to inaczej - mianowicie prosić użytkownika o wpisanie procentowej stawki VAT i użycie int.

int[] VAT = new int[prod];
System.out.print("Wprowadz procentową stawkę VAT:");
            int VATProd = liczba.nextInt();
                switch(VAT) {
                    case 23:
                        System.out.println("23%");
                        break;
                    case 8:
                        System.out.println("8%");
                        break;
                    case 5:
                        System.out.println("5%");
                        break;
                    default:
                        System.out.println("23%");
                            }

I teraz z kolei wyskakuje błąd kompilacji:
error: incompatible types
switch(VAT) {
^
required: int
found: int[]

Już kompletnie się zmieszałem

1

Nie mozesz do switcha wstawic tablicy intow, a to wlasnie probujesz zrobic. Gdybys w switchu mial VATProd a nie VAT to pewnie by dzialalo.

1

Mućka napisał:

Dodatkowo u Ciebie jest chyba bug - pobierasz VATProd, i chyba na nim
chciales robic switch, a w switch uzywasz VAT, ktory jest double[] -
widac to po ostatniej linijce twojego kodu.

0

Po paru poprawkach i wpisaniu w switcha VATprod niby wszystko OK, bo program sie kompiluje i w konsoli działa, ale w JCreatorze po kompilacji jest zupełny brak reakcji (nic się nie dzieje). Ehh

0

A ja osobiście zastanawiam się czemu koniecznie chcesz użyć switch? Czy nie prościej było by:

int VAT[] = new int[]{5, 8, 23};
int VATProd = liczba.nextInt();
if(!Arrays.asList(VAT).contains(VATProd)){
	// błędny VAT
        return 
}
// tu obsługa poprawnego vatu

Jeden prosty if, w miarę ludzki przepływ w programie, porządna weryfikacja wprowadzonej wartości.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.