主观题:设计一个加密类
设计一个加密接口Encryptable,在该接口中有两个方法:
public void encrypt();
public String decrypt();
设计一个加密类Secret实现Encryptable接口:
有一个字符串变量Message表示要加密的信息
有一个整数变量shift表示加字符进行变换要移动的位数
定义一个带参数message和shift的构造方法
实现encrypt()加密方法:对字符串进行变换,为字母时向后移动shift位,不是字母保持不变
实现decrypt()解密方法:对字符串进行变换,为字母时向前移动shift位,不是字母保持不变
实现一个toString()方法返回描述字符串。
要求:字母变换后仍为字母,例如shift为1,则加密时’a'变换为'b',‘z'变换为’a'。反之,解密时’b'变换为'a',‘a'变换为’z'。
编写测试程序如下:
public class Main {
public static void main(String[] args) {
Secret hush = new Secret("Wil Wheaton is my hero!", 5);
System.out.println(hush);
hush.encrypt();
System.out.println(hush);
hush.decrypt();
System.out.println(hush);
}
}
运行结果为:
Wil Wheaton is my hero!
Bnq Bmjfyts nx rd mjwt!
Wil Wheaton is my hero!
答案: interface Encryptable { // 2分
public void encrypt(); // 1分
public String decrypt(); // 1分
}
class Secret implements Encryptable { // 2分
private String message; // 1分
private int shift; // 1分
public Secret(String message, int shift) { // 2分
this.message = message;
this.shift = shift;
}
public void encrypt() { // 4分
String masked = "";
for (int index = 0; index < message.length();index++) {
if (Character.isUpperCase(message.charAt(index)))
masked = masked +(char)((message.charAt(index)+shift-'A')%26+'A');
else if (Character.isLowerCase(message.charAt(index)))
masked = masked +(char)((message.charAt(index)+shift-'a')%26+'a');
else
masked = masked +(char)message.charAt(index);
}
message = masked;
}
public String decrypt() { // 4分
String unmasked = "";
for (int index = 0; index < message.length();index++)
if (Character.isUpperCase(message.charAt(index)))
unmasked = unmasked +(char)((message.charAt(index)-shift-'A'+26)%26+'A');
else if (Character.isLowerCase(message.charAt(index)))
unmasked = unmasked +(char)((message.charAt(index)-shift-'a'+26)%26+'a');
else
unmasked = unmasked + (char)message.charAt(index);
message = unmasked;
return message;
}
@Override // 2分
public String toString() {
return message;
}
}
public void encrypt();
public String decrypt();
设计一个加密类Secret实现Encryptable接口:
有一个字符串变量Message表示要加密的信息
有一个整数变量shift表示加字符进行变换要移动的位数
定义一个带参数message和shift的构造方法
实现encrypt()加密方法:对字符串进行变换,为字母时向后移动shift位,不是字母保持不变
实现decrypt()解密方法:对字符串进行变换,为字母时向前移动shift位,不是字母保持不变
实现一个toString()方法返回描述字符串。
要求:字母变换后仍为字母,例如shift为1,则加密时’a'变换为'b',‘z'变换为’a'。反之,解密时’b'变换为'a',‘a'变换为’z'。
编写测试程序如下:
public class Main {
public static void main(String[] args) {
Secret hush = new Secret("Wil Wheaton is my hero!", 5);
System.out.println(hush);
hush.encrypt();
System.out.println(hush);
hush.decrypt();
System.out.println(hush);
}
}
运行结果为:
Wil Wheaton is my hero!
Bnq Bmjfyts nx rd mjwt!
Wil Wheaton is my hero!
答案: interface Encryptable { // 2分
public void encrypt(); // 1分
public String decrypt(); // 1分
}
class Secret implements Encryptable { // 2分
private String message; // 1分
private int shift; // 1分
public Secret(String message, int shift) { // 2分
this.message = message;
this.shift = shift;
}
public void encrypt() { // 4分
String masked = "";
for (int index = 0; index < message.length();index++) {
if (Character.isUpperCase(message.charAt(index)))
masked = masked +(char)((message.charAt(index)+shift-'A')%26+'A');
else if (Character.isLowerCase(message.charAt(index)))
masked = masked +(char)((message.charAt(index)+shift-'a')%26+'a');
else
masked = masked +(char)message.charAt(index);
}
message = masked;
}
public String decrypt() { // 4分
String unmasked = "";
for (int index = 0; index < message.length();index++)
if (Character.isUpperCase(message.charAt(index)))
unmasked = unmasked +(char)((message.charAt(index)-shift-'A'+26)%26+'A');
else if (Character.isLowerCase(message.charAt(index)))
unmasked = unmasked +(char)((message.charAt(index)-shift-'a'+26)%26+'a');
else
unmasked = unmasked + (char)message.charAt(index);
message = unmasked;
return message;
}
@Override // 2分
public String toString() {
return message;
}
}