`
sealbird
  • 浏览: 591149 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

北理工Java技术与应用考试试题参考答案及点评(下)

    博客分类:
  • JAVA
阅读更多

from :http://blog.csdn.net/bitfan/archive/2010/12/18/6083935.aspx
引用


北理工Java技术与应用考试试题参考答案及点评(上)

三 编程题(共50分)

说明:
    (1)编程题共分为两组:简单编程题与综合编程题。
    (2)请在试卷后所附的答题纸上书写程序代码,注明题号。

1 简单编程题(每题5分,共35分)

(1)    编写一个程序,用户输入任何一个字串之后,反转输出其结果。其运行结果如下所示:

    请输入一个字串:我在学习Java程序设计
    您输入了:计设序程avaJ习学在我

参考答案:

这首题非常简单,提取出字符串中的每个字符,将其追加到StringBuilder中,然后调用StringBuilder.toString方法生成结果字串。

import java.util.Scanner;

public class MyClass {

    public static void main(String[] args){
        System.out.print("请输入一个字串:");
        Scanner in=new Scanner(System.in);
        String input=in.nextLine();
        System.out.print("您输入了:");
        System.out.println(reverseString(input));
    }
    public static String reverseString(String str){
        char[] chars=str.toCharArray();
       StringBuilder sb=new  StringBuilder();
        for(int i=chars.length-1;i>=0;i--){
            sb.append(chars[i]);
        }
       return sb.toString();
    }
}

    我感到比较有意思的是,有几个同学“画蛇添足”地加上了以下判断:如果汉字,则占两个字节,如果英文,则占一个字节,这明显是受到C/C++的影响。在Java中,所有字符均占两个字节,英文汉字一视同仁。

(2)    编写一个方法,它接收一个int数组作为参数,外界只需调用一次这个方法,可以马上得到这个数组的最大值、最小值和平均值信息。

    此题关键在于需要定义一个可用于保存多个结果的数据结构,并将其作为所编写方法的返回值。

class ArrayInfo
{
    public int max=0;
    public int min=0;
    public double average=0;
}

定义好了ArrayInfo类后,此方法就很容易编写了:

    public static ArrayInfo getArrayInfo(int[] arr) {
        ArrayInfo obj = new ArrayInfo();
        int sum = 0;
        obj.max = obj.min = arr[0];
        for (int value : arr) {
            if (value > obj.max) {
                obj.max = value;
            }
            if (value < obj.min) {
                obj.min = value;
            }
            sum += value;
        }
        obj.average = (double) sum / arr.length;
        return obj;
    }

有的学生写出了这样的方法:

Boolean ConfigArray(int[] Array, int Max, int Min, int Ave)
{
    ……
}
这个方法能达到目的吗?
另有几个学生则比较聪明,他们让方法向外界返回一个数组:

public static int[] calculate(int[] arr){
      int[] result=new int[3];
      //查找arr中的最大值、最小值,判断平均值,放到result中。
      return result;
  }

还有一种办法,就是将要获取的信息设计为一个类的字段,计算最大值等的方法作为此类的方法,这样,在方法体内就可以直接设置字段的值了,方法执行完后,外界通过访问这些字段得到结果。

(3)    请编写一个方法,其声明如下:

     public static int[] getRandomizeNumbers(int begin,int end,int count)

     此方法将生成一个数组,包容count个[begin,end)范围内的随机整数.

送分题。

public static int[] getRandomizeNumbers(int begin,int end,int count)
    {
         int[] arr=new int[count];
         int scope=end-begin;
         for(int i=0;i<arr.length;i++)
             arr[i]=(int)(Math.random()*scope)+begin;
         return arr;

     }

另外,Random类有一个nextInt(int n)方法,直接可以生成[0,n)之间的随机整数,使用更为方便。

(4)    数学中,一个复数包容着一个实部(Real)和一个虚部(Imaginary)。请设计一个Complex类,它的实例代表一个复数,并且用户可以这样使用它:

     //创建一个实部为3,虚部为4的复数
     Complex obj=new Complex(3,4);
    //Complex对象具备按照数学中复数的习惯表示形式输出的能力。
    System.out.println(obj);  //输出:3+4i

    送分题,覆盖一下toString()方法就行了。

class Complex {
    public double real;
    public double imaginary;
    public Complex(double realValue, double imaginaryValue) {
        real = realValue;
        imaginary = imaginaryValue;
    }
    public String toString() {
        return real + "+" + imaginary + "i";
    }
}

(5)    A、B、C是三个类,它们之间有着以下的组合关系:

 

请编写一个示例程序,这个程序可以完成对A对象的深复制(Deep Copy)。

关键点:
    A完全包容B,但引用C。    因此,将B作为A的内部类比较合适。
    为了方便展示对象深复制的特性,特为A、B、C都添加一个int类型的字段。
    以下是代码:
    最简单的C:
    class C {
        public int cValue;
    }
    嵌在A内部的B,请注意B是内部类,在A创建时,自动创建B对象,为了能访问到B的字段值,为A添加了两个方法:
    class A {
        public int aValue;
        private B bObj = new B();  //重要!B对象由A对象负责创建
        //B对象定义为内部类,外界无法实例化它,为A所“专用”
        private class B {
            public int bValue;
        }
        //存取A对象所包容B对象的字段
        public void setBValue(int value) {
               bObj.bValue = value;
        }
        public int getBValue() {
            return bObj.bValue;
        }
        //A所引用的C对象
        public C cObj = null;
    }
    以下是深复制对象A的方法:

    private static A cloneA(A originalObject) {
        A cloned = new A();  //创建“副本”对象
        cloned.aValue = originalObject.aValue;
        //设置所包容的内部B对象的方法
        cloned.setBValue(originalObject.getBValue());
        //复制C对象
        C newCObject = new C();
        newCObject.cValue = originalObject.cObj.cValue;
        //将C对象关联上A对象
        cloned.cObj = newCObject;
        return cloned;
    }

    为方便起见,可以定义以下方法输出A对象的所有字段信息:

    private static void printEmbedObject(A obj) {
        System.out.println("A.aValue=" + obj.aValue);
        System.out.println("A.getBValue()返回:" + obj.getBValue());
        System.out.println("A.cObj.cValue=" + obj.cObj.cValue);
    }

    以下示例代码展示创建A对象并克隆它的方法:

        //创建A对象
        A a = new A();
        a.aValue = 100;
        //设置A对象所包容内部对象B的值
        a.setBValue(200);
        //创建C对象
        C c = new C();
        c.cValue = 300;
        //让A对象关联上C对象
        a.cObj = c;
        printEmbedObject(a);
        System.out.println("=============");
        printEmbedObject(cloneA(a));

    上述方法使用一个独立的静态方法实现对象克隆,另一种方法是;
    Object类提供了一个protected clone()方法,子类可将其定义为public的,从而向外界提供克隆自己的功能,另外,推荐让能支持深复制的对象实现Cloneable接口。

(6)    我们可以调用Integer.parseInt()方法将一个字串转换为int类型的数值,当要转换的字串不是一个有效的数字时(比如“a123”),Integer.parseInt()方法会抛出一个NumberFormatException。
    你需要编写一个程序,当程序运行时让用户从键盘上输入一个字串,代表考试成绩,然后调用Integer.parseInt()方法将其转换为int类型,并给出是否通过的提示:
    请输入您的考试成绩:76(回车)
    恭喜您通过了考试!
    由于无法控制用户的输入,因此可能出现以下两种出错情况:
1)    用户输入了一个无法转换为int数值的字符串。
2)    用户输入的数字不在[0,100]区间内。
    请使用Java的异常捕获机制设计一个自定义的异常类InvalidScroreException,当出现上述出错情景时能抛出一个InvalidScroreException异常对象,通知用户他的输入有误。

    在实际开发中,经常需要将底层非常计算机化的异常转换为可供界面层直接捕获的异常,并且能提供用户易于理解的信息。、
    另外,出于业务逻辑的要求,需要将一些非法的输入数据、无效或错误的运行结果等转换为业务逻辑层的异常。
    这道题主要希望能了解一下学生是否掌握了这种异常类型转换的编程方法。。

private static int getTestScore() throws InvalidScroreException {
        System.out.print("请输入您的考试成绩:");
         Scanner scanner = new Scanner(System.in);
        String userInput = scanner.nextLine();
        int score = 0;
        try {
            score = Integer.parseInt(userInput);
        } catch (NumberFormatException ex) {
            throw new InvalidScroreException("您输入的不是一个有效的整数!" );
        }
        if (score > 100 || score < 0) {
            throw new InvalidScroreException("有效的分数在0~100之内。");
        }
        return score;
    }

以下为测试代码:

    public static void main(String[] args) {
        try  {
        if (getTestScore() >= 60)
            System.out.println("恭喜您通过了考试!");
        else
            System.out.println("不要灰心,继续努力!");
        }
        catch(InvalidScroreException ex){
            System.out.println(ex.getMessage());
        }
    }

(7)    设计一个类,实现以下的状态机:

 


这道题其实很简单,关键是将3个状态定义为枚举类型,并且需要检测出非法的状态转换。

enum State {
    Created, Opened, Closed
}

class MyStateMachine {
    private State curState = State.Created;
    public void Open() throws Exception {
        if (curState != State.Created) {
            throw new Exception("已Closed的对象无法再Open");
        }
        curState = State.Opened;
    }
    public void Close() {
        curState = State.Closed;
    }
}

    也有的同学使用常量来定义状态,虽然不算很好,但也算不错。
    还有的同学使用String变量,int变量来定义状态,就不太合适了,不过我都没扣分。
    只有少数几个学生知道应该在状态转换时检测一下是否这种转换是有效的。

    2 综合编程题(15分)

一个图书管理系统的面向对象设计方案如下图所示:……

这道题其实太简单了,除了代码量大些,没有任何难点。因此略过。在改卷时,只要学生思路清晰,代码意图明确,没有明显的语法错误,都给了较高的分数。

总评:

我设计这套试题的总体思路是:
    (1)希望能检测出学生对Java面向对象编程基础知识与基本概念的理解程度。
    (2)大大减少考核纯知识方面的题目,引导学生不要死记硬背地学习。
    (3)设计的题目不少源自我本人的开发实践,我希望这些题目能给与学生一个明确的导向:学习编程必须重视动手。
    (4)有意设计一些比较“活”题目,看看学生能否灵活应用已学到的知识,面对着一个“现实”的可能他并不知道答案的问题,具备一定的分析与推测能力。引导学生“透过代码看到背后的东西”,培养学生“探索式学习”的能力和意识。
    我觉得这种能力和意识的培养远比具体的知识重要得多。
    (5)在阅卷时,我比较注重学生在答题时是否思路清晰,回答是否有条理,具体答案反而是次要的。
    (6)为了让大多学生可以及格,有意地设计一些送分题,但同时为了加大区分度,设计了一些有一定难度和灵活性的题目,整个试卷的题量是较大的,要及格其实容易,要得高分就不容易了。

最终的卷面成绩统计结果如下:

最高分:86
最低分:35
平均分:68.03
各分数段所占学生人数比例:
60以下:   12%
60~70:  39%
70~80:    21%
80~90:    27%
90以上:   0%

    从考试结果来看,比2007级要好得多。有关2007级学生考试的情况,请看去年的两篇文章:
    《一套Java面向对象技术试题的分析 》和《 与学生谈编程和考试 》

    只要学生认真去学,总能学到东西。
    只要教师注意选择教学方法,引导得当,学生的学习效果还是可以的。
    这里需要告诉看这篇文章的朋友可能不知道的一个实情:
    原先选修这门课的学生是不少的,但在我宣布了考核方式并且讲授到比较复杂一点的内容之后,50%以上的学生退缩了,选择了退课。
    这个现象实在是“意味深长”。
    而我的下一篇文章,计划着就写写这个让人“百味杂陈”的中国计算机教育。

=========================================

敬请大家特别关注我发布的:


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/bitfan/archive/2010/12/18/6083935.aspx
分享到:
评论

相关推荐

    《计算机组成原理》学习系统的设计与实现开题报告【答辩高分内容】.doc

    - 设计与实现方面:国内多所高校如北京大学等已开发出辅助学习工具和在线学习平台,提供实验环境、在线教学视频等资源。 - 教学方法创新方面:部分高校采用项目驱动、问题导向等教学法,强调实践操作和自主学习。 ...

    智慧园区3D可视化解决方案PPT(24页).pptx

    在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。

    labelme标注的json转mask掩码图,用于分割数据集 批量转化,生成cityscapes格式的数据集

    labelme标注的json转mask掩码图,用于分割数据集 批量转化,生成cityscapes格式的数据集

    (参考GUI)MATLAB GUI漂浮物垃圾分类检测.zip

    (参考GUI)MATLAB GUI漂浮物垃圾分类检测.zip

    人脸识别_OpenCV_活体检测_证件照拍照_Demo_1741778955.zip

    人脸识别项目源码实战

    人脸识别_科大讯飞_Face_签到系统_Swface_1741770704.zip

    人脸识别项目实战

    跟网型逆变器小干扰稳定性分析与控制策略优化simulink仿真模型和代码.zip

    本仿真模型基于MATLAB/Simulink(版本MATLAB 2016Rb)软件。建议采用matlab2016 Rb及以上版本打开。(若需要其他版本可联系代为转换) CSDN详情地址:https://blog.csdn.net/qq_50594161/article/details/146242453sharetype=blogdetail&sharerId=146242453&sharerefer=PC&sharesource=qq_50594161&spm=1011.2480.3001.8118

    16-1文本表示&词嵌入.ipynb

    实战练习分词、创建词表、文本处理

    45页-零碳智慧园区标准解决方案:模块化、可扩展且可复制的解决方案.pdf

    在智慧园区建设的浪潮中,一个集高效、安全、便捷于一体的综合解决方案正逐步成为现代园区管理的标配。这一方案旨在解决传统园区面临的智能化水平低、信息孤岛、管理手段落后等痛点,通过信息化平台与智能硬件的深度融合,为园区带来前所未有的变革。 首先,智慧园区综合解决方案以提升园区整体智能化水平为核心,打破了信息孤岛现象。通过构建统一的智能运营中心(IOC),采用1+N模式,即一个智能运营中心集成多个应用系统,实现了园区内各系统的互联互通与数据共享。IOC运营中心如同园区的“智慧大脑”,利用大数据可视化技术,将园区安防、机电设备运行、车辆通行、人员流动、能源能耗等关键信息实时呈现在拼接巨屏上,管理者可直观掌握园区运行状态,实现科学决策。这种“万物互联”的能力不仅消除了系统间的壁垒,还大幅提升了管理效率,让园区管理更加精细化、智能化。 更令人兴奋的是,该方案融入了诸多前沿科技,让智慧园区充满了未来感。例如,利用AI视频分析技术,智慧园区实现了对人脸、车辆、行为的智能识别与追踪,不仅极大提升了安防水平,还能为园区提供精准的人流分析、车辆管理等增值服务。同时,无人机巡查、巡逻机器人等智能设备的加入,让园区安全无死角,管理更轻松。特别是巡逻机器人,不仅能进行360度地面全天候巡检,还能自主绕障、充电,甚至具备火灾预警、空气质量检测等环境感知能力,成为了园区管理的得力助手。此外,通过构建高精度数字孪生系统,将园区现实场景与数字世界完美融合,管理者可借助VR/AR技术进行远程巡检、设备维护等操作,仿佛置身于一个虚拟与现实交织的智慧世界。 最值得关注的是,智慧园区综合解决方案还带来了显著的经济与社会效益。通过优化园区管理流程,实现降本增效。例如,智能库存管理、及时响应采购需求等举措,大幅减少了库存积压与浪费;而设备自动化与远程监控则降低了维修与人力成本。同时,借助大数据分析技术,园区可精准把握产业趋势,优化招商策略,提高入驻企业满意度与营收水平。此外,智慧园区的低碳节能设计,通过能源分析与精细化管理,实现了能耗的显著降低,为园区可持续发展奠定了坚实基础。总之,这一综合解决方案不仅让园区管理变得更加智慧、高效,更为入驻企业与员工带来了更加舒适、便捷的工作与生活环境,是未来园区建设的必然趋势。

    人脸识别_活体检测_数据录入_登录系统Face_Login_1741778308.zip

    人脸识别项目源码实战

    学生信息管理平台是一个基于Java Web技术的综合性管理平台

    学生信息管理系统是一个基于Java Web技术的综合性管理平台。通过此系统,可以实现对学生、教师、选课信息等的动态管理, 提升学校管理效率。系统采用分层架构设计,前端使用HTML、CSS,JavaScript和jQuery,后端基于Servlet,JSP和Spring框架,数据库采用MySQL。主要有四个大功能,学生管理( 增加学生信息、删除学生信息、修改学生信息、查询学生信息)、教师管理(增加教师信息、删除教师信息、修改教师信息、查询教师信息)、选课信息管理(添加选课、查询选课情况、删除选课记录)、系统管理( 登录与注册功能、 用户角色管理(老师,学生,管理员)、系统日志查看)。 技术架构 1.前端技术 HTML,CSS:静态页面布局与样式 JavaScript,jQuery:动态交互、DOM操作和AJAX请求 2.后端技术 Servlet:控制层,处理用户请求 JSP:页面动态生成 Spring:依赖注入,业务逻辑分离 3.数据库 MySQL:存储学生、教师,课程等数据 JDBC:数据库连接与操作

    PHP进阶系列之Swoole入门精讲(课程视频)

    本课程是 PHP 进阶系列之 Swoole 入门精讲,系统讲解 Swoole 在 PHP 高性能开发中的应用,涵盖 协程、异步编程、WebSocket、TCP/UDP 通信、任务投递、定时器等核心功能。通过理论解析和实战案例相结合,帮助开发者掌握 Swoole 的基本使用方法及其在高并发场景下的应用。 适用人群: 适合 有一定 PHP 基础的开发者、希望提升后端性能优化能力的工程师,以及 对高并发、异步编程感兴趣的学习者。 能学到什么: 掌握 Swoole 基础——理解 Swoole 的核心概念,如协程、异步编程、事件驱动等。 高并发处理——学习如何使用 Swoole 构建高并发的 Web 服务器、TCP/UDP 服务器。 实战项目经验——通过案例实践,掌握 Swoole 在 WebSocket、消息队列、微服务等场景的应用。 阅读建议: 建议先掌握 PHP 基础,了解 HTTP 服务器和并发处理相关概念。学习过程中,结合 官方文档和实际项目 进行实践,加深理解,逐步提升 Swoole 开发能力。

    人脸识别_表情分析_spider运行_数据采集用途_1741771318.zip

    人脸识别项目实战

    美颜_GPUimage_人脸识别_动态贴纸_Demo_1741771705.zip

    人脸识别项目实战

    人脸照片文件批量分辨率裁剪工具

    功能简介:本工具可实现批量对照片文件的人脸识别,并按指定分辨率进行转换保存。 可为人脸识别采集系统提供很好的辅助工具。 软件基本于OPENVC开发,识别精确,转换高效。 人脸识别工具 +人脸采集处理

    基于强化学习与肌肉长度反馈控制的高效无意识姿态稳定算法研究(可复现,有问题请联系博主)

    内容概要:本文探讨了利用肌长变化反馈控制(FCM-ML)和演员-评论家强化学习(ACRL-NGN)来有效实现人体上肢和下肢无意识姿态稳定的算法方法。通过构建一个包含949条肌肉和22个关节的全身计算模型,在不同初始姿势的情况下进行模拟试验,验证了这些方法的有效性和鲁棒性,结果显示FCM-ML方法比其他传统方法更适用于此类任务。研究指出人类及其他脊椎动物在无意识状态下,通过抗拮抗性的肌肉长度变化反馈机制来维持舒适状态下的自然身体姿势(NBP)。此外,研究还表明这种控制策略有助于机器人设计、运动员训练以及康复患者的治疗。 适用人群:生物力学、机器人学以及神经科学领域的研究人员、工程师,以及关注人体姿态控制及其应用的学者和技术人员。 使用场景及目标:①解释人和非人的脊椎动物如何在无意识情况下维持最佳姿势,特别是处于重力环境中的自然身体姿势(NBP)。②为机器人肌肉控制提供理论支持和发展方向,特别是在模拟多肌肉协调控制方面。③指导运动训练及病患恢复计划的设计与优化。 其他说明:研究发现ACRL-NGN结合FCM-ML不仅能够迅速有效地实现期望的姿态稳定性,而且不需要对肌肉分类,这使其在复

    反编译apk重要的工具之一

    反编译apk重要的工具之一

    `计算机视觉_Python_PyQt5_Opencv_综合图像处理与识别跟踪系统`.zip

    人脸识别项目实战

    FDTD复现圆偏振超透镜 ,FDTD; 复现; 圆偏振; 超透镜;,FDTD技术在超透镜复现圆偏振的实践

    FDTD复现圆偏振超透镜 ,FDTD; 复现; 圆偏振; 超透镜;,FDTD技术在超透镜复现圆偏振的实践

Global site tag (gtag.js) - Google Analytics