我正在开发一个 Java 项目,我们必须实现一个凯撒密码。我有所有的代码工作,但我正在使用这个技巧,我想确保它不会导致未定义的行为。我对 Java 作用域的理解是,如果我byte key
在函数内部声明,那么所有对它的引用而不使用关键字this将引用局部变量,使用关键字将引用类字段。我已经测试了该程序并且它运行良好,但我对奇怪技巧的经验是它们可能导致未定义的行为并且并非一直有效。
Class Cipher {
byte key = -1;
...
String encrypt(String plaintext) {
byte key = this.key;
if(this.key == -1) {
System.out.print("Please enter a key: ");
key = input.nextByte();
}
...
}
}
更新:我忘了提供一些背景信息。构建类时,您可以选择指定密钥或不指定密钥,当您不指定密钥时,每次调用 encrypt() 或 decrypt() 时都会提示输入一个密钥。然后在函数内部使用变量键来执行 ROT 移位。