2016-11-11 74 views
0

好吧,對於一個學校項目,我正在嘗試製作一個方法來取得文件,使用凱撒密碼對其進行「加密」,然後輸出新的加密的單詞到輸出文件,讀取文件的所有單詞以給我們留下一個單獨的加密文件。Java凱撒密碼用數組值替換字符串中的字符

我快到的問題是,我得到一個

「意外的類型要求:變量值:值」錯誤

每當我試圖用新的替換字符一。

這是我的加密方法,所以希望這足以發現問題。

public static void encrypt(File inputFile, int key) throws FileNotFoundException 
{ 
    char[] alpha = new char[26]; 
    for(char ch = 'a'; ch <= 'z'; ch++) 
    { 
     int i = 0; 
     alpha[i] = ch; 
     i++; 
    } 
    Scanner in = new Scanner(inputFile); 
    while(in.hasNext()) 
    { 
     String word = in.next(); 
     word = word.toLowerCase(); 
     for(int i = 0; i < word.length(); i++) 
     { 
      for(int j = 0; j < alpha.length; j++) 
      { 
       if(word.charAt(i) == alpha[j]) 
       { 
        word.charAt(i) = alpha[j + key];  
       } 
      } 
     } 

    } 
} 

回答

0

爲字符串是不可變的,你不能這樣做

word.charAt(i) = alpha[j + key]; 

考慮使用StringBuilder的,而不是像

StringBuilder buf = new StringBuilder(); 
    for(int i = 0; i < word.length(); i++) 
    { 
     for(int j = 0; j < alpha.length; j++) 
     { 
      if(word.charAt(i) == alpha[j]) 
      { 
       buf.append(alpha[j + key]); 
      } 
      else { 
       buf.append (word[i]); // ?? 
      } 
     } 
    } 

    // do something with buf ?? 
+0

謝謝,這似乎已經解決了這個問題。只是好奇,你現在怎麼打印出這個文件?我顯然需要一次打印一個單詞,但是如何在不覆蓋每次保存文件的情況下執行此操作。 – Redfox2045

+0

@ Redfox2045我很高興它有幫助。請考慮upvote和/或接受這個答案。 –

+0

@ Redfox2045根據您的其他問題,請查看http://stackoverflow.com/questions/8563294/modifying-existing-file-content-in-java –