2017-10-15 9 views
-3

J'essaye d'écrire mon propre algorithme de reverse string (je sais que ça existe déjà en java mais je le fais pour l'éducation). Le code ci-dessous est ce que j'ai jusqu'ici. Il ne produit que la moitié de la chaîne inversée. J'ai fait un peu de débogage et la raison en est qu'il change stringChars2 en même temps que stringChars mais je ne sais pas pourquoi cela se produit que j'essaie seulement de changer stringChars. Toute l'aide grandement appréciée. Ma question n'était pas "comment inverser une chaîne" qui a déjà été posée ... mais pourquoi mes objets changeaient sans instruction, la réponse ci-dessous explique complètement le problème.algorithme de reverse string java

public static void main(String[] args) { 
    //declare variables 
    Scanner input = new Scanner(System.in); 
    String myString = ""; 
    int length = 0, index = 0, index2 = 0; 

    //get input string 
    System.out.print("Enter the string you want to reverse: "); 
    myString = input.next(); 

    //find length of string 
    length = myString.length()-1; 
    index2 = length; 

    //convert to array 
    char[] stringChars = myString.toCharArray(); 
    char[] stringChars2 = stringChars; 

    //loop through and reverse order 
    while (index<length) { 

     stringChars[index] = stringChars2[index2]; 

     index++; 
     index2--; 
    } 

    //convert back to string 
    String newString = new String(stringChars); 

    //output result 
    System.out.println(newString); 

    //close resources 
    input.close(); 

} 
+0

double possible de [inverser une chaîne en Java] (https://stackoverflow.com/questions/ 7569335/reverse-a-string-in-java) –

+2

À votre avis, que fait l'instruction suivante: 'char [] stringChars2 = stringChars;'? –

+0

[Faire une copie du tableau Java] (// stackoverflow.com/q/5785745) – Tom

Répondre

0
char[] stringChars = myString.toCharArray(); 
char[] stringChars2 = stringChars; 

Sur la deuxième ligne vous assignez stringChars2 au même objet que stringChars donc en gros, ils sont une seule et même quand vous changez la première vous changez le deuxième aussi.

Essayez quelque chose comme ceci:

char[] stringChars = myString.toCharArray(); 
char[] stringChars2 = myString.toCharArray(); 

Vous pouvez en lire davantage here

+1

Merci mon pote, je me rends compte maintenant que c'est une erreur idiote mais tu m'as vraiment aidé. –

+0

Heureux d'aider, et bienvenue à Stack Overflow. Si la réponse a résolu votre problème, veuillez le marquer comme accepté :) – DobromirM