2015-05-10 27 views
0
 } else if (selectionKey == 2) { 
      System.out.println("Please enter the item name"); 
      if (s.nextLine() != "") { 
       item = s.nextLine(); 
      } 
      try { 
      ZybezChecker zb = new ZybezChecker(item); 
      zb.getAveragePrice(); 
      System.out.println(zb.toString()); 
      } catch(Exception e) { 
       System.out.println("Something went wrong. Perhaps an invalid item name?"); 
      } 

這是我的代碼atm。如何返回if語句並在捕獲後繼續循環?嘗試捕捉後返回到前一個循環的點嗎?

+0

如果你需要做這樣的事情,你有一個設計缺陷。嘗試將代碼移到某個函數或其他東西。 – ShellFish

回答

0

你可以將它嵌入在一個循環一樣,

for (;;) { // <-- start an infinite loop 
    System.out.println("Please enter the item name"); 
    if (s.nextLine() != "") { 
     item = s.nextLine(); 
    } 
    try { 
     ZybezChecker zb = new ZybezChecker(item); 
     zb.getAveragePrice(); 
     System.out.println(zb.toString()); 
     break; // <-- terminate the infinite loop. 
    } catch(Exception e) { 
     System.out.println("Something went wrong. Perhaps an " 
      + "invalid item name?"); 
     e.printStackTrace(); // <-- tell them what went wrong. 
    } 
} 
0

我認爲(如果我沒有理解你的問題,正確的代碼),您需要的是包含s.nextLine(一環)。請注意,我在這裏假設幾件事情:

  • s是掃描儀或東西相當於從用戶
  • 拋出一個異常讀取輸入,如果用戶輸入無效的輸入
  • 要不斷地問用戶輸入直到他們進入一些有效

如果是這種情況,那麼你應該建立一個像這樣的循環:

while (true) { 
    System.out.println("Please enter the item name"); 
    if (s.nextLine() != "") { 
     item = s.nextLine(); 
    } 

    try { 
     ZybezChecker zb = new ZybezChecker(item); 
     zb.getAveragePrice(); 
     System.out.println(zb.toString()); 
     break; 
    } catch(Exception e) { 
     System.out.println("Something went wrong. Perhaps an invalid item name?"); 
    } 
} 

另外,你爲什麼要調用nextLine()兩次?當您第一次打電話時,它會從掃描儀讀取一行。當你再次調用它時,它不會返回相同的行;它將等待一個新的線路。這意味着用戶必須輸入一些隨機字符串,然後輸入實際值。最後,你不應該在字符串上使用==或!=。由於它們是引用類型,因此基本上檢查它們是否佔用了內存中的相同位置,而不是它們是否相等。改爲使用s.nextLine()。equals(「」)。