Java 如果还是异常?
Java if or exception?
static void getFirstName() {
System.out.println("Please enter Client's first name");
String sFirstName = sc.nextLine().toUpperCase();
monthlyRates.setFirstName(sFirstName);
System.out.println("You wrote "
+ sFirstName
+ " is that correct? \n"
+ "Y or N");
String sYesNo = sc.next().toUpperCase();
if (!"N".equals(sYesNo) && !"Y".equals(sYesNo)) {
System.out.println("Please enter Y or N");
//re-run this snippet. Can this be nested?
}else ("N".equals(sYesNo)){
getFirstName();
}
}
}
我想在上面添加一些错误检查。如果 sFirstName 是正确的,由 Y 确认,那么它将移至下一段代码。如果是 N,它会重新运行代码。如果不是 Y 或 N,它会重新运行 if。
我查看了例外情况,但不确定它们是否适合上述情况?如有任何帮助,我们将不胜感激!
谢谢,
我给你举了几个例子 - 也许你喜欢其中的一些。
我个人的意见是尽可能少地使用异常,因为它们会非常异常地中断您的控制流,并且可能非常无例外,它们必须被捕获(在运行时异常上可能很棘手 - 因为您必须知道您正在调用的代码 - 这是不是信息隐藏)和 try catch 块与简单的 if 语句相比非常难看 :-) 但代码:
private boolean confirmFirstName(String firstName) {
System.out.println("You wrote "
+ firstName
+ " is that correct? \n"
+ "Y or N");
final String answer = sc.next().toUpperCase();
return answer.equalsIgnoreCase("y");
}
private String enterFirstName() {
System.out.println("Please enter Client's first name");
final String sFirstName = sc.nextLine().toUpperCase();
return sFirstName;
}
private void getFirstNameV1() {
final int maxTrials = 5;
// loop for max trials times and break if input is correct
for (int i = 0; i < maxTrials; i++) {
final String firstName = enterFirstName();
if (confirmFirstName(firstName)) {
setMonthlyRates(firstName);
break;
}
}
}
private void getFirstNameV2() {
final String firstName = enterFirstName();
final boolean valid = confirmFirstName(firstName);
// use a recursive function but take care,
// there is no exit instead of entering a valid value otherwise you are in an infinite loop
if (valid) {
setMonthlyRates(firstName);
} else {
getFirstNameV2();
}
}
private void getFirstNameV3() {
// first time input
String firstName = enterFirstName();
boolean valid = confirmFirstName(firstName);
// if not valid loop until its valid, there is also no exit of this loop
while (!valid) {
firstName = enterFirstName();
valid = confirmFirstName(firstName);
}
setMonthlyRates(firstName);
}
private void getFirstNameV4() {
// first time input
String firstName = enterFirstName();
boolean valid = confirmFirstName(firstName);
final int maxTrials = 5;
// if not valid loop for max trials times
for (int i = 0; i < maxTrials || valid; i++) {
firstName = enterFirstName();
valid = confirmFirstName(firstName);
}
if (valid) {
setMonthlyRates(firstName);
}
}
private void setMonthlyRates(String firstName) {
monthlyRates.setFirstName(firstName);
}
static void getFirstName() {
System.out.println("Please enter Client's first name");
String sFirstName = sc.nextLine().toUpperCase();
monthlyRates.setFirstName(sFirstName);
System.out.println("You wrote "
+ sFirstName
+ " is that correct? \n"
+ "Y or N");
String sYesNo = sc.next().toUpperCase();
if (!"N".equals(sYesNo) && !"Y".equals(sYesNo)) {
System.out.println("Please enter Y or N");
//re-run this snippet. Can this be nested?
}else ("N".equals(sYesNo)){
getFirstName();
}
}
}
我想在上面添加一些错误检查。如果 sFirstName 是正确的,由 Y 确认,那么它将移至下一段代码。如果是 N,它会重新运行代码。如果不是 Y 或 N,它会重新运行 if。
我查看了例外情况,但不确定它们是否适合上述情况?如有任何帮助,我们将不胜感激!
谢谢,
我给你举了几个例子 - 也许你喜欢其中的一些。 我个人的意见是尽可能少地使用异常,因为它们会非常异常地中断您的控制流,并且可能非常无例外,它们必须被捕获(在运行时异常上可能很棘手 - 因为您必须知道您正在调用的代码 - 这是不是信息隐藏)和 try catch 块与简单的 if 语句相比非常难看 :-) 但代码:
private boolean confirmFirstName(String firstName) {
System.out.println("You wrote "
+ firstName
+ " is that correct? \n"
+ "Y or N");
final String answer = sc.next().toUpperCase();
return answer.equalsIgnoreCase("y");
}
private String enterFirstName() {
System.out.println("Please enter Client's first name");
final String sFirstName = sc.nextLine().toUpperCase();
return sFirstName;
}
private void getFirstNameV1() {
final int maxTrials = 5;
// loop for max trials times and break if input is correct
for (int i = 0; i < maxTrials; i++) {
final String firstName = enterFirstName();
if (confirmFirstName(firstName)) {
setMonthlyRates(firstName);
break;
}
}
}
private void getFirstNameV2() {
final String firstName = enterFirstName();
final boolean valid = confirmFirstName(firstName);
// use a recursive function but take care,
// there is no exit instead of entering a valid value otherwise you are in an infinite loop
if (valid) {
setMonthlyRates(firstName);
} else {
getFirstNameV2();
}
}
private void getFirstNameV3() {
// first time input
String firstName = enterFirstName();
boolean valid = confirmFirstName(firstName);
// if not valid loop until its valid, there is also no exit of this loop
while (!valid) {
firstName = enterFirstName();
valid = confirmFirstName(firstName);
}
setMonthlyRates(firstName);
}
private void getFirstNameV4() {
// first time input
String firstName = enterFirstName();
boolean valid = confirmFirstName(firstName);
final int maxTrials = 5;
// if not valid loop for max trials times
for (int i = 0; i < maxTrials || valid; i++) {
firstName = enterFirstName();
valid = confirmFirstName(firstName);
}
if (valid) {
setMonthlyRates(firstName);
}
}
private void setMonthlyRates(String firstName) {
monthlyRates.setFirstName(firstName);
}