编码密码

时间:2017-05-10 19:50:13

标签: java

我有问题。我想在java中做密码,它根据ASCII表从字符串中的每个字符输入步骤数。铭文应该只有字母(大和小)和空格(在编码和解码中也是如此)。这是我的代码,输出不打印“z”,编码(第一部分,真正的布尔值)从unicode生成奇怪的字符。

 static String Cezar(String tekst, boolean kodek, byte ile){
    char c;
    int i=0;
    int roboczy=0;
    String zwracany = new String();
    if(kodek==true){
    int odchyleniepo122, odchylenieprzed65=0;
    while(i<tekst.length()){
        //if (c<65)
            //c=65;
        c=tekst.charAt(i++);
        /*if (c>90 && c<97)
            c=97;
        if (c>122)
            c=122;
        if(c==32)
            c=65;*/
        roboczy = (int) c;
        roboczy = roboczy + ile;
        /*if(roboczy<0){
            roboczy=127;
        }
        if(roboczy>127){
            roboczy=0;
        }*/
        if (roboczy>90 && roboczy<97){

        }
        if (roboczy>122){
            odchyleniepo122=roboczy-122;
            //odchylenieprzed122=122-roboczy2;
            roboczy=65+odchyleniepo122;
        }
        if (roboczy<65 && roboczy!=32){
            odchylenieprzed65=65-roboczy;
        roboczy=122-odchylenieprzed65;
        }
        if (roboczy==32)
            roboczy=65;
        c=(char)roboczy;
        zwracany=zwracany+c;

                    }
    }
    if(kodek==false){
        int odchylenieprzed65 = 0;
    while(i<tekst.length()){
        //if (c<65)
            //c=65;
        c=tekst.charAt(i++);
        /*if (c>90 && c<97)
            c=97;
        if (c>122)
            c=122;
        if(c==32)
            c=65;*/
        roboczy = (int) c;
        //roboczy2=roboczy;
        roboczy = roboczy - ile;
        /*if(roboczy<0){
            roboczy=127;
        }
        if(roboczy>127){
            roboczy=0;
        }*/
        if (roboczy>90 && roboczy<97)
            roboczy=97;
        if (roboczy>122)
            roboczy=122;
        if(roboczy<65){
            odchylenieprzed65=65-roboczy;
            roboczy=122-odchylenieprzed65;
        }
        if(roboczy==65)
            roboczy=32;
        c=(char)roboczy;
        zwracany=zwracany+c;

                    }
    }
    return zwracany;
}

public static void main(String[] args) {
   String wynik1;
   byte ilosc = 126;
   wynik1=Cezar("la la la", true, ilosc);
   //wynik1=Cezar(wynik1, false, ilosc);
   System.out.println(wynik1);


}

}

1 个答案:

答案 0 :(得分:1)

更好的解决方案是定义字母表中可用的字符的常量数组(或者只是字符串,因为它是char []的实现),例如:

String alphabet = "abcd...xyzABCD...XYZ " //don't forget the tailing space

然后替换指定的字符将是:

char substitutionChar = alphabet.charAt(alphabet.indexOf(charToSubstitute) + offset)

它影响性能,因为我们只在一次替换中处理字母表字符串两次,但大大提高了代码的可读性和可管理性。

我还建议您格式化代码。只需在IDE中使用一些自动化工具,无论您认为它多么无用,它都会对您有所帮助:D

相关问题