Java小筆記:while loop in try-catch

TVSeriesAddict
Junior Programming
Published in
6 min readJun 27, 2021

寫程式卡關...趁機筆記紀錄一下,如果是你會怎麼做呢??

前言:不知道為什麼 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 來解決哦!想試試看的人可以自己做看看,再參考我的解法~ 我就不再多做說明

Photo by Tachina Lee on Unsplash
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 ,給我一些支持!!

也歡迎大家跟我討論內容!!

--

--