import java.util.* ;
public class HWK7_01 {
static Random r = new Random(222) ;
public static void main(String[] args) {
int v = 10 ;
System.out.println("v="+v) ;
// DIY, 呼叫genExp()10次,依照每次傳回之例外訊息,對v進行運算
// (a)若訊息為"add x" (x是個整數),則將v加上x
// (b)若訊息為"sub x" (x是個整數),則將v減去x
// (c)若訊息為"mul x" (x是個整數),則將v乘上x
try{
for (int i=0; i<10; i++) {
genExp() ;
}
}catch(Exception e) {
for (int i=0; i<10; i++) {
System.out.println(e.getMessage()) ;
}
String[] s = e.getMessage().split("\s+") ;
if(s[0].equals("add")) {
v+=Integer.valueOf(s[1]) ;
}else if(s[0].equals("sub")) {
v-=Integer.valueOf(s[1]) ;
}else if(s[0].equals("mul")) {
v*=Integer.valueOf(s[1]) ;
}
}
System.out.println("v="+v) ;
}
public static void genExp() throws Exception{
// [功能]: 先以上面的亂數物件r產生二個整數n1(1~9), n2(1~10)
// 考慮n1, 若介於[1-3],則丟回一例外,內含訊息"add "+n2
// 考慮n1, 若介於[4-6],則丟回一例外,內含訊息"sub "+n2
// 考慮n1, 若介於[7-9],則丟回一例外,內含訊息"mul "+n2
// DIY here
int n1 = r.nextInt(9)+1 ;
int n2 = r.nextInt(10)+1 ;
if(n1>=1 && n1<=3) {throw new Exception ("add "+n2) ;}
if(n1>=4 && n1<=6) {throw new Exception ("sub "+n2) ;}
if(n1>=7 && n1<=9){throw new Exception ("mul "+n2) ;}
}
}
/* [程式輸出]
v=10
sub 2
mul 9
add 10
mul 3
add 10
mul 1
mul 3
add 5
sub 2
add 7
v=778
*/
跑出來的結果如圖,為甚麼會一直困在第一項sub 2裡面?
1.你的Try Catch寫錯位置
2.Catch 不用跑
for (int i=0; i<10; i++) {
System.out.println(e.getMessage()) ;
}
這是你的正解
import java.util.* ;
public class HWK7_01 {
static Random r = new Random(222) ;
public static void main(String[] args) {
int v = 10 ;
System.out.println("v="+v) ;
// DIY, 呼叫genExp()10次,依照每次傳回之例外訊息,對v進行運算
// (a)若訊息為"add x" (x是個整數),則將v加上x
// (b)若訊息為"sub x" (x是個整數),則將v減去x
// (c)若訊息為"mul x" (x是個整數),則將v乘上x
for (int i=0; i<10; i++) {
try{
genExp() ;
}catch(Exception e) {
System.out.println(e.getMessage()) ;
String[] s = e.getMessage().split("\\s+") ;
if(s[0].equals("add")) {
v+=Integer.valueOf(s[1]) ;
}else if(s[0].equals("sub")) {
v-=Integer.valueOf(s[1]) ;
}else if(s[0].equals("mul")) {
v*=Integer.valueOf(s[1]) ;
}
}
}
System.out.println("v="+v) ;
}
public static void genExp() throws Exception{
// [功能]: 先以上面的亂數物件r產生二個整數n1(1~9), n2(1~10)
// 考慮n1, 若介於[1-3],則丟回一例外,內含訊息"add "+n2
// 考慮n1, 若介於[4-6],則丟回一例外,內含訊息"sub "+n2
// 考慮n1, 若介於[7-9],則丟回一例外,內含訊息"mul "+n2
// DIY here
int n1 = r.nextInt(9)+1 ;
int n2 = r.nextInt(10)+1 ;
if(n1>=1 && n1<=3) {throw new Exception ("add "+n2) ;}
if(n1>=4 && n1<=6) {throw new Exception ("sub "+n2) ;}
if(n1>=7 && n1<=9){throw new Exception ("mul "+n2) ;}
}
}
izjsbsh程式邏輯,要再加油唷! 祝你進步
因為 try
執行間若有報錯迴圈會中斷並跑到 catch
裡面執行
你在 catch
執行迴圈等於將相同錯誤訊息重複打印出來
所以才會是相同結果
將迴圈改放在 try catch
外面即可