Java小筆記:while loop in try-catch
寫程式卡關...趁機筆記紀錄一下,如果是你會怎麼做呢??
前言:不知道為什麼 Java 打基礎工的題目那麼愛讓使用者輸入資料,並且輸入正確型態的資料,否的話則不斷請使用者重新輸入,由於我修過兩次 Java基礎課程,對於這樣的題目算是能寫得很順手也快速了,但仍然覺得很煩XD
這次透過 try-catch 的來丟錯誤訊息搭配 while loop 突然小卡了一下哈哈
題目看這邊>>>> Question 或者下面截圖
這篇文並不會以解題方式筆記,只是透過題目情境思考用 while & try-catch解題,那就開始吧!
首先我們要清楚 while loop 的流程圖,忘了的人可以看圖複習一下。
以這次題目要求,若使用者輸入的數值小於0,則要丟出自訂的 Exception 並印出錯誤訊息(程式範例一),一般我們抓到錯誤訊息就結束了。
但因為題目要求要反覆讓使用者輸入到對為止,所以這時候加入 while 來讓整個 try-catch loop 直到使用者輸入正確。
程式範例一
try {
System.out.println("How many numbers do you want to enter?");
num = scn.nextInt();
if(num<=0){
throw new TypeErrorException();
}
}catch (TypeErrorException e){
System.out.println(e.getMessage());
}
但是要使用什麼 condition 來判斷跳出 while 迴圈呢?
範例程式二
while( condition?? ){
try {
System.out.println("How many number do you want to enter?");
num = scn.nextInt();
if(num<=0){
throw new TypeErrorException();
}
}catch (TypeErrorException e){
System.out.println(e.getMessage());
}
}
(範例程式二):思考一下 condition 放什麼可以判斷是否已經輸入正確型態?
解題思維:
當沒有丟出例外時,則代表可以跳出 while loop
>>>>>> 在 if(num≤0) 這裡加入 boolean 來當作第二個判斷條件
程式範例三
int num=0;
boolean flag = false;
do{
try {
System.out.println("How many number do you want to enter?");
num = scn.nextInt();
if(num<=0){
flag = true;
throw new TypeErrorException();
}else{
break;
}
}catch (TypeErrorException e){
System.out.println(e.getMessage());
}
}while(flag);
是可以直接用 while 做的哦XD,只是我練習的時候就打了 do-while XDDD
其實 boolean值 或者0、1 一直都是我非常喜歡用來判斷的方法,透過設定 boolean 可以用來當一個通關的過程。
Solution 1 >>>>
(程式範例三) 當丟出例外,把 flag 設為 true,讓程式繼續在 while loop ,一旦檢查到格式正確,則使用 break 跳出迴圈。
Solution 2 >>>>
(程式範例四) 當丟出例外,把 flag 設為 true,讓程式繼續在 while loop,而每次進入 while 迴圈,則將 flag 設回 false 給使用者一張門票重新輸入;若 flag 沒有被設成 true,則代表格式正確,可以跳出 while 迴圈了!
程式範例四int num=0;
boolean flag = true;
while(flag){
flag = false;
try {
System.out.println("How many number do you want to enter?");
num = scn.nextInt();
if(num<=0){
flag = true;
throw new TypeErrorException();
}
}catch (TypeErrorException e){
System.out.println(e.getMessage());
}
}
而這個題目也有第二個要輸入的技巧也是使用到 while loop in try-catch 來解決哦!想試試看的人可以自己做看看,再參考我的解法~ 我就不再多做說明
Enter Number Solution >>>>int i=0;
String a="";
boolean flag2;
while(i<num){
int b=0;
try{
flag2 = true;
System.out.println("Enter number" + (i+1));
a = scn.next();
b = Integer.parseInt(a);
}catch (NumberFormatException e){
System.out.println("Error, please enter the number again.");
flag2 = false;
}
if(flag2){
list.add(b);
i++;
}
}
希望有幫助到觀看此文章的人囉!
如果你喜歡我的文章,歡迎打賞!!
點擊 Medium 的 拍手 claps ,給我一些支持!!
也歡迎大家跟我討論內容!!