Java 当有人在变量上键入错误信息时,如何避免错误?
我是新来的,所以如果我的问题有什么错误或者在错误的部分,请原谅。我现在正在练习Java,我想知道怎么做。代码如下:Java 当有人在变量上键入错误信息时,如何避免错误?,java,variables,Java,Variables,我是新来的,所以如果我的问题有什么错误或者在错误的部分,请原谅。我现在正在练习Java,我想知道怎么做。代码如下: package train; import java.util.Scanner; public class Train { public static double sum(double n1, double n2){ double sum = n1 + n2; return sum; } public static double subtraction(
package train;
import java.util.Scanner;
public class Train {
public static double sum(double n1, double n2){
double sum = n1 + n2;
return sum;
}
public static double subtraction(double n1, double n2){
double subtraction = n1 - n2;
return subtraction;
}
public static double mult(double n1, double n2){
double mult = n1 * n2;
return mult;
}
public static double div(double n1, double n2){
double div = n1 / n2;
return div;
}
public static void main(String[] args) {
int choice;
boolean stay = true;
double val1, val2;
Scanner sc = new Scanner(System.in);
while (stay = true){
System.out.println("Selecione a operação desejada.");
System.out.println("1 - Adição, 2 - Subtração, 3 - Multiplicação, 4 - Divisão; Pressione 0 para sair.");
choice = sc.nextInt();
switch(choice){
case 1:
System.out.println("Digite dois valores a serem somados: ");
val1 = sc.nextDouble();
val2 = sc.nextDouble();
double valsum = sum(val1, val2);
System.out.printf("A soma desses dois valores é %f. ", valsum);
break;
case 2:
System.out.println("Digite dois valores a serem subtraídos: ");
val1 = sc.nextDouble();
val2 = sc.nextDouble();
double valsubtraction = subtraction(val1, val2);
System.out.printf("A subtração desses dois valores é %f. ", valsubtraction);
break;
case 3:
System.out.println("Digite dois valores a serem multiplicados: ");
val1 = sc.nextDouble();
val2 = sc.nextDouble();
double valmult = mult(val1, val2);
System.out.printf("A multiplicação desses dois valores é %f. ", valmult);
break;
case 4:
System.out.println("Digite dois valores a serem divididos: ");
val1 = sc.nextDouble();
val2 = sc.nextDouble();
double valdiv = div(val1, val2);
System.out.printf("A divisão desses dois valores é %f. ", valdiv);
break;
case 0:
System.exit(0);
break;
default:
System.out.println("Esta não é uma operação válida.");
break;
}
}
}
}
当用户在任何变量上键入“已接受”信息以外的信息时(如在“双精度”变量上键入文本),程序将给出错误。有可能避免吗
如果是这样,我该怎么做?您可以捕获错误,然后重新启动while循环,并向用户发出新的提示 类扫描程序在不读取int时很可能引发一些异常。首先,您可以
try{
choice = sc.nextInt();
}
catch(InputMismatchException e){
choice=-1;
e.printStackTrace();
}
并尝试使用调试器跟踪程序执行。只是一个简单的示例。如果用户输入了不匹配的输入类型值。变量将获得负值。这是-1
Scanner input = new Scanner(System.in);
system.out.println("Enter a double number: ");
double number;
while (number <=0){
try{
number = input.nextDouble();
}
catch(InputMismatchException ex){
System.out.println("Please Enter a valid number");
}
input.nextLine(); // clears the buffer
}
扫描仪输入=新扫描仪(System.in);
system.out.println(“输入一个双精度数字:”);
双数;
while(number通常应该使用has*方法之一进行检查。奇怪的是,每个人都想捕获异常
while (!sc.hasNextDouble()) {
System.out.println("Bonvolu tajpi nombron");
sc.next(); // Discard the rubbish.
}
val1 = sc.nextDouble();
while (!sc.hasNextDouble()) {
System.out.println("Bonvolu tajpi nombron");
sc.next(); // Discard the rubbish.
}
val2 = sc.nextDouble();
虽然没有“已扫描下一个双精度”标记,但请继续读取非特定的“下一个”标记
可以使用函数来防止代码复制
private static double scanDouble(Scanner sc, String errorMessage) {
while (!sc.hasNextDouble()) {
System.out.println(errorMessage);
sc.next(); // Discard the rubbish.
}
return sc.nextDouble();
}
java.util.Scanner类的文档是这个问题的一个很好的起点:
当查看其中的方法时,您会发现Scanner支持一系列用于测试输入令牌数据类型的方法,这些方法是hasNextXXXX()方法(hasNextFloat()、hasNextDouble()等)。使用这些方法,您可以对用户提供的输入执行条件检查,并使用这些检查确定是使用和操作提供的值,还是通知用户输入无效。一个简单的示例:
package inputtest;
public class InputTest {
public static void main(String[] args) {
java.util.Scanner scanner = new java.util.Scanner(System.in);
System.out.print("Please enter an integer value: ");
while(scanner.hasNext()) {
if (scanner.hasNextInt()) {
int x = scanner.nextInt();
System.out.println("Thanks for the integer; you provided: " + x);
} else {
System.out.println("Sorry, you did not provide and integer value.");
break;
}
}
}
}
显然,您可以选择重新提示输入,而不是在此处中断,但方法是相同的。您可以用当前代码捕获inputmaschException
,或者将输入解析为String
,并从中解析数据,如果您想要更大的灵活性。您需要将异常类型缩小为input不匹配异常
,这样您就不会捕获到不想捕获的内容