我正在尝试创建一个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");
}
}
}
答案 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)
为了显示错误消息,直到用户输入双精度值,我为每个值(while
和num1
)使用了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");
}
基本上,代码将尝试获取num1
和num2
。但是,如果您输入非双精度数,它将“捕获” java.util.InputMismatchException
并进入catch
块
我可能会误解您的问题,但是如果您想找到num1
和num2
之间的差异的绝对值,您要做的就是:
导入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");
}
}
}