所以在我的程序中我应该有一个驱动程序类和实用程序类。我必须编写一个使用与Caesar相同类型的密码学的程序。例如a = f,b = g,c = h,依此类推。在我的驱动程序类中我应该有解码和编码过程。必须使用命令行参数对文件进行加密/解密。例如,
java CaesarLab编码“关键字”message.txt
在实用程序类中,字母的移位应该是。这是我知道放置此代码的地方:
public static final int NUM_LETTERS = 26;
// shifting up for the encoding process
public static char shiftUpByK(char c, int k) {
if ('a' <= c && c <= 'z')
return (char) ('a' + (c - 'a' + k) % NUM_LETTERS);
if ('A' <= c && c <= 'Z')
return (char) ('A' + (c-'A' + k) % NUM_LETTERS);
return c; // don't encrypt if not an alphabetic character
}
// shifting down for the decoding process
public static char shiftDownByK(char c, int k) {
return shiftUpByK(c, NUM_LETTERS - k);
}
它还应该从FileInputStream中读取,并通过捕获所有I / O异常来处理异常/错误。
这个程序似乎有很多组件,我无法将它们放在一起。如果我可以帮助整理所有这些,我们将不胜感激。
答案 0 :(得分:-1)
我做了一个小骷髅让你有一个特定的想法,那些&#34;很多组件&#34;可能。你已经拥有了你的驱动程序 - 让我们说你在CaesarDriver.java
中定义了它。
使用该&#34;驱动程序&#34;的实用程序现在可能看起来像这样:
import java.io.PrintWriter;
import java.util.Scanner;
/**
* This is a utility class allows to encrypt/ decrypt the data received by a Scanner {@see Scanner} using the caesar
* encoding by providing the key to be used.
*
* Note: Behind the scanner there may be a File or System.in as source
*/
public class CaesarUtility {
/**
* TODO: implement a mechanism to encrypt data ({@see Scanner}) and write the encrypted data out ({@see PrintWriter})
* TODO: use the provided key for encryption
* @param in source for the data to be encrypted {@see Scanner}
* @param out destination for the encrypted data to be written to {@see PrintWriter}
* @param key key to be used for the encryption
*/
public static void encrypt (Scanner in, PrintWriter out, String key){
// TODO: do we need to validate something? Could something be null? Do we need to care about this?
// TODO: Read from Scanner
String dataToEncrypt = "TODO: Read from Scanner";
// TODO: Encryption
String encryptedData = "Use your existing Caesar Driver with the correct method to encrypt the data";
// TODO: Write encrpyted data using the provided PrintWriter
}
/**
* TODO: The same like in encrypt but decrypt data this time
* @param in source for the data to be decrypted {@see Scanner}
* @param out destination for the decrypted data to be written to {@see PrintWriter}
* @param key key to be used for the decryption
*/
public static void decrypt (Scanner in, PrintWriter out, String key){
// TODO: Basicially the same but for decryption (e.g. you will use your driver slightly different here :))
}
}
允许世界使用这样的东西:
import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.util.Scanner;
/**
* Hello i am a Application that is too lazy to implement the Caesar encoding/ decoding - luckaly someone
* made me a Utility for that :)
*
* TODO: This could need some improvement - maybe let the user type in the in/output file in the console?
*
*/
public class Application {
// TODO: How i said i am a bit rosty here - was it a number or a character - you know it better than i do i assume :)
private static final String KEY = "???";
public static void main(String[] args){
new Application().start();
}
public void start(){
// lets first encode a file - we need to have a Scanner to be able to use the Utility class (so i searched)
// SO for "Java Scanner read File" and found this:
File inputFile = new File("sensitive-data.txt");
Scanner inputScanner = null;
try {
new Scanner(inputFile);
} catch (FileNotFoundException e) {
// TODO: Exception handling (does it make sence to proceed in this case? do we have to notify the user about this?
e.printStackTrace();
}
// let the utility encode the file and write it to another file - luckaly searching SO for "Java PrintWriter example"
// helps us out here
File outFile = new File ("sensitive-data.txt");
PrintWriter outWriter = null;
try {
outWriter = new PrintWriter (outFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// Alright we have both - the input as well as the output and the key - its time to let the utility do its work
CaesarUtility.encrypt(inputScanner, outWriter, KEY);
// TODO: Whoopy i accidentially overwritten the source file with encoded data - luckaly i am able to decode it again
// TODO: Decode the encoded file before the boss asks about the next sensitive-data report :)
}
}
我希望这可以帮助您进一步深入挖掘任务 - 当您下次遇到所有代码时,请随时更新您的答案(至少可以让您从现在开始提出更具体的问题)你不会被投降到地面。)