Search code examples
javatry-catchparseint

Java issue using parseInt with a try catch block


I am working on an exercise, where I have to select a category(genre) of movie and based on my selection, the program will return a list of movies in that category from an ArrayList of objects.

My program works when typing out a category in string format. However I am trying to use a try catch block to also allow category selection by number.

My catch block is working, however my try block is not and returns nothing. Can someone help me determine what is wrong with my code? I am guessing there is something wrong with my parseInt assignment?

                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);
                      }
                    }

Solution

  • the way your if-clauses are structured, the else clause will be called whenever numSel is not 6, replacing catSel with the empty string.

    You may want to add an else after each if block or replace all of them with a switch statement.