2016-03-29 2 views
-1

Ce projet d'anagramme fonctionne tout bien, mais pour quelques exemples comme "Narcissism/one man crisis", la sortie devrait être fausse à cause du "s" supplémentaire dans le narcissisme mais cela revient à la vérité. Je suis nouveau dans le domaine du codage, j'ai juste besoin d'aide pour le comprendre.Super anagramme aide pour java

Heres le code qui prend les entrées:

import java.util.Scanner; 

public class SuperAnTester{ 

public static void main(String[] args){ 
    System.out.println("Enter a phrase: "); 
    Scanner scan = new Scanner(System.in); 
    String s1 = scan.nextLine(); 
    System.out.println("Enter a second phrase:"); 
    String s2 = scan.nextLine(); 
    SuperAnagram tester = new SuperAnagram(s1,s2); 
    System.out.println(tester.isSuperAnagram()); 

    } 
} 

ici est la partie du testeur:

public class SuperAnagram{ 

public String s1; 
public String s2; 
public char s1Array[]; 
public char s2Array[]; 

public SuperAnagram(String firstStr, String secondStr){ 
    s1=firstStr; 
    s2=secondStr; 
    } 
public void s1Char(){ 
    s1=s1.toLowerCase(); 
    s1Array=s1.toCharArray(); 

} 

public void s2Char(){ 
    s2=s2.toLowerCase(); 
    s2Array=s2.toCharArray(); 
} 

public boolean isSuperAnagram(){ 
s1Char(); 
s2Char(); 

boolean isSuperAnagram=false; 

if (s1Array.length > s2Array.length){ 
    isSuperAnagram=false; 
    return isSuperAnagram; 
    } 

else{ 

for (int x=0; x<s1Array.length; x++){ 
    char let = s1Array[x]; 
    for (int j=0; j < s2Array.length; j++){ 
     if (s2Array[j] == let){ 
      isSuperAnagram = true; 
      s2Array[j]= ' '; 
     } 

     } 
    } 
    } 

return isSuperAnagram; 
} 
} 
+0

Existe-t-il des restrictions sur les classes ou les méthodes que vous êtes autorisé à utiliser? Il existe un moyen beaucoup plus simple de vérifier les anagrammes. –

+0

Il est aussi plus évidemment pas un anagramme en raison de la "o" –

+0

Donc vous définissez 'isSuperAnagram' à' true' si 'si (s2Array [j] == let)' est vrai ... et ce qui se passe si le prochain vérifier sont tous faux pour tous les autres char? Ne le ferait-il pas pour le réinitialiser (ou retourner directement 'false') quand vous ne pourriez pas trouver un caractère correspondant à' let'? – Tom

Répondre

0
if (s1Array.length > s2Array.length){ 
    isSuperAnagram=false; 
    return isSuperAnagram; 
} 

n'a pas testé votre code, mais il semble à moi, que vous devriez remplacez cela > avec ! =

0

Tout d'abord, je suggère de supprimer tous les espaces:

s = s.toLowerCase().replaceAll(" ", ""); 

L'un de vos problèmes dans la section:

for (int x=0; x<s1Array.length; x++){ 
    char let = s1Array[x]; 
    for (int j=0; j < s2Array.length; j++){ 
     if (s2Array[j] == let){ 
      isSuperAnagram = true; 
      s2Array[j]= ' '; 
     } 
    } 
} 

Dès qu'un personnage correspond vous définissez isSuperAnagram true pour toujours.

Re-écriture à quelque chose comme:

for (int x=0; x<s1Array.length; x++){ 
    isSuperAnagram = false; 
    char let = s1Array[x]; 
    for (int j=0; j < s2Array.length; j++){ 
     if (s2Array[j] == let){ 
     isSuperAnagram = true; 
     break; 
     } 
    } 
    if (!isSuperAnagram) { 
     break; 
    } 
} 
+1

Oh! Tu as raison. Merci d'avoir mentionné cela. Je vais mettre à jour ma proposition. – hanif