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

时间:2021-11-21 22:08:43

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 的断点

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

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

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

  • 此时结果显示为

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

  • 点击 Step Over,单步执行

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

  • 最终结果为

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

  • 直接用 run显示结果

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

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

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