尝试在try中打印一些内容,这样当其中一个输入为0时,它会显示一些内容

时间:2015-11-23 08:04:06

标签: loops try-catch calculator

我正在尝试使用菜单创建一个计算器,用户可以输入1,2,3,4来选择他们想要的操作,#4是分区。 我试图这样做,以便当secondN(我要求一次空格分隔2个输入),这是第二个值为0时,它会说“你不能将数字除以0.请输入另一个号码:“并允许用户再次输入两个号码。但是因为除以零会自然地给出无穷大,我很难完成这个。

我已经尝试过,如果......其他内部尝试,但我无法让它工作。 我的代码目前如下。

if(inputInt == 4){ do {
                System.out.print("Please enter two floats to divide, separated by a space:   ");
                try { firstN = readInput.nextFloat();
                     secondN = readInput.nextFloat();
                    break;  
                 } 
                catch (final InputMismatchException e) {
                    secondN = readInput.nextFloat();
                    System.out.println ("You have entered invalid value(s). Please enter valid value(s).");
                    readInput.nextLine();
                    continue;
                }
                 }while (true);
                    System.out.printf("Result of dividing %5.2f by %5.2f is %5.2f",  firstN, secondN, firstN/secondN);
                    System.out.println("\n \nPlease press enter to return to the main menu.");
                    Scanner keyboard = new Scanner(System.in);
                    keyboard.nextLine();    

    }

1 个答案:

答案 0 :(得分:0)

添加此功能(可能有点非正统)的一种快速而廉价的方法是在try-block中检查0并抛出自己的InputMismatchException。

do {
    System.out.print("Please enter two floats to divide, separated by a space:   ");
    try {
        firstN = readInput.nextFloat();
        secondN = readInput.nextFloat();
        if(secondN == 0) {
            System.out.println("The denominator cannot be 0.");
            throw new InputMismatchException();
        }
        break;
    } catch (final InputMismatchException e) {
        System.out.println("You have entered invalid value(s). Please enter valid value(s).");
        readInput.nextLine();
    }
} while (true);

你应该注意的一件事是你的catch-block中的行secondN = readInput.nextFloat();。你输入catch块是可能的,因为try-block中的语句secondN = readInput.nextFloat();不起作用(所以再次这样做会抛出另一个异常。)