首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

急求答案解决办法

2013-02-25 
急求答案import java.util.*public class Decrption {//解密类Scanner inputnew Scanner(System.in)pub

急求答案
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不是同一个对象
总之你要把加密后的字符串传给解密类

[解决办法]

Quote: 引用:

将Switcher作为参数传入,或者把diao变量设为Switcher的成员变量都是可以的~~

局部变量是不行的~~

class Decrption{
    Switcher diao;
    public void setSwitcher(Switcher s){
        diao = s;
    }
}

Switcher类中调用时这样:

me2.setSwitcher(this);
String que = me2.joinString(ziMu2);

希望能解决问题
[解决办法]

import java.util.ArrayList;
import java.util.List;

public class ReStrings {

private List<String> reStrs=new ArrayList<String>();
public boolean isReString(String reString){
return reStrs.contains(reString);
}

public void addRestring(String reString){
if(reString!=null)
reStrs.add(reString);
}

}



import java.util.*;
public class Switcher {// 测试类

/**
 * @param args
 */

ReStrings reStrings = new ReStrings();

public static void main(String[] args) {
// TODO Auto-generated method stub
// Encryption me1=new Encryption();
Switcher method1 = new Switcher();

Scanner input = new Scanner(System.in);
while(true){

System.out.println("******欢迎使用凯撒加密器****");
System.out.println("***1.加密  2.解密  3.退出***");
System.out.println("***************************");
System.out.print("请选择菜单:");
method1.showmenu(input.nextInt());
}
}

public void showmenu(int choice) {
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' };

if (choice == 1) {
String restring = me1.addMi(ziMu1);
reStrings.addRestring(restring);System.out.println("加密后的字符串是:" + restring);
System.out.println("\n");
} else if (choice == 2) {

String que = me2.joinString(ziMu2,reStrings);if (que != "") {
System.out.println("解密后的字符串是:" + que);
} else {
System.out.println("该字符串未被加密操作");
}
} else if (choice == 3) {
exit();
}
}

public void exit() {
System.out.println("谢谢使用!!!");
}

}




import java.util.*;

public class Decrption {// 解密类
Scanner input = new Scanner(System.in);

public String joinString(char[] zm, ReStrings reStrings) {
//Switcher diao = new Switcher();
char[] splitString2 = new char[40];
String reString2 = "";

System.out.print("请输入加密后的字符串:");
String houString = input.next();
if (reStrings.isReString(houString)) {//diao.houString.equals(reStrings)
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;

}

}


[解决办法]
你把<SPAN style="COLOR: #ff0000">和<SPAN>都去掉 笔误
又改了 测试了 新加了一个ReStrings专门存放加密后的数据 清晰些
可以多次加密然后多次解密

热点排行
Bad Request.