簡體   English   中英

Java-循環語句中的else繼續執行

[英]Java - else in the loop statement keeps executing

這讓我難過。 我使用循環來遍歷數組,然后使用ifs / else查找是否滿足條件。 但是,即使同時也執行if語句,else語句也會繼續執行。 可能真的缺少基本的東西。 我需要在用戶輸入類型時檢查兩次if語句,以及數組中的項目也符合該類型。

干杯

  for (int i = 0; i < movies.length; i++)
  {
     //RentalMovie movie = movies[i];

     if(movies[i].getMovieGenre().equalsIgnoreCase("action") && movies[i].getMovieGenre().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";
     }
     else if(movies[i].getMovieGenre().equalsIgnoreCase("childrens") && movies[i].getMovieGenre().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";         
     }
     else if (movies[i].getMovieGenre().equalsIgnoreCase("drama") && movies[i].getMovieGenre().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";            
     }
     else
     {
        genreList += "- No rental movies were found for the genre: " + genreID; 
     } 

  }

可能發生的情況是if語句未正確評估。 這是我會嘗試的:

  for (int i = 0; i < movies.length; i++)
  {
     //RentalMovie movie = movies[i];

     if(movies[i].getMovieGenre().equalsIgnoreCase("action") && movies[i].getMovieGenreID().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";
     }
     else if(movies[i].getMovieGenre().equalsIgnoreCase("childrens") && movies[i].getMovieGenreID().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";         
     }
     else if (movies[i].getMovieGenre().equalsIgnoreCase("drama") && movies[i].getMovieGenreID().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";            
     }
     else
     {
        genreList += "- No rental movies were found for the genre: " + genreID; 
     } 

  }

我想嘗試的另一件事是擺脫一些代碼,即:

 for (int i = 0; i < movies.length; i++)
  {
     //RentalMovie movie = movies[i];

     if(movies[i].getMovieGenre().equalsIgnoreCase("action"))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";
     }
     else if(movies[i].getMovieGenre().equalsIgnoreCase("childrens"))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";         
     }
     else if (movies[i].getMovieGenre().equalsIgnoreCase("drama"))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";            
     }
     else
     {
        genreList += "- No rental movies were found for the genres action, childrens, or drama -";
     } 

  }

我建議的第三件事是嘗試一下:

  for (int i = 0; i < movies.length; i++)
  {
     //RentalMovie movie = movies[i];

     if(movies[i].getMovieGenre().equalsIgnoreCase("action") || movies[i].getMovieGenre().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";
     }
     else if(movies[i].getMovieGenre().equalsIgnoreCase("childrens"))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";         
     }
     else if (movies[i].getMovieGenre().equalsIgnoreCase("drama"))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";            
     }
     else
     {
        genreList += "- No rental movies were found for the genre: " + genreID; 
     } 

  }

我懷疑您的意思是您在數組中有一些條目確實符合您的搜索條件,而另一些條目卻不匹配。 對於每個匹配項,都在執行適當的if子句,但是對於每個不匹配項,則在執行else

由於else中的操作是添加一條消息,指示找到匹配項,因此您可能不想每次發現單個不匹配項時都添加該消息。 相反,如果根本沒有找到匹配項,則在循環后只需要執行一次。 可能看起來像:

String genreList = "";

for (int i = 0; i < movies.length; i++)
  {
     if(movies[i].getMovieGenre().equalsIgnoreCase("action") && movies[i].getMovieGenre().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";
     }
     else if(movies[i].getMovieGenre().equalsIgnoreCase("childrens") && movies[i].getMovieGenre().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";         
     }
     else if (movies[i].getMovieGenre().equalsIgnoreCase("drama") && movies[i].getMovieGenre().equalsIgnoreCase(genreID))
     {
        genreList += movies[i].getMovieID() + " - " + movies[i].getMovieTitle() + "[" + movies[i].getMediaType() + "]\n";            
     }
     else
     {
     } 

  }

if (genreList.equals(""))
{
  genreList = "No rental movies were found for the genre: " + genreID;
}

PS:我根本不明白為什么您要在接受電影之前對照genreID和硬編碼值來檢查每部電影的類型。 列表中是否還存在其他類型,但您不希望用戶能夠搜索? 那是唯一看起來合理的方法,但這似乎不是一個非常明智的要求。

嘗試使用調試器逐步解決它,然后可以隨時查看變量的狀態。

暫無
暫無

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

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