2017-10-14 18 views
2

私は映画のリリース年の文字列と、映画のArrayList(文字列タイトル、intリリース年、enumジャンルなど)を取ります。パラメータString yearは、一致するリリース年を持つ映画を見つけるために、各映画と比較される検索のユーザー入力です。
一致するものはArrayListに保存されます。パラメータを(String year、ArrayList films)とすることで、ユーザーの検索入力の最初の桁を比較して、フィルムの一致を見つけるint型であるかどうかを確認することができます。そうでなければnullを返すのではなく空のArrayListを返します。 1?数字の文字列をintと比較する

public ArrayList<Film> compareYear(String year, ArrayList<Film> films)       
{ 
    for(int i=0;i<10;++i) { 
     if(year.valueOf(year.charAt(0)).equals(i)) //check if it's an int 
     { 
      int releaseYear = Integer.parseInt(year); 
      ArrayList<Film> releaseYearMatches = new ArrayList<Film>(); 
      for(Film f : films)     //search through ArrayList of films 
      { 
       int releaseYears = f.getYear();   //gets the year for each film and compares it to user input search "year" 
       if(releaseYears == releaseYear) { 
        yearMatches.add(f); 
       } 
      } 
      return yearMatches; 
     } 
    } 
    ArrayList<Film> nothing = new ArrayList<Film>();   
    return nothing; 
} 

答えて

1

入力文字列が数字であるかどうかをチェックすることから始めてください。一致する場合は、比較を続行できます。

あなたはint値にString参照を比較します==オペレータでintStringを比較しているとして、あなたはまた、比較に誤りがあります。 2 intの値を==(プリミティブの等価エフェクタとして機能します)またはObject.equals(..)の2 Stringの値と比較する必要があります。

Stringが数字であるかどうかを確認する方法はたくさんあります。

public static boolean isNumeric(String str) { 
    try { 
    double num = Double.parseDouble(str); 
    } 
    catch(NumberFormatException e) { 
    return false; 
    } 
    return true; 
} 

それともあなたはApache Commonsとその方法StringUtils.isNumeric(CharSequence cs)

そして最後を使用することができ、サードパーティのjarファイルを使用することができれば、次のように、あなたのcomparisongになりますが:

if(isNumeric(year)) { 
    int numericYear = Integer.parseInt(year); 
    for(Film f : films) { 
     int releaseYear = f.getYear(); 
     if(numericYear == numericYear) { 
      yearMatches.add(f); 
     } 
    } 
} 
次のように あなたはそれを自分で実装することができます
2

これは、年の文字列が数字であるかどうかを検出するために解析例外を使用することができます。これに似た

public ArrayList<Film> compareYear(String year, ArrayList<Film> films)       
{ 

     try 
     { 
      int releaseYear = Integer.parseInt(year); //if the string is not an integer, then it will automatically jump to the catch block 
      ArrayList<Film> releaseYearMatches = new ArrayList<Film>(); 
      for(Film f : films)     //search through ArrayList of films 
      { 
       int releaseYears = f.getYear();   //gets the year for each film and compares it to user input search "year" 
       if(releaseYears == releaseYear) { 
        yearMatches.add(f); 
       } 
      } 

      return yearMatches; 
     } 

     catch(Exception e) 
     { 
      ArrayList<Film> nothing = new ArrayList<Film>(); 

      return nothing; 
     } 
} 

サンプル・コードは、ここで実行される - http://ide.geeksforgeeks.org/mu2b0X

1

Yearクラス

年の値を表すために、単なるintを使うのではなく、その目的のために意図されたクラスを使用するオブジェクト:Year

入力文字列をこのようなオブジェクトに変換するには、Year.parseを呼び出します。数字以外の文字を含むなど、入力に問題がある場合は、例外がスローされます。そのDateTimeParseExceptionのためのトラップListあなたの空を返すことを決定する。

Year y = null ; 
try{ 
    y = Year.parse(input) ; 
} catch (DateTimeParseException e) { 
    List<Film> list = Collections.emptyList() ; // Immutable empty list of type `Film`. 
    return list ; 
} 

変更intからYearにごFilmガラス上のあなたの年間のメンバーのタイプ。 equalsisBeforeisAfterを呼び出して比較してください。

if(y.equals(film.getYear())) { … }