繁体   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