当用户输入非双的内容时如何打印错误消息?

时间:2018-11-03 19:20:24

标签: java

我正在尝试创建一个Java程序,该程序从用户读取一个双精度值,并打印这两个数字之间的差,以便该差始终为正。如果输入的不是数字,我需要显示一条错误消息。请帮忙,谢谢!!

当我运行程序并输入第二个double值时,没有任何反应。我也尝试过添加try and catch,但是出现错误,提示num1无法解析为变量:(

import java.util.Scanner;
public class Positive {

    public static void main(String[] args) {

        //Reads input
        Scanner sc = new Scanner(System.in);  

        System.out.println ("Please enter a double vaule: ");

            double num1 = Math.abs(sc.nextDouble());
            System.out.println("Please enter a second double vaule: " );
            double num2 = Math.abs(sc.nextDouble());
            double total  = 0;
            double total2 = 0;      

        if (sc.hasNextDouble()) {
        num1 = sc.nextDouble();

        if (num1>num2) {
            total = ((num1 - num2)); 
            System.out.println("The difference is " + total);
        }   

        if ((num1 < num2)); {
            total2 = ((num2 - num1));
            System.out.println("The difference is "+ total2);
        }

        }else {
            System.out.println("Wrong vaule entered");
        }

    }
}

3 个答案:

答案 0 :(得分:0)

您有正确的想法。您只需要删除最后一个;之后的分号(if)并正确嵌套条件即可:

if (sc.hasNextDouble()) {
    num1 = sc.nextDouble();

    if (num1 > num2) {
        total = (num1 - num2); 
        System.out.println("The difference is " + total);
    }   
    else if (num1 < num2) {
        total2 = (num2 - num1);
        System.out.println("The difference is "+ total2);
    }
} else {
    System.out.println("Wrong vaule entered");
}

答案 1 :(得分:0)

为了显示错误消息,直到用户输入双精度值,我为每个值(whilenum1)使用了num2循环。

如果用户输入错误的值"Wrong vaule entered, Please enter again: ",则会显示一条消息,并等待下一次输入sc.next(); 如果用户输入双精度值check将是false并退出while loop

import java.util.Scanner;
public class Positive {

    public static void main(String[] args) {

        // Reads input
        Scanner sc = new Scanner(System.in);

        System.out.println("Please enter a double vaule: ");

        double num1 = 0;
        double num2 = 0;
        double total = 0;
        double total2 = 0;
        boolean check = true;

        while (check) {
            if (sc.hasNextDouble()) {
                num1 = Math.abs(sc.nextDouble());
                check = false;

            } else {
                System.out.println("Wrong vaule entered, Please enter again: ");
                sc.next();
            }
        }
        check = true; // that's for second control
        System.out.println("Please enter a second double vaule: ");
        while (check) {
            if (sc.hasNextDouble()) {
                num2 = Math.abs(sc.nextDouble());
                check = false;

            } else {
                System.out.println("Wrong vaule entered, Please enter again: ");
                sc.next();
            }
        }
        if (num1 > num2) {
            total = ((num1 - num2));
            System.out.println("The difference is " + total);
        } else if ((num1 < num2)) {
            total2 = ((num2 - num1));
            System.out.println("The difference is " + total2);
        } 
    }
}

答案 2 :(得分:0)

尝试运行您的代码,当您输入第一个double时,输入诸如“ abc”之类的随机值。怎么了?在您的控制台中,它应该显示一个名为java.util.InputMismatchException的错误。您可以像这样使用try catch块:

try {
    //tries to get num1 and num2
    double num1 = Math.abs(sc.nextDouble());
    double num2 = Math.abs(sc.nextDouble());
} catch (java.util.InputMismatchException i){
    //will only go here if either num1 or num2 isn't a double
    System.out.println("error");
}

基本上,代码将尝试获取num1num2。但是,如果您输入非双精度数,它将“捕获” java.util.InputMismatchException并进入catch

我可能会误解您的问题,但是如果您想找到num1num2之间的差异的绝对值,您要做的就是:     导入java.util.Scanner;

public class test {

    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        try {
            System.out.println("Please enter a double value: ");
            double num1 = sc.nextDouble();
            System.out.println("Please enter a double value: ");
            double num2 = sc.nextDouble();

            System.out.println("The difference is: " + Math.abs(num1 - num2));

        } catch (java.util.InputMismatchException i) {
            System.out.println("error");
        }
    }
}