• 学号 2018-2019-20175212 实验一 《Java开发环境的熟悉》


    学号 2018-2019-20175212 实验一 《Java开发环境的熟悉》

    一、实验内容及步骤

    1.使用JDK编译、运行简单的Java程序

    • mkdir 20175212exp1创建20175212epx1目录
    • cd 20175212exp1 进入20175212exp1目录
    • mkdir src , mkdir bin , cd src 创建子目录并进入
    • atom Hello.java 使用atom编辑器编写Hello.java文件
    • cd ..回到上级目录
    • javac -d bin src/Hello.java 编译代码并将可执行文件产生在bin目录中
    • cd bin java Hello 运行代码

    实验截图如下
    输入图片说明

    2.使用IDEA调试Java程序

    • 设置断点 (如下图)
      输入图片说明

    • 单步运行
      step into(F7)

      step over(F8)

    • 从一个断点到另一个断点 Resume(F9)

    • 设置条件断点(如下图)

    输入图片说明

    • 设置临时断点(如下图)
      输入图片说明

    3.练习

    实验题目:4. 实现学生成绩管理功能(增删改,排序,查找),并进行测试(正常情况,异常情况,边界情况)。

    代码为:

    package student.score.manage;
    
    
    
    public class Score {
    
        String num;
    
        String name;
    
        double score;
    
    
    
        public Score(){
    
    
    
        }
    
        public void setNum(String num) {
    
            this.num = num;
    
        }
    
    
    
        public void setName(String name) {
    
            this.name = name;
    
        }
    
    
    
        public void setScore(double score) {
    
            this.score = score;
    
        }
    
    }
    
    
    
    package student.score.manage;
    
    
    
    import java.util.Scanner;
    
    public class ScoreList {
    
        int maxLength = 100;
    
        int length = 0;
    
        Score[] data = new Score[maxLength];
    
    
    
        Scanner input = new Scanner(System.in);
    
    
    
        public ScoreList() {
    
    
    
        }
    
    
    
        //添加记录方法
    
        public void add() {
    
            if(length < maxLength) {
    
                data[length] = new Score();
    
                System.out.print("请输入学生的学号: ");
    
                data[length].setNum(input.next());
    
                System.out.print("请输入学生的姓名:");
    
                data[length].setName(input.next());
    
                System.out.print("请输入学生的成绩:");
    
                data[length].setScore(input.nextDouble());
    
                length++;
    
                System.out.println("添加成功!");
    
            }
    
            else {
    
                System.out.println("添加失败!");
    
            }
    
        }
    
    
    
        //显示成绩单方法
    
        public void transcript() {
    
            System.out.println("=====================================");
    
            System.out.println(" 学号                     姓名                      成绩 ");
    
            for(int i = 0; i < length; i++) {
    
                System.out.println(data[i].num + "	" + data[i].name + "	" + "	" + data[i].score);
    
            }
    
            System.out.println("=====================================
    ");
    
        }
    
    
    
        //成绩从高往低排序方法
    
        public void sort() {
    
            Score temp = new Score();
    
            for(int i = 1; i < length; i++) {
    
                for(int j = 0; j < length - i; j++) {
    
                    if(data[j].score < data[j + 1].score) { //冒泡法排序
    
                        temp = data[j]; data[j] = data[j + 1]; data[j + 1] = temp;
    
                    }
    
    
    
                }
    
            }
    
        }
    
    
    
        //平均分、最大最小值方法
    
        public void average() {
    
            double sum = 0.0;
    
            double max = 0.0;
    
            double min = 100.0;
    
            for(int i = 0; i < length; i++) {
    
                sum += data[i].score;
    
                max = max > data[i].score ? max : data[i].score;
    
                min = min < data[i].score ? min : data[i].score; //三目运算法
    
            }
    
            System.out.printf("这门课的平均成绩为: %.2f
    ", sum/length);
    
            System.out.println("最高分为: " + max + "
    " + "最低分为: " + min + "
    ");
    
        }
    
    
    
        //删除学生记录方法
    
        public void delete() {
    
            System.out.print("请输入您要删除信息的学生的学号: ");
    
            String number1 = input.next();
    
            int i, flag = length;
    
            for(i = 0; i < length; i++) {
    
                if(number1.equals(data[i].num)) {
    
                    flag = i; break;
    
                }
    
            }
    
            if(i == length) {
    
                System.out.println("查无此人!请核对后重新输入 
    ");
    
                delete();
    
            }
    
            else {
    
                for(int j = flag; j < length; j++) {
    
                    data[j] = data[j + 1];
    
                }
    
                System.out.println("删除成功!
    ");
    
                length -= 1; //不减1会报数组越界的错误
    
            }
    
        }
    
    
    
    
    
        //查询某个学生信息方法
    
        public void inquire() {
    
            System.out.print("请输入您要查询成绩的学生的学号:");
    
            String number2 = input.next();
    
            int i;
    
            for(i = 0; i < length; i++) {
    
                if(number2.equals(data[i].num)) {
    
                    System.out.println("====================================");
    
                    System.out.println(" 学号                     姓名                      成绩 ");
    
                    System.out.println(data[i].num + "	" + data[i].name + "	" + "	" + data[i].score);
    
                    System.out.println("====================================
    ");
    
                    break;
    
                }
    
            }
    
            if(i == length) {
    
                System.out.println("查无此人!请核对后重新输入学号 
    ");
    
                inquire();
    
            }
    
        }
    
    
    
        //修改学生信息方法
    
        public void recompose() {
    
            System.out.print("请输入您要修改信息的学生的学号:");
    
            String number3 = input.next();
    
            int i;
    
            for(i = 0; i < length; i++) {
    
                if(number3.equals(data[i].num)) {
    
                    System.out.println("请输入该学生新的学号,姓名和成绩:");
    
                    data[i].setNum(input.next());
    
                    data[i].setName(input.next());
    
                    data[i].setScore(input.nextDouble());
    
                    System.out.println("修改成功!
    ");
    
                    break;
    
                }
    
            }
    
            if(i == length) {
    
                System.out.println("查无此人!请核对后重新输入学号
    ");
    
                recompose();
    
            }
    
        }
    
    }
    
    
    
    package student.score.manage;
    
    
    
    import java.util.Scanner;
    
    public class Test {
    
        public static void main(String[] args) {
    
            Scanner input = new Scanner(System.in);
    
            String choice = "1";
    
            ScoreList studentScoreList = new ScoreList();
    
            System.out.println("**********学生成绩管理系统********");
    
            while(choice.equals("0") == false) {
    
                System.out.println("1.查看学生成绩单");
    
                System.out.println("2.添加学生成绩记录");
    
                System.out.println("3.修改学生成绩记录");
    
                System.out.println("4.删除学生成绩记录");
    
                System.out.println("5.查看某位学生成绩记录");
    
                System.out.println("6.统计这门课平均分、最高分和最低分");
    
                System.out.println("7.按成绩从高往低排序,并输出");
    
                System.out.println("0.退出程序");
    
                System.out.print("Enter your choice: ");
    
                choice = input.next();
    
    
    
                switch(choice) {
    
                    case "0":
    
                        System.out.println("谢谢您的使用,欢迎下次光临!
    " + "**********按任意键结束程序**********");
    
                        break;
    
    
    
                    case "1":
    
                        studentScoreList.transcript();
    
                        System.out.println("请问您还需要什么服务?
    ");
    
                        break;
    
    
    
                    case "2":
    
                        int i = 1;
    
                        do {
    
                            studentScoreList.add();
    
                            System.out.println("
    是否继续添加?" + "
    " + "0.否" + "
    " + "1.是");
    
                            i = input.nextInt();
    
                        }while(i == 1);
    
                        System.out.println("请问您还需要什么服务?
    ");
    
                        break;
    
    
    
                    case "3":
    
                        studentScoreList.recompose();
    
                        System.out.println("请问您还需要什么服务?
    ");
    
                        break;
    
    
    
                    case "4":
    
                        studentScoreList.delete();
    
                        System.out.println("请问您还需要什么服务?
    ");
    
                        break;
    
    
    
                    case "5":
    
                        studentScoreList.inquire();
    
                        System.out.println("请问您还需要什么服务?
    ");
    
                        break;
    
    
    
                    case "6":
    
                        studentScoreList.average();
    
                        System.out.println("请问您还需要什么服务?
    ");
    
                        break;
    
    
    
                    case "7":
    
                        studentScoreList.sort();
    
                        studentScoreList.transcript();
    
                        System.out.println("请问您还需要什么服务?
    ");
    
                        break;
    
    
    
                    default:
    
                        System.out.println("Invalid input! Please enter again.");
    
                        break;
    
                }
    
    
    
            }
    
        }
    
    
    
    }
    
    

    运行结果截图:

    正常情况:

    1. 添加学生添加学生

    2. 打印成绩单打印成绩单

    3. 添加学生添加学生

    4. 删除学生删除学生

    5. 查询学生查询学生

    6. 统计平均,最值统计平均,最值

    7. 按成绩排序按成绩排序

    8. 退出程序退出程序

    异常情况(当且不局限于 学号、成绩输入字符,名字输入数字时):
    异常

    用IDEA调试

    调试

    二、实验中遇到的问题

    • 问题一: 由于练习题目中所需构建的方法较多,难度也各不相同,但因没有主类无法进行分布编译,导致心态略炸。

    • 解决办法:利用IDAE的优点,利用软件的红波浪提醒,检查语法错误和遗漏,待完成主类之后再通过debug对程序进行调试并寻找逻辑错误。
      输入图片说明

    • 问题二:在三个类文件中首先引入包名package student.score.manage;,但一直提示语法错误。

    • 解决办法:为使成功编译运行,首先使用粗暴的办法,直接在windows目录下建立文件夹,如下图
      输入图片说明

      但回想起调试第四章代码,学习包时,编译时系统自动帮我建了文件夹。经过借鉴学习得知,原因为曾经使用的
      javac -d的编译方式 带有创建包的文件夹的功能

    实验总结和感悟

    • 在类与程序的基本结构中,可以说java程序有一个个类所构成,各类均为主类所服务。另外的,如练习题四中,若一个类可在其他各类中使用,则可以选择带包编译,方便快捷。

    • 由于我抽到的题目在代码量上对我而言有些许困难,免不了有借鉴学习之处,也理解了一些还未看到的内容。因此我认为无论使结对学习写代码,或是在网上 理解的 借鉴学习,都能对自身起到鞭策追赶的作用。

    • IDEA对于语法错误与遗漏有着鲜明的提示(红色下波浪),但程序中的逻辑错误肉眼很难辨别,因而掌握使用强大的调试功能显得尤为重要。

    步骤 耗时 百分比
    需求分析 10min 6.7%
    设计 20min 13.3%
    代码实现 90min 60%
    测试 10min 6.7%
    分析总结 20min 13.3%
  • 相关阅读:
    通过均匀分布随机数产生器获得一个高斯分布随机数产生器
    小雷郑重承诺:在2017年之前,对大学毕业4年以来的全部努力和探索,做一个全面客观的总结,技术研究、工作创业、投资理財、朋友感情等
    libevent入门篇
    [ACM] POJ 2000 Gold Coins
    hdu 2669
    IOS开发之 __bridge __bridge_transfer和__bridge_retained
    mysqlpassword忘记时怎样改动password(Linux&amp;Windows)
    计蒜客 15 map遍历
    SDUT OJ-2896
    c++ 银行管理系统及报告
  • 原文地址:https://www.cnblogs.com/thz666/p/10596431.html
Copyright © 2020-2023  润新知