初学者Java:基本加密程序(Ceasar Cipher)

时间:2015-12-05 07:09:49

标签: java

上周我们的考试中有一个问题。我们被要求设计一个可用于输入字符串和数字的类,其中字符串的字符移动的数量与输入的数字一样多。

要记住两件事。一,情况无关紧要。输出可以是相同的情况,也可以是标准的。二,如果输入A和2,Y就是我们得到的。字母表四处传播。

示例输入:

  

我爱Java

     

2

示例输出:

  

G JMTC HYTY

这是我在考试期间提出的(这是一个书面的,所以我无法检查它是否有效)。当我编译并运行它时,这就是我得到的 -

示例输入:

  

我爱Java

     

2

示例输出:

  

G8JMTC8HYTY

我尝了几个字,所以基本上就是这里发生了什么。空格由10-(

)的数字代替
import java.util.*;
public class ENCRYPT
{
    static void main()
    {
        Scanner in=new Scanner(System.in);
        System.out.println("Enter the string");        
        String a=in.nextLine();        
        a=a.toLowerCase(); 
        System.out.println("Enter the encrption value");
        int m=in.nextInt();
        String x=""; char ch;
        for(int i=0; i<a.length(); i++)
        {
            ch=a.charAt(i);
            if((int)ch-97<m)
            {
                x=x+(char)((123-m)+(int)ch-97);
            }
            else if(ch==' ')
            {
                x=x+' ';
            }
            else
            {
                x=x+(char)((int)ch-m);
            }
        }
        System.out.println(x.toUpperCase());
    }
}

1 个答案:

答案 0 :(得分:1)

错误是因为(int)ch-97&lt; m 对于空间也是 true 。所以它在if语句中进入。

您可以先通过空格检查然后再使用代码来解决问题......

if(ch==' ')
    {
        x=x+' ';
    } else if((int)ch-97<m)
    {
        x=x+(char)((123-m)+(int)ch-97);
    }
    else
    {
        x=x+(char)((int)ch-m);
    }