2014-03-27 83 views
1

對於我的計算機科學課,我不得不創建一個凱撒Cypher,需要兩個或三個命令行參數,第一個是一個關鍵是每個字母在信息將被移動的數量,第二個是包含原始消息的文件,第三個是可選的,如果存在,則它使用加密的代碼創建指定的文件,如果不存在,則將輸出打印到屏幕上。除了刪除空格之外,一切都可以正常工作,例如,如果我傳入5的密鑰並且傳遞消息「您好,我的名字是Dave」,它會打印出「Mjqqt1r〜sfrjnxIf {j3」,如果我傳入-5並且「Mjqqt1r〜sfrjnxIf {j3」,它打印出「Hello,mynameisDave」。我怎樣才能使它不會刪除空格?凱撒Cypher刪除空間

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

public class Caesar 
{ 
     public static void main(String[] args) 
    { 
      int key = Integer.parseInt(args[0]); 
     Scanner in = null; 
     PrintWriter out = null; 
     try 
     { 
      in = new Scanner(new File(args[1])); 
      if(args.length == 3) 
      { 
       out = new PrintWriter(args[2]); 
      } 
      while(in.hasNextLine()) 
      { 
       char[] charVal = in.next().toCharArray(); 
       for(int i = 0; i < charVal.length; i++) 
       { 
        if(charVal[i] < 32 || charVal[i] > 126) 
        { 
         charVal[i] = charVal[i]; 
        } 
        else 
        { 
         charVal[i] = (char) (charVal[i] + key); 
        } 
        if(charVal[i] > 126) 
        { 
         charVal[i] = (char) (charVal[i] - 95); 
        } 
        else if(charVal[i] < 32) 
        { 
         charVal[i] = (char) (charVal[i] + 95); 
        } 
       } 

       if(out != null) 
       { 
        out.print(charVal); 
       } 
       else 
       { 
        System.out.print(charVal); 
       } 
      } 
     } 
     catch (FileNotFoundException e) 
     { 
      System.out.println("Error: File not found."); 
      e.printStackTrace(); 
     } 
     finally 
     { 
      in.close(); 
      if(out != null) 
      { 
       out.close(); 
      } 
     } 
    } 
} 
+0

只是把in.nextLine()而不是in.next()將解決您的問題 –

回答

0

您是否嘗試過調試您的代碼?

這將是一個很好的方法來找出什麼條件分支執行什麼空間字符遇到。

,通過檢查你的代碼,我可以說,這個問題是在你第一次的if-else塊這裏:

   if(charVal[i] < 32 || charVal[i] > 126) 
       { 
        charVal[i] = charVal[i]; 
       } 
       else 
       { 
        charVal[i] = (char) (charVal[i] + key); 
       } 

記得,空間的整數ASCII值是32,所以,else塊被執行即使是一個空間。

您需要更改if條件以確保if塊處理空間。

編輯:

此外,in.Next()獲取的下一個 「字」。這就是爲什麼該空間永遠不會在charVal數組中。

2

嘗試使用in.nextLine()而不是in.next()in.next()基本上查找下一個單詞,並一次給你一個。這就是空間消失的原因。

+0

@anupam傑里米是正確的......空間中消失監守.next()給出下一個單詞。 –

+0

@JatinKhurana Khurana true。我忽略了這一點。 – anu

0

提示:

  1. 查找爲空格字符的字符值;例如man ascii或Google吧。

  2. 仔細檢查您的代碼,以查看輸入字符串中的空間會發生什麼......以及爲什麼。然後找出如何避免它。

  3. 使用調試盧克...