2017-09-15 4 views
0

J'ai un problème étrange pour imprimer le premier caractère non-répété de String.Erreur lors de la recherche du premier caractère non-répété dans Java

Si je mets par exemple « sasso » sous forme de chaîne, il me rend correctement: « a »

mais si je tente avec « Sassa » Je me demande pourquoi il me rend: « 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

Pour '' sassa'', qu'espériez-vous? Savez-vous lequel des caractères '' s'' est retourné? Avez-vous essayé de parcourir le code ligne par ligne dans un débogueur? Peut-être que tu devrais? –

+0

Je m'attends à ce que 'a' soit le premier caractère non répété – Clash

+0

Donc, en "répétant", vous voulez dire "* consécutivement * répéter"? Vous devriez toujours essayer de parcourir le code dans un débogueur pour voir ce qu'il fait. –

Répondre

1

Vous devez vous assurer que firstLetter agit comme une file d'attente de caractères non répétitifs et retirez de lui, le moment caractère répété est rencontré. Vous retournez toujours le caractère à la 0ème ou à la 1ère position sans écraser les éléments du tableau firstLetter. Dans le cas sassa, lorsque le dernier caractère a est rencontré, les conditions du premier if donnent la valeur true et renvoient ainsi s qui est le premier caractère stocké dans le tableau firstLetter. Vous avez besoin de HashMap et de file d'attente pour y parvenir

+0

vous avez raison! Je pense qu'il est temps pour moi de commencer à étudier les collections. – Clash