20145325张梓靖 实验一 "Java开发环境的熟悉"

20145325张梓靖 实验一 "Java开发环境的熟悉"

程序设计过程

实验内容

  • 实现凯撒密码,并进行测试

编写代码

  • 使用java.util.Scanner进行输入,而它的方法里没有针对char的直接转换,所以选择输入数组定义为 String 类型。
  • 在运算过程中,需要将输入的字符串转变为字符的ASC11码,这样才可以对每个字符进行运算、转换。
  • 用 string.charAt(0),先收集到字符串中的每个字符(因为 string不能直接转化成ASC11相加减,只能先把 string转化为字符,再进行)
  • 然后对字符进行强制类型转化为 int ,这样才可以继续对字符的ASC11码进行运算。
  • 把转化后运算完的结果放入新定义的int数组中,必须定义int的数组,因为强制转换成了int,就只能用int的来装数据。
  • 当然,也可以再强制转换成char,只不过要把结果放入 char 数组里面,最后直接循环输出数组结果就好了。
  • 如果不直接再次强制转换成char的话,就在输出的时候再强制转化成 char 类型的就好。
  • 代码第一代:
import java.util.Scanner;
public class ExamOne {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String[] ming=new String[100];
        char[] mid=new char[100];
        int[] mi=new int[100];
        int time=0;
        int i=0;

        for( i=0;true;i++){
            System.out.printf("请输入第%d 字符%n",i);
            ming[i]=scanner.next();
            if(ming[i].charAt(0)=='#') {
               break;
            }
        }
        System.out.println("输入完毕了");
        time=i;
        System.out.println("i="+time);

        for( i=0;i<time;i++){
            System.out.printf("转换第%d个字母%n",i);
            mid[i]=ming[i].charAt(0);
            mi[i]=((int)mid[i]-'a'+3)%26+'a';
            System.out.printf("转换第%d个字母成功%n",i);
        }
        System.out.println("转换完了");

        for( i=0;i<time;i++){
            System.out.printf("输出第%d个字母%n",i);
            System.out.println((char)mi[i]);
        }
    }

}
  • 可通过直接空格的输入,不用每次输出一句话再输入字符。例,a b #(#是作为输入结束字符,不算作需进行转换的字符)
for( i=0;true;i++){
                ming[i]=scanner.next();
                if(ming[i].charAt(0)=='#') {
                    break;
                }
            }
  • 输入每一个字符时,必须用空格或者换行隔开,这是在选用 next 就决定好了的,因为没有 nextChar 的方法。

  • 但当直接用string.charAt()取得字符创中的每一个字符,这样就可以直接输入一串字符,不用空格或换行分隔了

  • 代码第二代:

public class ExamOne1 {
    public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            String ming="";
            char[] mid=new char[100];
            int[] mi=new int[100];
            int time=0;
            int i=0;

            System.out.println("请输入每个字符");
            ming=scanner.nextLine();

            System.out.println("输入完毕了");
            time=ming.length();
            System.out.println("i="+time);

            for( i=0;i<time;i++){
                System.out.printf("转换第%d个字母%n",i);
                mid[i]=ming.charAt(i);
                mi[i]=((int)mid[i]-'a'+3)%26+'a';
                System.out.printf("转换第%d个字母成功%n",i);
            }
            System.out.println("转换完了");

            for( i=0;i<time;i++){
                System.out.printf("%c",(char)mi[i]);
            }
    }

}
  • 将多余补充的输出删去
  • 代码最终版:
public class ExamOne1 {
    public static void main(String[] args) {
            Scanner scanner=new Scanner(System.in);
            String ming="";
            char[] mid=new char[100];
            int[] mi=new int[100];
            int time=0;
            int i=0;

            System.out.println("请输入明文");
            ming=scanner.nextLine();

            time=ming.length();

            for( i=0;i<time;i++){
                mid[i]=ming.charAt(i);
                mi[i]=((int)mid[i]-'a'+3)%26+'a';
            }

            System.out.println("密文为:");
            for( i=0;i<time;i++){
                System.out.printf("%c",(char)mi[i]);
            }
    }

}
  • 代码终极版:
import java.util.Scanner;
class Caesar{
    public static char[] mid=new char[100];
    public static int[] code=new int[100];
    public static int time=0;
    public static int i=0;

    public static void EncryptWrite(String write){
        time=write.length();

        for( i=0;i<time;i++){
            mid[i]=write.charAt(i);
            code[i]=((int)mid[i]-'a'+3)%26+'a';
        }

        System.out.println("密文为:");
        for( i=0;i<time;i++){
            System.out.printf("%c",(char)code[i]);
        }

    }
}
public class ExamOne1 {
    public static void main(String[] args) {
        Scanner scanner=new Scanner(System.in);
        String write="";

        System.out.println("请输入明文");
        write=scanner.nextLine();

        Caesar.EncryptWrite(write);


    }

}

调试代码

  • 使用 debug ,在循环处设置条件为 i==5 的断点

  • 调试程序,输入 hallojava ,点击 Resume,快速执行到断点所在处

  • 此时结果显示为

  • 点击 Step Over,单步执行

  • 最终结果为

  • 直接用 run显示结果

  • 使用命令行进行编译与执行

posted @ 2016-04-10 11:47  20145325张梓靖  阅读(159)  评论(5编辑  收藏  举报