簡體   English   中英

使用parseInt和try catch塊的Java問題

[英]Java issue using parseInt with a try catch block

我正在做一個練習,其中我必須選擇電影的類別(流派),然后根據我的選擇,程序將從對象的ArrayList返回該類別的電影列表。

以字符串格式鍵入類別時,我的程序可以運行。 但是,我試圖使用try catch塊來也允許按數字選擇類別。

我的catch塊正在工作,但是我的try塊不工作,什么也不返回。 有人可以幫助我確定我的代碼有什么問題嗎? 我猜我的parseInt分配有問題嗎?

                System.out.print("What category are you interested in?");
                String catSel = sc.next();

                try //Check category for Integer, otherwise catch
                    {   
                     int numSel = Integer.parseInt(catSel);
                        if(numSel == 1)
                        {catSel = "animated" ;}
                        if(numSel == 2)
                        {catSel = "drama";}
                        if(numSel == 3)
                        {catSel = "horror";}
                        if(numSel == 4)
                        {catSel = "scifi";}
                        if(numSel == 5)
                        {catSel = "musical";}
                        if(numSel == 6)
                        {catSel = "comedy";}
                        else catSel = "";

                      //Check each movie for chosen category
                      for(int x = 0; x < list.size() - 1; x++)
                      {
                        if(catSel.equals(list.get(x).category))
                        System.out.println(list.get(x).movie);
                      }
                    }
                catch (NumberFormatException e)
                    {
                      //Check each movie for chosen category
                      for(int x = 0; x < list.size() - 1; x++)
                      {
                        if(catSel.equals(list.get(x).category))
                        System.out.println(list.get(x).movie);
                      }
                    }

按照if子句的結構方式,只要numSel不為6,就會調用else子句,用空字符串替換catSel

您可能希望在每個if塊之后添加一個else或將所有它們替換為switch語句。

正如@Dragondraikk所建議的那樣, if-else子句的結構與預期結果不同。

因此,要么以這種方式使用:

if(someCondition){
}
else if(someCondition){
}
...........................
 do whatever you want to do 
...........................
else{

}

下面是使用Switch語句的方法

switch(Integer.parseInt(catSel)){

   case 1 :
           do Something....
           break;
   case 2 :
           do Something....
           break;
   case 3 :
           do Something....
           break;
   case 4 :
           do Something....
           break;
   case 5 :
           do Something....
           break;
   case 6 :
           do Something....
           break;
   default :
           catSel="";
           break;
}

注意 :您可以在此周圍使用try-catch塊

更新資料

如果不是 ,使用切換的優勢

if ... else if ...鏈的問題是可讀性,我必須查看每個if條件,以了解程序在做什么。 例如,您可能會有這樣的事情:

if (a == 1) {
    // stuff
} else if (a == 2) {
    // stuff
} else if (a == 3) {
    // stuff
} else if (b == 1) {
    // stuff
} else if (b == 2) {
    // stuff
}

(顯然,對於少數這樣的語句,還不錯)

但是我無法知道您在不閱讀每條語句的情況下中途更改了條件變量。 但是,由於開關僅將您限制為單個條件變量,因此我可以一目了然地看到發生了什么。

另一個優勢是JumpTable

通常將開關編譯到跳轉表 (一個比較以找出要運行的代碼),或者如果不可能,則編譯器仍可以對比較進行重新排序,以便在值之間執行二進制搜索(log N)。比較)。 if-else鏈是線性搜索

這是有關Switch語句的更多信息

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM