[英]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.