2017-12-01 11 views
0

次のパラメータを使用して翻訳メソッドを作成しようとしています。しかし、私がこのメソッドを実行するたびに、最初のifステートメントをスキップし、2番目のforループに移動します。最初のインデックスが文字列と一致する場合、配列の2番目のインデックスを読み込んで返しますか?

/** wordListのデータに従って単語を変換し、大文字と一致させます。 パラメータwordListには、翻訳のマッピングが含まれています。データは で、長さ2の文字列配列を含むArrayListで構成されています。最初の セル(インデックス0)にはキーと呼ばれる元の言語の単語が含まれています。 と2番目のセル(インデックス1) wordListの項目は、最初のセルのキーに従って昇順でソートされているとします。 @param word 翻訳する単語。 @param wordList 変換マッピングを含むArrayListです。 @return元のものと同じ大文字小文字のwordList内のマッピング。 がwordListに一致しない場合は、wordと同じ長さのConfig.LINE_CHARの文字列を返します。 */

public static String translate(String word, ArrayList<String[]> wordList) { 
    String newWord = ""; 
    int i = 0; 
    for (i = 0; i < wordList.size(); i++) { 
     word = matchCase(wordList.get(i)[0], word); //make cases match 
     if (word.equals(wordList.get(i)[0])) {  //check each index at 0 
      newWord = wordList.get(i)[1];   //update newWord to skip second for loop 
      return wordList.get(i)[1]; 
     } 
    } 
    if (newWord == "") { 
    for (i = 0; i < word.length(); i++) { 
     newWord += Config.LINE_CHAR; 
    } 
    } 

    return newWord; 
} 

私が実行しているファイルの場合、各単語は、訳語ので何Config.LINE_CHARが印刷されるべきではないが必要です。しかし、これは印刷する唯一のものです。これをどのように修正するのですか?

答えて

1

newWordを値""に初期化しています。 newWordが変更される可能性がある唯一の時間は、最初のループにあり、すぐにreturnステートメントが続き、メソッドを終了します。 if文に到達できる唯一の方法は、最初のループ中に返さなかった場合です。そのif文に達した場合、newWordは、最初の割り当てが""以降変更されていなければなりません。

いくつかの関連性のないアドバイス:文字列を比較するときは、equals演算子を使用する必要があります。たとえば、if ("".equals(newWord))です。それ以外の場合は、値ではなく2つのStringオブジェクトのメモリアドレスを比較しています。

あなたのmatchCaseメソッドを共有して、すべてのバグを解決する必要があるかもしれません。

+0

ありがとうございます!それは今働く。 – Shalheira

+0

優秀!あなたはそれを整理してうれしいです。 – phatfingers

+1

あなたのレッスンの制約は何か分かりませんが、将来の開発のために組み込みの "equalsIgnoreCase"メソッドに注意する必要があります。 – phatfingers

関連する問題