2017-04-23 5 views
-1

Ich mache einen Caesar Cipher Auftrag für meine Klasse 11 Informatik-Klasse. Ich habe viele Male über meinen Code nachgedacht und ihn verändert, aber nichts, was ich mache, funktioniert und ich verstehe nicht warum.Caesar Cipher Code Fehler: String-Index außerhalb der Grenzen

Der Fehler Es ist mir gibt, ist java.lang.StringIndexOutOfBoundsException

import java.util.*; 

//Caesar Cipher 
public class CCTry1 
{ 
    public static void main (String [] args) 
    { 
     //scanner 
     Scanner scanner = new Scanner(System.in); 
     Scanner scanner2 = new Scanner(System.in); 


     //make an array with all the letters 
     char[] alphabet = {'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'}; 

     //prompt user for a message 
     System.out.println("Enter your message."); 
     String message = scanner.nextLine(); 

     //*******ENCRYPTING****** 

     System.out.println("Enter your shift number."); 
     int shift = scanner2.nextInt(); 

     //find index of each letter of the user's message, then add the shift number 
     //to obtain the new message 

     char newletter; 
     //for loop to encrypt 
     for(int i=0; i<26; i++) 
     { 

      //take the i letter 
      char letter = message.charAt(i); 

      //check if that letter = a 
      if (letter == alphabet[i]) 
      { 

       //if letter = a, then the new letter is a+shift 
       newletter = alphabet[i+shift]; 

       //if letter is capitalized, convert it to a capital then print 
       if(Character.isUpperCase(letter)) 
       { 
        System.out.print(Character.toUpperCase(newletter)); 
       } 
       //else, just print it as is 
       else 
       { 
        System.out.print(newletter); 
       } 
      } 


     } 
    } 
} 
+2

Sie durchlaufen das Alphabet und verwenden den gleichen for-Schleifenindex, i, um über Ihre Nachricht "message.charAt (i);" zu iterieren. Tu das nicht. –

Antwort

0

Ihr Problem ist Ihre Schaltlogik. Wenn Sie beispielsweise versuchen, eine z um 5 zu verschieben, wird der Index außerhalb der Grenzen liegen. Sie müssen an diesem Punkt "herum" gehen. Zum Beispiel Verschiebung z von 2 sollte tatsächlich in die b (Index 1), nicht Index 27.

Auch Ihre for Schleife ist nicht sinnvoll, weil es nur dann, wenn message ist genau 26 Zeichen lang arbeiten werden .

Sie sollten über die Buchstaben in der Nachricht iterieren und jede verschieben. Stellen Sie sicher, dass Sie "herum". Auch keine Notwendigkeit für das Array von Buchstaben.

Noch ein Tipp: modulare Arithmetik kann hier nützlich sein.

Verwandte Themen