[英]How can i check if the user input is not string in java
我希望我的程序只接受字符串並在用戶輸入無效時提示消息。
import java.util.Scanner;
public class Details{
public static void main(String[] args){
Scanner input = new Scanner(System.in);
String lastname;
String firstname;
String middlename;
System.out.print("Enter Number of passenger : ");
int passenger = input.nextInt();
for(int x = 0 ; x < passenger ; x++){
do{
System.out.print("\nEnter Lastname :");
lastname = input.nextLine().trim();
if(lastname.equals("") || lastname.equals(" "))
{
System.out.print("\nEnter Neccessary Details");
}
} while(lastname.isEmpty());
do{
System.out.print("\nEnter Firstname : ");
firstname = input.nextLine();
if(firstname.equals("") || firstname.equals(" "))
{
System.out.print("\nEnter Neccessary Details");
}
} while(firstname.isEmpty());
do{
System.out.print("\nEnter Firstname : ");
middlename = input.nextLine();
if(middlename.equals("") || middlename.equals(" "))
{
System.out.print("\nEnter Neccessary Details");
}
}while(middlename.isEmpty());
}//end of forloop
}
}
我已經嘗試過這段代碼,起初它可以工作,但從長遠來看它會顯示邏輯錯誤。 給我一個這樣的輸出。
sample output
Enter Firstname : // the problem is, it seems has already have an input
Enter Neccessary Details
Enter Firstname :
那么我該如何解決這個問題? 有沒有其他方法來驗證字符串輸入? 請保持簡單我只是一個初學者謝謝
您可以使用trim()
方法刪除字符串開頭和結尾的所有空格,然后檢查它是否為空:
firstname = input.nextLine().trim();
編輯:此代碼似乎可以按您的需要工作:
import java.util.Scanner;
public class Details {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String lastname;
String firstname;
String middlename;
System.out.println("Enter Number of passenger : ");
int passenger = input.nextInt();
input.nextLine();
for (int x = 0; x < passenger; x++) {
do {
System.out.println("Enter Lastname :");
lastname = input.nextLine().trim();
if (lastname.isEmpty()) {
System.out.println("\nEnter Neccessary Details");
}
} while (lastname.isEmpty());
do {
System.out.println("Enter Firstname : ");
firstname = input.nextLine().trim();
if (firstname.isEmpty()) {
System.out.println("\nEnter Neccessary Details");
}
} while (firstname.isEmpty());
do {
System.out.println("Enter Middlename : ");
middlename = input.nextLine().trim();
if (middlename.isEmpty()) {
System.out.println("Enter Neccessary Details");
}
} while (middlename.isEmpty());
}
}
}
這里的主要變化是我用System.out.print
替換了System.out.println
。 System.out.print
僅在以下input.nextLine()
讀取完成后才以某種方式打印( System.out.flush
打印后立即不起作用),因此您似乎在輸入開始時按 Enter 按鈕,並且該空行由Scanner
讀取。 此外,我在讀取passenger
數量后立即添加了input.nextLine()
行,因此Scanner
在讀取該數字后轉到下一行。
因為Scanner.nextInt
方法不會讀取您輸入中的換行符,所以您需要使用nextInt
之后的行:
int passenger = input.nextInt();
input.nextLine();
這將解決它似乎已經有輸入問題。
有關詳細信息,請參閱此內容。
由於多次使用相同的掃描儀,掃描儀似乎有問題。 嘗試以如下方法使用掃描儀:
public String getInput () {
Scanner sc = new Scanner(System.in);
return sc.nextLine();
}
然后使用
firstname = getInput();
您似乎想要創建多個乘客,而不僅僅是一個. 所以你肯定需要多個lastName
和firstName
。 所以創建一個有名字和姓氏的類Passenger
。 然后使用List<Passenger>
並在外循環的每次迭代中創建一個新的Passenger
。
所以你應該這樣做:
class Passenger {
String lastname;
String firstname;
String middlename;
}
現在在你的main
你需要一個List<Passenger>
:
List<Passenger> passengers = new ArrayList<>();
現在我建議從你的三個 do-while 循環中提取一個方法,以便有一個單一的驗證方法:
String getInput(String kind) {
String result;
do{
System.out.print("\nEnter " + kind + " : ");
result = input.nextLine().trim();
} while(result.isEmpty());
}
最后將其放入main
的循環中,並在每次迭代時創建一個新的Passenger
,如上所述:
static void main(String[] args) {
List<Passenger> passengers = new ArrayList<>();
Scanner input = new Scanner(System.in);
System.out.print("Enter Number of passenger : ");
Integer numPassengers = input.nextInt();
for(int x = 0; x < numPassengers; x++){
String firstName = getInut("FirstName");
String lastName = getInput("LastName");
String MiddleName = getInput("MiddleName");
passengers.add(new Passenger(firstName, lastName, middleName);
}
}
當然,您需要一個接受三個String
-args 的Passenger
類的構造函數。 此外,您永遠不應該像我上面那樣公開公共字段,而是使用公共獲取方法。 所以你的類應該是這樣的:
class Passenger {
String firstName;
String lastName;
String middleName;
public Passenger(String firstName, lastName, middleName) { // constructor
this.firstName = firstName;
this.lastName = lastName;
this.middleName = middleName;
}
public String getFirstName { return this.firstName; }
public String getLastName { return this.lastName; }
public String getMiddleName { return this.middleName; }
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.