急求答案
import java.util.*;
public class Decrption {//解密类
Scanner input=new Scanner(System.in);
public String joinString(char[] zm){
Switcher diao=new Switcher();
char[] splitString2=new char[40];
String reString2="";
System.out.print("请输入加密后的字符串:");
String houString=input.next();
if(houString.equals(diao.reString)){
for(int i=0;i<houString.length();i++){
splitString2[i]=houString.charAt(i);
}
for(int i=0;i<houString.length();i++){
for(int j=3;j<zm.length;j++){
if(splitString2[i]=='a'){
splitString2[i]='x';
break;
}
if(splitString2[i]=='b'){
splitString2[i]='y';
break;
}
if(splitString2[i]=='c'){
splitString2[i]='z';
break;
}
if(splitString2[i]==zm[j]){
splitString2[i]=zm[j-3];
break;
}
if(j==zm.length-1){
splitString2[i]=splitString2[i];
}
}
}
for(int i=0;i<houString.length();i++){
reString2=reString2+splitString2[i];
}
}
return reString2;
}
}
import java.util.*;
public class Switcher {//测试类
/**
* @param args
*/
Scanner input=new Scanner(System.in);
String reString;
public static void main(String[] args) {
// TODO Auto-generated method stub
//Encryption me1=new Encryption();
Switcher method1=new Switcher();
method1.showmenu();
}
public void showmenu(){
Encrption me1=new Encrption();
Decrption me2=new Decrption();
char[] ziMu1={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z','a','b','c'};
char[] ziMu2={'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'};
System.out.println("******欢迎使用凯撒加密器****");
System.out.println("***1.加密 2.解密 3.退出***");
System.out.println("***************************");
System.out.print("请选择菜单:");
int choice=input.nextInt();
if(choice==1){
reString=me1.addMi(ziMu1);
System.out.println("加密后的字符串是:"+reString);
System.out.println("\n");
showmenu();
}
else if(choice==2){
String que=me2.joinString(ziMu2);
if(que!=""){
System.out.println("解密后的字符串是:"+que);
showmenu();
}
else{
System.out.println("该字符串未被加密操作");
showmenu();
}
}
else if(choice==3){
exit();
}
}
public void exit(){
System.out.println("谢谢使用!!!");
}
}
import java.util.*;
public class Encrption {//加密类
public String addMi(char[] zm){
Scanner input=new Scanner(System.in);
System.out.print("请输入待加密的字符串:");
String yuanString=input.next();
char[] splitString1=new char[40];
for(int i=0;i<yuanString.length();i++){
splitString1[i]=yuanString.charAt(i);
}
for(int i=0;i<yuanString.length();i++){
for(int j=0;j<zm.length;j++){
if(splitString1[i]==(zm[j])){
splitString1[i]=zm[j+3];
break;
}
if(j==zm.length-1){
splitString1[i]=splitString1[i];
}
}
}
String joinString="";
for(int i=0;i<yuanString.length();i++){
joinString=joinString+splitString1[i];
}
return joinString;
}
}
为什么diao.reString的值会变为初始值。我不是已经调用了吗?按理说应该有新值了啊
[解决办法]
楼主的意思是不是说,先输入1进行加密,得到reString;后来又输入2,结果reString变为了初始值?
我刚刚运行了楼主的程序,发现在输入2的时候,程序调用了joinString:
String que = me2.joinString(ziMu2);
接着joinString中,第一句对diao变量进行了初始化:
Switcher diao = new Switcher();
此时你所看到的diao并不是原来的Switcher
楼主可以让diao变量作为类的域而不是一个局部变量,这样在Decrption中写一个setSwitcher(Switcher s),并外部的switcher传入Decrption类中将,来对diao赋值即可。
希望有帮助~~^
[解决办法]
声明成为成员变量也可以 我的运行过 可以对最后一次加密的字符串解密 加密两次解密一次 第一次的就该字符串未被加密操作 如果需求上要连续加密两次 这代码还要改
正如3楼所说
joinString中
Switcher diao = new Switcher();
而你在main方法中
Switcher method1 = new Switcher();
diao.reString和 method1.reString不是同一个对象
总之你要把加密后的字符串传给解密类
[解决办法]