A. java基礎,關於流程式控制制的問題:輸入錯誤,提示錯誤並且重新輸入。 這個快把我整崩潰了,請大家幫幫我
題主的問題大體就是如何判斷用戶的輸入是否合法。這里最方便的就是使用正則表達式(Regular Expression,簡稱 Regex)。
正則表達式是一個字元串,它代表的是一定的字元串模式(比如郵箱的模式就是 "數字或字母 + @ + 數字或字母 + . + 頂級域名名稱"),當用戶輸入一個字元串時,符合這個模式的字元串會通過驗證,而不符合的則會匹配失敗。現在幾乎所有網站的郵箱密碼身份證號等的驗證都會使用正則表達式。
Java 的 String 類自帶有一個 matches 方法提供了簡單的正則表達式匹配功能,只需使用這個方法就可以完成你要求的匹配任務。代碼如下:
importjava.util.Scanner;
publicclassMyTest{
//用於匹配身份選擇和收入的正則表達式
privatefinalStringIDENTITY_REGEX="[0-2]";
privatefinalStringINCOME_REGEX="[0-9]*\.?[0-9]*";
//代表身份和收入的字元串
privateStringstatus_string;
privateStringincome_string;
//轉換為int和double後的身份和收入
privateintstatus;
privatedoubleincome;
publicvoidComputTax(){
Scannerinput=newScanner(System.in);
//一直循環直到到達break語句退出
while(true){
System.out.println("0-單身納稅人,1-已婚共同納稅人,2-已婚單獨納稅人"+
" "+"請選擇你要納稅的身份:");
//讀取用戶輸入的原始字元串並與正則表達式相匹配
status_string=input.nextLine();
//匹配失敗會返回while一開始
if(!status_string.matches(IDENTITY_REGEX)){
System.out.println("輸入錯誤,只能輸入0~2之間的數");
continue;
}
//匹配成功則會將輸入轉換為整數並退出循環
status=Integer.parseInt(status_string);
break;
}
//同理
while(true){
System.out.println("請輸入你的收入:");
income_string=input.nextLine();
if(!income_string.matches(INCOME_REGEX)){
System.out.println("收入輸入有誤,請重新輸入");
continue;
}
income=Double.parseDouble(income_string);
break;
}
//輸出相應的稅收
if(status==0){
//使用printf保留兩位小數,不然double輸出的精度太多影響可讀性
System.out.printf("你選擇的身份是單身納稅人 你應當繳納的稅收為:%.2f元 ",
income*0.1);
}elseif(status==1){
System.out.printf("你選擇的身份是已婚共同納稅人 你應當繳納的稅收為:%.2f元 ",
income*0.2);
}else{
System.out.printf("你選擇的身份是已婚單獨納稅人 你應當繳納的稅收為:%.2f元 ",
income*0.3);
}
}
publicstaticvoidmain(String[]args){
System.out.println("------------------歡迎使用納稅查詢--------------------");
MyTestmyTest=newMyTest();
myTest.ComputTax();
}
}
運行結果為:
有關正則表達式的寫法,請參考
http://deerchao.net/tutorials/regex/regex.htm