[英]How to display a “print” error when the user enters wrong character or invalid input data?
[英]How to print error message when user enters anything that is not a double?
我正在嘗試創建一個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");
}
}
}
你有正確的想法。 您只需要在最后一個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");
}
為了在用戶輸入雙num1
值之前顯示錯誤消息,我對每個值( num1
和num2
)使用了while
循環。
如果用戶輸入了錯誤的值"Wrong vaule entered, Please enter again: "
輸入了錯誤的值"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);
}
}
}
嘗試運行您的代碼,當您輸入第一個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
之差的絕對值,則要做的只是:import 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");
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.