2016-11-06 23 views
0

私は学校のためにシーザー暗号を作ろうとしていますが、何らかの理由で私のコードがうまく動作しません。デコードでもエラーは発生しません。問題はscan.nextLine()の後です。コード化されたメッセージが入力されるように要求した後、コードはシーケンス全体をスキップして停止します。私が何かを入力する前に。Javaコードは、次の.nextLine()以外はありません。スキャナ

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

} 
} 

私の休憩の1つが問題を引き起こしていると思います。

+0

デバッガでプログラムを実行してみましたか? – Robert

答えて

0

scan.nextLine()の代わりにscan.next()を使用するか、これを回避する2つのScannerオブジェクトを作成してください。

nextLineが入力した '\ n'が、nextInt()でスキップされて停止したようです。 nextInt()は、行区切り記号ではなくint値のみをスキャンします。

詳細については、Scanner

関連する問題