instrukcje warunkowe w wyjątkach

0

Witam, mam problem z napisaniem własnego wyjątku, który sprawdzałby, czy zmienna typu String ma konkretną wartość (R lub M).
Ogólnie, poniższa aplikacja ma segregować elementy tablicy rosnąco lub malejąco wg wyboru użytkownika. Normalnie zrobiłbym z instrukcją else ale wytyczne są takie, że musi być to obsługiwany wyjątek. Proszę pomóżcie

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class test {
    class BladS extends Exception{

        public BladS(String message) {
            super(message);
        }
    }

    public static String pobierzWybor() throws IOException {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        return br.readLine();
    }

    public String czytajWybor() throws BladS {
        try {
            String znaki = pobierzWybor();
            if (znaki == "R" && znaki == "M") {
                return znaki;
            }
        } catch (Exception e) {
            throw new BladS("Dozwolona forma wyboru to R - rosnąco i M - malejąco.");
        }
            return null;
    }

    public static void main(String[] args) {
        int[] tab = new int[] {123, 432, 23, 54, 198};

        System.out.print("Wybierz formę sortowania: R - rosnąco lub M - malejąco: ");
        String wyb = czytajWybor();

        if (wyb == "R") {
            for (int i = 0; i < tab.length; i++) {
                for (int j = i + 1; j < tab.length; j++) {
                    if (tab[i] > tab[j]) {
                        int pom = tab[i];
                        tab[i] = tab[j];
                        tab[j] = pom;
                    }
                }
            }
        }

        if (wyb == "M") {
            for (int i = 0; i < tab.length; i++) {
                for (int j = i + 1; j < tab.length; j++) {
                    if (tab[i] < tab[j]) {
                        int pom = tab[i];
                        tab[i] = tab[j];
                        tab[j] = pom;
                    }
                }
            }
        }
    }
}
0

Ech... porównywanie stringów wygląda tak:

String str = "Ala ma kota";
if ("Ala ma kota 2".equals(str)) { ... } else {...}
1

Poza tym nie sprawdzasz, czy String ma dozwoloną wartość. Przechwytujesz jedynie IOException i zamiast niego wywalasz własny wyjątek. No i nie istnieje taki String, który jednocześnie jest ciągiem "R" i "M". Powinno być:

public String czytajWybor() throws BladS, IOException {
    String znaki = pobierzWybor();
    if ("R".equals(znaki) || "M".equals(znaki)) {
        return znaki;
    } else {
        throw new BladS("Dozwolona forma wyboru to R - rosnąco i M - malejąco.");
    }
}

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