我在使用这个try/catk语句时遇到了麻烦。我试图用它抛出一条错误消息,上面写着,“请输入一个整数!”如果用户输入一个字母。我使用的第一个成功了,但是它最终需要两行用户输入,而不仅仅是一行,所以它基本上跳过了一个应该问的问题。在那之后,其他的都不起作用,它们只是被完全跳过。我还需要对用户输入做同样的事情,如果用户在字母应该在的地方输入整数,它会抛出一条错误消息,上面写着“请输入字符串!”。我知道我很接近了!
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean validInput = false;
int val = 0;
System.out.print("Enter your first name: ");
String firstName = input.nextLine();
System.out.print("Enter your last name: ");
String lastName = input.nextLine();
System.out.print("Enter your address: ");
String address = input.nextLine();
System.out.print("Enter your city: ");
String city = input.nextLine();
System.out.print("Enter your state: ");
String state = input.nextLine();
System.out.print("Enter your zip code + 4: ");
String zip = input.nextLine();
while(!validInput) {
try {
val = input.nextInt();
validInput = true;
} catch(Exception e) {
System.out.println("Please enter an integer!");
input.nextLine();
}
}
System.out.print("Enter amount owed: ");
String amount = input.nextLine();
while(!validInput) {
try {
val = input.nextInt();
validInput = true;
} catch(Exception e) {
System.out.println("Please enter an integer!");
input.next();
}
}
System.out.print("Enter your payment amount: ");
String payment = input.nextLine();
while(!validInput) {
try {
val = input.nextInt();
validInput = true;
} catch(Exception e) {
System.out.println("Please enter an integer!");
input.next();
}
}
System.out.print("Enter the date of payment: ");
String date = input.nextLine();
while(!validInput) {
try {
val = input.nextInt();
validInput = true;
} catch(Exception e) {
System.out.println("Please enter an integer!");
input.next();
}
}
System.out.println("\t\t\t\t\t" + "XYZ Hospital");
System.out.println();
System.out.println("Name Information" + "\t\t\t\t" + "Address" + "\t\t\t\t\t\t" + "Payment");
System.out.println();
System.out.println("Last" +"\t"+ "First" + "\t\t\t" + "Address Line 1" + "\t" + "City" + "\t" + "State" + "\t" + "Zip" + "\t" + "Amount Owed" + "\t" + "Payment Amount" + "\t" + "Payment Date");
System.out.println();
System.out.println(lastName + " " + firstName + "\t" + address + " " + city + ", " + state + " " + zip + "\t" + amount + "\t\t" + payment +"\t\t"+ date);
System.out.print("Would you like to enter abother patient? Type Yes or No: ");
String userInput = input.nextLine();
if (userInput.equals("Yes")) {
while (userInput.equals("Yes")) {
System.out.print("Enter your first name: ");
String firstName2 = input.nextLine();
System.out.print("Enter your last name: ");
String lastName2 = input.nextLine();
System.out.print("Enter your address: ");
String address2 = input.nextLine();
System.out.print("Enter your city: ");
String city2 = input.nextLine();
System.out.print("Enter your state: ");
String state2 = input.nextLine();
System.out.print("Enter your zip code + 4: ");
String zip2 = input.nextLine();
System.out.print("Enter amount owed: ");
String amount2 = input.nextLine();
System.out.print("Enter your payment amount: ");
String payment2 = input.nextLine();
System.out.print("Enter the date of payment: ");
String date2 = input.nextLine();
System.out.println("\t\t\t\t\t" + "XYZ Hospital");
System.out.println();
System.out.println("Name Information" + "\t\t\t\t" + "Address" + "\t\t\t\t\t\t" + "Payment");
System.out.println();
System.out.println("Last" +"\t"+ "First" + "\t\t\t" + "Address Line 1" + "\t" + "City" + "\t" + "State" + "\t" + "Zip" + "\t" + "Amount Owed" + "\t" + "Payment Amount" + "\t" + "Payment Date");
System.out.println();
System.out.println(lastName2 + " " + firstName2 + "\t" + address2 + " " + city2 + ", " + state2 + " " + zip2 + "\t" + amount2 + "\t\t" + payment2 +"\t\t"+ date2);
System.out.print("Would you like to enter another patient? Type Yes or No: ");
userInput = input.nextLine();
}
}
else if (userInput.equals("No")) {
System.out.println("Goodbye");
}
也许是一个快速的解决方案,我用了扫描仪。hasNextInt
要在获取所需Int之前检查下一个令牌是什么:
import java.util.Scanner;
public class java_so {
private static int privateGetInt(String request, Scanner input) {
// cant be false, but we return when done.
while (true) {
// print the question
System.out.println(request);
// check what the next token is, if an int we can then retrieve
if (input.hasNextInt() == true) {
int out = input.nextInt();
input.nextLine(); // clear line, as nextInt is token orientated, not line,
return out;
} else {
// else for when not an int, clear line and try again
input.nextLine();
}
}
}
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.print("Enter your first name: ");
System.out.println(input.nextLine());
// call function above
System.out.println(privateGetInt("enter an Int", input));
System.out.print("Enter your last name: ");
System.out.println(input.nextLine());
System.out.print("Enter your address: ");
System.out.println(input.nextLine());
}
}
这似乎有点像是调用input之后出现的问题。nextInt
您还没有删除该行的其余部分(可能只是“\n”
),因此下一次调用input。getLine()
只会得到这个,跳到一个上面。下面是输入。使用
清除此项。输入获取int
。getLine
您应该在catch block commentinput中获取输入。在catch block中的nextLine()
,它应该可以正常工作
我在代码中添加了解释
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
boolean validInput = false;
int val = 0;
System.out.print("Enter your first name: ");
String firstName = input.nextLine();
System.out.print("Enter your last name: ");
String lastName = input.nextLine();
System.out.print("Enter your address: ");
String address = input.nextLine();
System.out.print("Enter your city: ");
String city = input.nextLine();
System.out.print("Enter your state: ");
String state = input.nextLine();
System.out.print("Enter your zip code + 4: ");
String zip = input.nextLine();
while (!validInput) {
try {
val = input.nextInt();
validInput = true; //if exception occurs this line wont be executed
} catch (Exception e) {
System.out.println("Please enter an integer!");
// input.nextLine(); --remove this line
}
}
System.out.print("Enter amount owed: ");
String amount = input.nextLine();
//reset the value of validInput
//validInput will true after the execution of above while loop
validInput = false;
while (!validInput) {
try {
val = input.nextInt();
validInput = true; //if exception occurs this line wont be executed
} catch (Exception e) {
System.out.println("Please enter an integer!");
// input.next(); -- remove this line
}
}
}
在第一次while循环后,不会将validInput重置为False。所以它不会进入下一个。
我的项目由一个小图标组成,它在一个尺寸为25×20的网格上移动。我知道我可以用几个if/else块轻松地完成这项工作,但我想了解更多关于错误处理的知识。 我当时想的是使用try-catch,但它根本不会捕获数组索引越界异常或任何:它不会返回“error”或位置,因此它永远不会进入catch块。 我在想这样的伪代码: 实际代码:
问题内容: 我正在使用Python,每当必须验证函数输入时,我都认为输入有效,然后捕获了错误。 就我而言,我有一个通用类,用于一些不同的事情,其中之一是加法。它既作为类又作为a起作用,因此当我向标量添加标量时,应将该常数添加到每个单独的组件中。和加法需要按组件进行加法。 这段代码被用于光线追踪器,因此任何速度提升都很棒。 这是我班的简化版: 我目前正在使用该方法。有人知道更快的方法吗? 编辑:
我想嵌套一个try catch,但内部try中没有捕获。 例如: 这可能吗?这是一种良好的做法吗?
问题内容: 我需要捕捉一些从PHP本机函数抛出的警告,然后处理它们。 特别: DNS查询失败时,它将引发警告。 / 不起作用,因为警告也不例外。 我现在有2个选择: 似乎有点过分,因为我必须使用它来过滤页面中的每个警告(这是真的吗?); 调整错误报告/显示,以使这些警告不会在屏幕上显示,然后检查返回值;如果为,则找不到主机名的记录。 这里的最佳做法是什么? 问题答案: 设置和还原错误处理程序 一种
我在do while loop中尝试执行try-catch语句时遇到了一个问题,我要求用户首先输入字母,然后输入一个数字,如果他输入正确,程序结束;如果他输入字母而不是数字,程序应该说“发生错误,请输入数字”,并要求用户再次输入数字,但每次我输入字母而不是数字,程序就进入了一个无限循环,不允许我输入新的值。只是说“发生错误,您必须输入数字”“请输入数字”。
我的sp中有一个try catch块,try中只有一个insert语句。捕捉检查错误代码,如果是pk违规,如果是则做更新。但是有时我会得到“当前事务不能被提交,不能支持写入日志文件的操作。回滚事务。 在批处理结束时检测到不可提交的事务。事务被回滚了“,所以我添加了xact_abort,但后来我不断得到”EXECUTE之后的事务计数表明 BEGIN 和 COMMIT 语句的数量不匹配“,我发现了这一