我目前正在努力学习Udemy Java课程,并且正在练习迄今为止所学到的知识。
我有以下简单的程序,我打算用它来让用户输入他的名字。
import java.util.Scanner;
public class Adventure {
public static final int menuStars = 65;
private static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
String firstName = "";
String lastName = "";
boolean validName = false;
while(!validName){
//Entering first name
System.out.println("Please enter your first name.");
try {
firstName = input.nextLine();
if(firstName.length() == 0){
throw new Exception("Please enter a first name of at least 1 character.");
}else{
//Entering last name
System.out.println("Please enter your last name.");
lastName = input.nextLine();
if(lastName.length() == 0){
throw new Exception("Please enter a last name of at least 1 character");
}else{
System.out.println("You have entered " + firstName +" " + lastName);
}
}
} catch (Exception e) {
System.out.println(e.getMessage());
continue;
}
//Used to terminate loop when both first & last names are valid
validName = true;
}
}
}
当用户输入空白名称而不是从头重新启动整个程序时,我想让程序重复错误消息。
例如,当用户输入空白名字时,我希望程序不断重复“请输入至少1个字符的名字”,当用户输入空白姓氏时,要继续重复“请输入在用户输入有效名称之前,至少包含1个字符的姓氏。
但是,目前当用户输入空白的名字或姓氏时,我的程序将从一开始就重复,而不是只重复错误信息。
如何让程序重复出现错误信息?
答案 0 :(得分:1)
使用一个布尔变量,当“请输入你的名字”时,该变量存储为true。打印出来。如果此变量为false,则每次打印此字符串前检查。此外,在循环之前将其初始化为false。姓氏也是一样的想法。
if(!printed)
{
System.out.println("Please enter your first name.");
printed=true;
}
答案 1 :(得分:1)
还没有测试过,但我猜它可能就是这样,但是尝试使用try / catch,这对我使用它在代码中的方式没有任何意义
String firstName = "";
String lastName = "";
System.out.println("Please enter your first name.");
firstName = input.nextLine();
while(firstName.length<1){
System.out.println("Please enter a first name of at least 1 character.");
firstName = input.nextLine();
}
lastName=input.nextLine();
while(firstName.length<1){
System.out.println("Please enter a last name of at least 1 character.");
lastName = input.nextLine();
}
System.out.println("You have entered " + firstName +" " + lastName);
编辑,有关异常的一些基本信息 try catch用于意外发生的事情,你试图找到一种绕过它的方法。例如,如果在某个点预期有10个位置的数组,则使用较小的数组(比如4个位置)。然后,这将导致导致程序终止而没有进一步信息的异常。
使用try catch,您可以检查问题所在,并尝试通知用户执行某些操作(如果可以)或以更好的方式关闭程序,例如使用System.exit()并保存所有在那之前完成的工作
另一个例子是,如果你要求2个数字进行添加。如果用户输入字母而不是数字,则int sum=numbA+numbB;
将抛出异常。这当然可以使用if来处理。但更好的是this
答案 2 :(得分:0)
空格实际上被认为是一个字符,因此(长度== 0)的检查不适用于您的目的。
虽然下面的代码不完整(例如:处理firstname =“foo”的潜在不良情况,(请参阅函数.contains()),它会执行原始帖子要求的内容 - 当用户首先输入空白时/姓氏,它不断重复“请输入至少1个字符的名/姓”,直到用户输入有效的名/姓。
import java.util.Scanner;
public class Adventure {
public static final int menuStars = 65;
private static Scanner input = new Scanner(System.in);
public static void main(String[] args) {
String firstName = "";
String lastName = "";
boolean firstNameLegal = false;
boolean lastNameLegal = false;
// Entering first name
while (!firstNameLegal) {
System.out.println("Please enter your first name.");
firstName = input.nextLine();
if (!firstName.equals(" "))
firstNameLegal = true;
else
System.out.println("Please enter a first name of at least 1 character.");
}
// Entering last name
while(!lastNameLegal){
System.out.println("Please enter your last name.");
lastName = input.nextLine();
if(!lastName.equals(" "))
lastNameLegal = true;
else
System.out.println("Please enter a last name of at least 1 character.");
}
System.out.println("You have entered " + firstName +" " + lastName);
}
}