我不确定这是否是正确的问题,所以我只会解释我想要做的事情。我只是学习Java而且我必须编写一个简单的程序来加密和解密消息,只需将每个字母移动一定数量即可。我必须有三个类,一个静态加密,静态解密,以及测试每个类并接受所有用户输入的main。我不能完全理解的是,我必须将密钥分配给常量。这是基本结构:
public class Decryptor{
public static void decrypt(String message, String[] alphabet, int shiftKey){
//decrypt the message
}
public static String[] generateCypherAlphabet(String[] alphabet, int shiftKey){
// generate a cipher alphabet based on the key...which is somehow a constant
}
}
public class Encryptor{
public static void encrypt(String message, String[] alphabet, int shiftKey){
//encrypt the message
}
public static String[] generateCypherAlphabet(String[] alphabet, int shiftKey){
// generate a cipher alphabet based on the key...which is somehow a constant
}
}
class Tester{
private static final String[] ALPHABET = new String[26];
public static void generateAlphabet(){
// populate the constant ALPHABET
}
public static void main(String[] args){
// get some user input
// either decrypt or encrypt the message based on the key
// if the key is user dependant, how could it be a constant?
}
}
答案 0 :(得分:0)
当使用具有原始数据类型的final
时,它的值只能设置一次而不再被更改。
如果将其与参数一起使用,则不允许您的函数更改值:
public static void decrypt(String message, String[] alphabet, final int shiftKey){
//In this scope, shiftKey is constant. It cannot be changed.
}
答案 1 :(得分:0)
也许你被要求做的是让Tester类包含一个常量键值,它只传递给Decryptor和Encryptor方法。
答案 2 :(得分:0)
如果我理解正确,你可以放线(或类似的东西):
final static MY_CONSTANT = scannerObject.nextInt();
直接进入你的主要方法。有一个常量依赖于用户输入似乎很奇怪,但如果你有不同的类文件,就不需要在主类中全局声明常量,因为它将被传递给加密和解密主方法中的类。
答案 3 :(得分:0)
变量 ALPHABET 的最终修饰符使得无法重新定义指向它初始化的数组的指针,但它不会禁止更改数组中的String值。
答案 4 :(得分:0)
虽然您无法更改ALPHABET
中存储的数组,但您可以更改其中的每个对象。
您应该将ALPHABET[i]
设置为应该由此String
值引用的相关i
对象。
这应该根据你的任务逻辑在generateAlphabet()
中完成。
作为旁注 - 使用如此多的static
方法和变量通常是一种不好的做法,并且从面向对象的编程中获取所有优势。