从用户输入声明常量

时间:2014-04-07 08:00:35

标签: java

我不确定这是否是正确的问题,所以我只会解释我想要做的事情。我只是学习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?
    }
}

5 个答案:

答案 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方法和变量通常是一种不好的做法,并且从面向对象的编程中获取所有优势。