20199107hxx

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

20145120 《Java程序设计》实验一实验报告

实验名称:Java开发环境的熟悉

实验目的与要求:

1.使用JDK编译、运行简单的Java程序;(第1周学习总结)

2.编辑、编译、运行、调试Java程序。

实验内容、步骤

我的实验环境是Windows+IDEA
开始调试程序

只要想要设置断点的地方的左边左键点一下就可以设置断点了,右击断点可以设置成条件断点

step over和step into

resume

watch窗口,按绿色的加号可以添加变量,按红色的减号可以把已添加的变量删掉,在watch窗口可以看到变量目前的值


程序代码里也能看到变量值

教材学习中的问题和解决过程

因为我是用WINDOWS+IDEA,所以实验一博客很多部分我都不能直接套用,代码调试需要的各个按钮都要要自己摸索,把鼠标移上去,等提示信息显示出来,再比较老师的截图里的内容,才能确定这个按钮的作用。

设条件断点的时候把i==3和i=3搞错了

代码调试中的问题和解决过程

我是20号,20mod5+1=1,做的是凯撒密码的实现。

1.一开始我以为应该有个scanner.nextChar的方法,然而,其实并没有。后来百度了一下,找到了toCharArray(),toCharArray()可以把字符串转化成字符数组。

Scanner scanner = new Scanner(System.in);
        char[] m = new char[100];
        char[] c = new char[100];
        System.out.println("请输入明文:");   //输入明文
        String str=scanner.nextLine();
        char[] chars=str.toCharArray();
        for (int i=0;i<chars.length;i++){
            m[i]=chars[i];
        }

因为一开始定义好了明文和密文的字符串,以为有个nextChar,所以这样写了,后来才想到可以直接把转出来的字符数组定成m就好

2.加密的部分我开始是这样写的

for (int i=0;i<100;i++){    //加密
            if ((m[i]>='a'&&m[i]<='w')||(m[i]>='A'&&m[i]<='W')) {
                c[i] = (char) (m[i] + 3);
            }
            else if ((m[i]>='x'&&m[i]<='z')||(m[i]>='X'&&m[i]<='Z')){
                c[i] = (char) (m[i] + 3-26);
            }
            else {
                c[i]=m[i];
            }
        }

后来发现程序不能运行,调试之后发现,如果明文小于100,后面都是Null,不可能再+3,所以出错了

3.后来我想尝试让可以自己输入密钥

System.out.println("请输入密钥:");   //取得密钥
int key = scanner.nextInt()%26;
        
System.out.println("请输入明文:");   //取得明文
String str=scanner.nextLine();

发现输入密钥之后程序直接走完了,瞬间有种似曾相识的感觉,于是我试了下在中间加行scanner.nextLine();,果然成功了。

最终程序和截图

import java.util.Scanner;

public class Test {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        char[] c = new char[100];
        System.out.println("请输入密钥:");   //取得密钥
        int key = scanner.nextInt()%26;
        scanner.nextLine();
        System.out.println("请输入明文:");   //取得明文
        String str=scanner.nextLine();
        char[] m=str.toCharArray();

        if (m.length>=100){
            System.out.println("输入过长,请控制在100英文字符以内");
        }

        for (int i=0;i<m.length;i++){    //加密
            if ((m[i]>='a'&& m[i]<='z')||(m[i]>='A'&& m[i]<='Z')) {
                c[i] = (char) (m[i]+key);
                if (key>0){
                    if ((c[i]<'a'&& c[i]>'Z')||c[i]>'z'){
                        c[i] -= 26;
                    }
                }
                else{
                    if ((c[i]<'a'&& c[i]>'Z')||c[i]<'A'){
                        c[i] += 26;
                    }
                }
            }
            else {
                c[i]=m[i];
            }
        }

        System.out.println("密文:");      //输出密文
        for (int i=0;i<m.length;i++) {
            System.out.printf("%c",c[i]);
        }
    }
}

实验心得与体会

这次实验本身的算法不是很难,但是感觉编程中考验到我的地方还是不少,例如我一直以为是有一个scanner.nextChar(),老实说我到现在都不懂为什么不弄个nextChar出来。这次实验让我实践到了之前学到的很多知识,例如变量的定义,“.length”的使用,“Scanner”的使用等等,也学会了很多新知识,包括关于Scanner的一些特点,如何用IDEA调试代码等等,获益良多。

参考资料

posted on 2016-04-09 17:15  20199107hxx  阅读(2264)  评论(2编辑  收藏  举报