我是新来的,所以如果我的问题上有任何错误,或者在错误的部分中,我会原谅我。我现在正在练习爪哇,我想知道该怎么做。这是代码:
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;
}
}
}
}
当用户在任何一个变量上键入"接受"信息以外的其他内容(例如在'double'变量上键入文本)时,该程序会出现错误。可以避免吗?
如果是这样,我该怎么做?
您可以使用尝试捕获语句来捕获错误,然后用新的提示重新启动您的WARE循环。
类扫描仪很可能是在不读取int时会引发一些例外。首先,您可以
try{
choice = sc.nextInt();
}
catch(InputMismatchException e){
choice=-1;
e.printStackTrace();
}
并尝试使用调试器跟踪程序执行。
通常应使用其中一种方法来检查。奇怪的是,每个人都想捕捉例外。
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类的文档是一个开始的好地方:
https://docs.oracle.com/javase/8/docs/api/java/java/util/scanner.html
在查看其中的方法时,您会发现扫描仪支持一系列测试输入令牌数据类型的方法,即Hasnextxxxx()方法(HasnextFloat(),HasnextDuble()等)。使用这些方法,您可以对用户提供的输入进行有条件检查,并使用这些检查来确定是否消耗和操作提供的值,或者通知用户输入无效。一个琐碎的例子:
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;
}
}
}
}
显然,您可以选择重新提交输入,而不是在此处突破,但是这些方法是相同的。
只是简单的示例。如果用户输入不匹配的输入类型值。该变量将获得负值。是-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
}