2016-03-28 13 views
0

Ich habe ein solches Programm:Warum gibt mein Code eine Ausnahme außerhalb des zulässigen Bereichs?

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++; 

     } 
    } 
} 

Nach dem Start sollten Sie die Frage betrachten und fragen Sie Text eingeben. Dann sollte es das Zeichen zeigen, das ich geschrieben habe, und das Programm muss jeden dieser Buchstaben einzeln laden, nicht als ganze Zeichenfolge. Aber dann erscheint ein Fehler:

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) 

Es wird durch eine leere Zeichenfolge verursacht. Wie kann ich es loswerden? Ich habe versucht mit diesem Befehl:

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

aber es hat nicht geklappt.

Entschuldigung für irgendwelche Fehler; Ich spreche nicht besonders gut Englisch.

+1

Nun, ich weiß nicht, welche Sprache diesen Beitrag in ist, aber ich kann, indem sie ein Zeichen bei Index _a_ Sie tun eine inifite Schleife Druck sehen und _a_ wird schließlich außerhalb der Grenzen Ihres Arrays gehen –

Antwort

1

Dieser Codeblock:

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

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

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

werden sollte ist, wird Ihre Schleife versuchen, für immer zu gehen. Sie haben keine Zeichen in der Zeichenfolge (wenn a=tekst.length()) und Sie erhalten die Ausnahme.

+0

Oh .... C.java:34: Fehler: kann das Symbol nicht finden für (int a = 0; a tomcio61

+0

@ tomcio61 Entschuldigung ich vergaß '()' – Laurel

+0

Danke mein Freund: D – tomcio61

0

Es scheint, dass Sie Text Entschlüsselung mit konstanter Verschiebung implementieren möchten.

Es gibt einige Probleme mit Ihrem Code:

  1. Es nicht berücksichtigt Großbuchstaben und nicht-Buchstaben
  2. Loop-Anweisung falsch dauert ist
  3. Es gibt keine Entschlüsselung

Hier ist ein Beispiel

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); 
    } 
} 

Wenn Sie shift = -1 als für die verschlüsselte Leitung "ifmmp!" Sie erhalten "hello!"

+0

Genau mein Punkt. Aber ich möchte, dass das Gleiche passiert. Ohne den endgültigen Code: D – tomcio61

+0

Der beste Weg, etwas zu lernen, ist, es zu analysieren. Sie könnten Code in Ihr Projekt einfügen, es mehrmals Zeile für Zeile debuggen und die Werte genau beobachten. Dann könnten Sie den eingefügten Code löschen und ihn selbst neu schreiben. –

+0

Das ist eine gute Idee. – tomcio61

Verwandte Themen