2016-03-28 2 views
0

J'ai un tel programme:Pourquoi mon code me donne-t-il une exception hors de portée?

import java.util.Scanner; import java.io.*; 

class C { public static void main (String[] args) throws IOException{ 

    System.out.println("Wpisz teks do zakodowania: "); 

    String tekst; 
     Scanner odczyt = new Scanner(System.in); 
     tekst = odczyt.nextLine(); 
     System.out.println("Tekst odszyfrowany:" + tekst); 
     char[]alfabet = {'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}; 
     int dlugalf=26; 
     System.out.print("Tekst zaszyfrowany:"); 

     int a = 0; 

     for(int i=0;;){ 

      System.out.print(tekst.charAt(a)); 
      a++; 

     } 
    } 
} 

Après son lancement, vous devriez voir la question et vous demander de saisir du texte. Ensuite, il devrait montrer le signe que j'ai écrit, et le programme doit charger chacune de ces lettres individuellement, pas comme une chaîne entière. Mais il apparaît alors une erreur:

Exception in thread "main" java.lang.StringIndexOut OfBoundsException: String index out of range: 10 
at java.lang.String.charAt(Unknown Source) 
at C.main(C.java:34) 

Il est provoqué par une chaîne vide. Comment puis-je m'en débarrasser? J'ai essayé avec cette commande:

if (!tekst.isEmpty() && tekst.charAt(0) == 'R'); 

mais cela n'a pas fonctionné.

Désolé pour les erreurs; Je ne parle pas très bien anglais.

+1

Eh bien, je ne sais pas quelle langue ce poste est, mais je peux voir que vous faites une impression en boucle inifite en obtenant un omble chevalier à l'index _a_ et _a_ finira par sortir des limites de votre tableau –

Répondre

1

Ce bloc de code:

int a=0; 
for(int i=0;;){ 

    System.out.print(tekst.charAt(a)); 
    a++; 
} 

deviendrais

for(int a=0;a<tekst.length();a++){ 
    System.out.print(tekst.charAt(a)); 
} 

Comme il est, votre boucle va essayer d'aller pour toujours. Vous n'avez plus de caractères dans la chaîne (lorsque a=tekst.length()) et vous obtenez l'exception.

+0

Oh .... C.java:34: erreur: impossible de trouver le symbole pour (int a = 0; a tomcio61

+0

@ tomcio61 désolé j'ai oublié '()' – Laurel

+0

Merci mon ami: D – tomcio61

0

Il semble que vous souhaitiez implémenter le décryptage de texte avec décalage constant.

Il y a quelques problèmes avec votre code:

  1. Il ne prend pas en caractères de compte de majuscules et les non-lettres
  2. déclaration boucle est erroné
  3. Il n'y a pas de décryptage

Voici un exemple

final int shift = 1;//any shift here 
final int alhpabetLength = 'z' - 'a'; 
String input = scanner.nextLine(); 
input = input.toLowerCase(); 
for (char c : input.toCharArray()) { 
    if (c >= 'a' && c <= 'z') { 
     int position = c - 'a'; 
     int decryptedPosition = (position + shift + alhpabetLength) % alhpabetLength; 
     char decryptedC = (char)(decryptedPosition + 'a'); 
     System.out.print(decryptedC); 
    } else { 
     System.out.print(c); 
    } 
} 

Si vous utilisez shift = -1 que pour la ligne cryptée "ifmmp!" vous obtiendrez "hello!"

+0

Exactement mon point. Mais je veux que la même chose arrive. Sans le code final: D – tomcio61

+0

La meilleure façon d'apprendre quelque chose est de l'analyser. Vous pouvez coller du code dans votre projet, le déboguer plusieurs fois ligne par ligne en regardant attentivement les valeurs. Que vous pourriez supprimer le code collé et le réécrire par le vôtre. –

+0

C'est une bonne idée. – tomcio61