2016-11-06 3 views
0

Ich versuche, eine Caesar-Chiffre für die Schule zu machen, aber aus irgendeinem Grund funktioniert mein Code nicht. Es gibt auch keinen Fehler beim Decodieren. Das Problem ist nach der scan.nextLine(); nachdem er nach einer codierten Nachricht gefragt hat, springt der Code einfach über die gesamte Sequenz und stoppt. Bevor ich etwas eingeben kann.Java-Code wird nicht verwendet, außer nextLine(); Scanner

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

public class CodeAssignment4 { 

public static void main(String[] args) throws IOException 
{ 
    Scanner scan= new Scanner (System.in); 

System.out.println("Please enter the key to your cipher"); 
    int key = scan.nextInt(); 
     if (key >= 26) { 
      System.out.println("Key out of range"); 
      return; 
     } 

System.out.println("Please enter your coded message"); 
    String codemessage = scan.nextLine(); 

int length = codemessage.length(); 

char[]codemessagearray = codemessage.toCharArray(); 

char value; 

char newkey = (char)key; 

String decodedmessage = " ";  

int i; 
for (i=0; i < length; i++) { 
    value = codemessagearray[i]; 

if ((value < 'a') || (value > 'z')) { 
    System.out.println("Character out of range"); 
    break; 
} 

value -= 'a'; //send range to zero 
value -= newkey; //decrament key 
value += 26; //account for negative 
value = (char)((int)value%26);  

decodedmessage += value + 'a';  
} 
if (i == length) { 
    System.out.println(decodedmessage); 
} 

} 
} 

Ich denke, einer meiner Pausen verursacht ein Problem.

+0

haben Sie versucht, in einem Debugger durch Ihr Programm treten? – Robert

Antwort

0

Verwenden Sie scan.next() anstelle von scan.nextLine() oder erstellen Sie zwei Scanner Objekte, um dies zu vermeiden.

Es sieht so aus, als ob nextLine den Eingang '\ n' verbraucht, der von nextInt() übersprungen wurde und stoppt. Als nextInt() scannt nur die int-Werte nicht das Zeilentrennzeichen.

Für weitere Informationen gehen Sie zu: Scanner

Verwandte Themen