2017-09-15 4 views
0

Stringから最初に繰り返されない文字を印刷するのに奇妙な問題があります。私は文字列として例えば「サッソ」を入れた場合、それは正確に戻って私を与えるJavaで最初に繰り返し文字が見つからない場合

:「」

が、私は「サッサ」としようとした場合、それは私に戻っていますなぜ私が疑問に思う:「S」

public class FirstChar { 

public char findFirst(String s) { 

    boolean[] letters = new boolean[26]; 
    char[] firstLetter = new char[26]; 

    for (int i = 0; i < s.length(); i++) { 

     if (letters[s.charAt(i) - 97] && 
       (firstLetter[0] != (s.charAt(i)))) { 

      System.out.println(firstLetter[0]); 
      return firstLetter[0];   
     } 
     letters[s.charAt(i) - 97] = true; 
     char c = (char) (s.charAt(i)); 
     firstLetter[i] = c; 
    } 
    System.out.println(firstLetter[1]); 
    return firstLetter[1]; 
} 
public static void main(String args[]) { 
    FirstChar obj = new FirstChar(); 
    obj.findFirst("sassa"); 
} 

+1

'' sassa "'の場合、何を期待しましたか?どの文字が返されているのか知っていますか?あなたは、デバッガで行ごとにコードをステップ実行しようとしましたか?多分あなたがすべき? –

+0

私は次のように期待しています: 'a'は最初の繰り返しなしの文字です – Clash

+0

「繰り返し」とは「*連続して繰り返す」を意味しますか?デバッガでコードをステップ実行して、デバッガの機能を確認してください。 –

答えて

1

firstLetterが繰り返しのない文字のキューとして機能し、その文字を瞬時に繰り返すようにする必要があります。 firstLetter配列要素を上書きしないで、常に0番目または1番目の位置に文字を戻しています。 sassaの場合は、最後の文字がaになると、最初のifの条件が真と評価され、firstLetter配列に格納された最初の文字であるsが返されます。 これを達成するにはHashMapとQueueが必要です

+0

あなたは正しいです!私は私がコレクションを勉強し始める時だと思っています。 – Clash

関連する問題