Как исправить оператор if, использующий parseInt (), чтобы активировать остальную часть else, и моя программа не перестала работать? - PullRequest
0 голосов
/ 09 ноября 2019

Я написал программу, которая запрашивает ввод данных пользователем (числа), а затем сообщает пользователю, какое из двух введенных чисел больше, после того, как оба значения являются числами. Это зациклено. Проблема в том, что когда пользователь вводит что-то недопустимое, программа выключается, а не ссылается на мои операторы else. Я думаю, это потому, что текстовые значения в строках не могут быть обработаны с помощью parseInt (), поэтому вместо того, чтобы программа понимала, что текстовое значение не является допустимым числом, оно просто завершается ошибкой. Я использую BlueJ для создания этой программы, если это поможет кому-нибудь решить проблему. Я также открыт для людей, рассказывающих мне, как сделать мою программу более эффективной / простой в программировании (я новичок).

import java.util.Scanner;
public class TemperatureDriver {
    public static void main(String[] args) {
        while (true) {
            Scanner keyInput = new Scanner(System.in); 
            System.out.print("Enter a number"+ "\n");
            String number_one = keyInput.next();

            if (Integer.parseInt(number_one) <=0 || Integer.parseInt(number_one) > 0) {
                System.out.print("Enter another number" + "\n");
                String number_two = keyInput.next();     

                if(Integer.parseInt(number_two) <=0 || Integer.parseInt(number_two) > 0){

                    if (Integer.parseInt(number_one) > Integer.parseInt(number_two)) {
                        System.out.print(number_one + " is greater than " + number_two + "\n" + "\n");
                    } else if(Integer.parseInt(number_one) < Integer.parseInt(number_two)){
                        System.out.print(number_one + " is less than " + number_two + "\n" + "\n");
                    } else if(Integer.parseInt(number_one) == Integer.parseInt(number_two)){
                        System.out.print(number_one + " is equal to " + number_two + "\n" + "\n");
                    }                

                } else {
                    System.out.println("Invalid number!"+ "\n");
                }  

            } else {
                System.out.println("Invalid number!"+ "\n");
            }  

        }
    }
}

1 Ответ

0 голосов
/ 09 ноября 2019

Ваш код, по которому вы звоните parseInt, должен быть встроен в блок try, за которым следует блок catch, чтобы перехватить NumberFormatException.

try {
    if (Integer.parseInt(number_one) <= 0 || Integer.parseInt(number_one) > 0) {
      System.out.print("Enter another number" + "\n");
      String number_two = keyInput.next();

      if (Integer.parseInt(number_two) <= 0 || Integer.parseInt(number_two) > 0) {

        if (Integer.parseInt(number_one) > Integer.parseInt(number_two)) {
          System.out.print(number_one + " is greater than " + number_two + "\n" + "\n");
        } else if (Integer.parseInt(number_one) < Integer.parseInt(number_two)) {
          System.out.print(number_one + " is less than " + number_two + "\n" + "\n");
        } else if (Integer.parseInt(number_one) == Integer.parseInt(number_two)) {
          System.out.print(number_one + " is equal to " + number_two + "\n" + "\n");
        }

      } else {
        System.out.println("Invalid number!" + "\n");
      }

    } else {
      System.out.println("Invalid number!" + "\n");
    }
  } catch (NumberFormatException e) {
    System.out.println("Not a valid number");
  }
...