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" p> blockQuote>
xxx pré> 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" p>
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? P> p>
5 Réponses :
Selon votre logique actuelle Vous devrez vérifier si str.charat (I - 3) code> ici lorsque la valeur de
i code> 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. P>
i - 3> = 0 code> avant d'utiliser
str.charat (i - 3) code> sinon casse hors de la boucle. P >
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: Votre approche actuelle échoue car la boucle prend simplement une seule pas triple marches. Notez également que vous voudrez peut-être utiliser stringbuilder code> au lieu de
chaîne code> pour créer la chaîne
inverse code>. Cela pourrait être plus efficace (bien que la JVM elle-même puisse substituer
stringbuilder code> seul). P> p>
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);
}
J'ai essayé ce code dans mon système et ça marche bien. Essayez ceci:
a changé votre code un peu et cela fonctionne bien maintenant.
vous receviez le java.lang.stringindexoutofboundsException code> 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 code> devient négative et une exception est lancée lorsque la fonction
charat (i) code> est appelée avec une valeur négative. p>