0
votes

En commençant par le dernier caractère et itérant en arrière par 3

J'essaie de créer un code qui prend n'importe quelle chaîne et de les relâquer à moi vers l'arrière manquant tous les 3èmes personnages et y compris le dernier caractère.

ex: "123456789" devrait renvoyer "963" & "Bonjour le monde!" devrait revenir "! r lh" xxx

Le code ci-dessus est ce que j'ai jusqu'à présent. Cependant, lorsque j'exécute ce code, j'ai reçu ce message d'erreur: "Exception dans le thread" Main "Java.Lang.StringindexOtOfboundSException: index de chaîne hors de portée: -1"

Je ne comprends pas parce que la longueur de la chaîne Est-ce que 10 alors pourquoi n'est-il pas capable de faire cela? Quelqu'un pourrait-il m'expliquer cela et me donner une suggestion sur la façon de résoudre ce problème?


0 commentaires

5 Réponses :


0
votes

Selon votre logique actuelle str.charat (I - 3) ici lorsque la valeur de i devient inférieure à 3, votre code tentera d'accéder à l'accès et de l'indexage un numéro -ve et jette ainsi cette exception.

Vous devrez vérifier si i - 3> = 0 avant d'utiliser str.charat (i - 3) sinon casse hors de la boucle.


0 commentaires

1
votes

Je suggère simplement d'itération des caractères de la chaîne, à partir de la dernière position et de marche en arrière par incréments de 3: xxx

Votre approche actuelle échoue car la boucle prend simplement une seule pas triple marches. Notez également que vous voudrez peut-être utiliser stringbuilder au lieu de chaîne pour créer la chaîne inverse . Cela pourrait être plus efficace (bien que la JVM elle-même puisse substituer stringbuilder seul).


0 commentaires

0
votes

Votre logique actuelle est str.charat (i-3) code> et continuer pendant i> = 0 code>. L'instruction str.charat (I - 3) code> générera java.lang.stringindexoutofboundsException code> quand i code> est inférieur à 3, vous devriez donc changer votre code à ceci.

public static void main(String args[]) {
    Scanner scnr = new Scanner(System.in);
    String str = scnr.nextLine();
    String reverse = "";
    System.out.println(str.length());
    for (int i = str.length() - 1; i >= 0; i = i - 3) {
        reverse = reverse + str.charAt(i);
    }
    System.out.println(reverse);
}


0 commentaires

0
votes

J'ai essayé ce code dans mon système et ça marche bien. Essayez ceci: xxx


0 commentaires

0
votes

a changé votre code un peu et cela fonctionne bien maintenant.

vous receviez le java.lang.stringindexoutofboundsException car votre boucle est décrémentée par une seule étape à chaque étape au lieu de l'étape requise de 3. En conséquence, lorsque la chaîne contient moins de 3 caractères. La valeur de la variable i devient négative et une exception est lancée lorsque la fonction charat (i) est appelée avec une valeur négative. xxx


0 commentaires