Ошибка отображения, если ввод системы счисления неверен - PullRequest
0 голосов
/ 07 октября 2019

Я хочу закодировать преобразователь системы счисления в ASCII, используя Java (который я уже пробовал), но я хочу вывести «Invalid», если когда-либо введен неправильный ввод, вместо выхода из программы и отображения ошибки. Надеюсь, что это возможно.

Я уже получил преобразованные выходы. Я просто хочу поставить «Неверный» вывод в случае, если выбранная мной система счисления и ввод не совпадают.

  do{
        opt=displayMainMenu();

        switch(opt){
            case 1: 
                    binary=getBinary();
                    System.out.println("\n\tASCII Character: "+ (char)binary);
                    in.readLine();
                    break;

            case 2: 
                    octal=getOctal();
                    System.out.println("\n\tASCII Character: "+(char)octal);
                    in.readLine();
                    break;

            case 3:
                    decimal=getDecimal();
                    System.out.println("\n\tASCII Character: "+(char)decimal);
                    in.readLine();
                    break;
            //case 4: still don't have Hexadecimal since I find it difficult. Sorry  
            case 5: 
                    System.out.println("\f\n\tGood Bye!");
                    break;

            default: 
                    System.out.print("\n\tInvalid Option.");
                    in.readLine();   
        }


    }while(opt!=5);

// Я просто отправлю один

          public static int getOctal() throws Exception{
          BufferedReader in=new BufferedReader(new InputStreamReader(System.in));
        Scanner s=new Scanner(System.in);   
    System.out.println("\f\n\t\t- Octal -\n");

    System.out.print("\n\tInput Octal Number:  ");
    String n=s.nextLine();

    int oct = Integer.parseInt(n,8);
    return oct;
}

ПримерВвод:

Выбор системы счисления: 2 // Восьмеричное в ASCII

Вводное восьмеричное число: 3A // шестнадцатеричное

Выход: неверно.

Выберите систему счисления: 2 // Восьмеричное в ASCII

Вводное восьмеричное число: 041 //, что является правильным

Вывод: ASCII - это!

1 Ответ

1 голос
/ 07 октября 2019

Если вы спросите меня, я думаю, что ваш getOctal () метод действительно должен называться getIntegerFromOctal () . Но эй ... может быть, это только я.

То, что многие люди делают, это оборачивают разбор в блок try / catch и отлавливают любые ошибки, что-то вроде этого:

public static int getIntegerFromOctal() {
    Scanner s = new Scanner(System.in);
    String ls = System.lineSeparator();

    System.out.println(ls + "    - Octal -");
    while (true) {
        System.out.print("Input Octal Number:  ");
        String n = s.nextLine();
        int oct = 0;
        try {
            oct = Integer.parseInt(n, 8);
            return oct;
        }
        catch (NumberFormatException ex) {
            System.err.print("Invalid Octal Value Supplied! Try again..." + ls + ls);
        }
    }
}

Другой способ сделать это - использовать Регулярное выражение (RegEx) в сочетании с методом String # matchs () :

public static int getIntegerFromOctal() {
    Scanner s = new Scanner(System.in);
    String ls = System.lineSeparator();

    System.out.println(ls + "    - Octal -");
    while (true) {
        System.out.print("Input Octal Number:  ");
        String n = s.nextLine();
        int oct = 0;
        /* The String#matches() method is used here with a
           regex that ensures that only digits from 0 to 7 
           (octal digits) are supplied. If you want to also
           ensure Integer Literal where the integer value
           supplied starts with a 0 then use: "^0[0-7]+$" */
        if (!n.matches("^[0-7]+$")) {
            System.err.print("Invalid Octal Value (" + n + ") Supplied! Try again..." + ls + ls);
            continue;
        }
        oct = Integer.parseInt(n, 8);
        return oct;
    }     
}
...