• 2023年11月15号期中测验主观题(Java)


    本篇还有3篇相关文章->

    2023年11月15号期中测验判断题(Java)-CSDN博客

    2023年11月15号期中测验选择题(Java)-CSDN博客

    2023年11月15号期中测验编程题(Java)-CSDN博客​​​​​​​


    8-1 程序改错--质数。指出以下程序段的错误(2分),并改正(3分)

    isPrime方法用于检查参数num是否是质数。

    public boolean isPrime(int num){

          boolean result = false;

          for(int i=2; i

          if(i>=num) { result = true; }

          return result;

    }

     解答:

    语法错误:i定义在for循环的循环条件中,故i的作用域只在for循环的循环体中,循环结束i被回收,在if(i>=num)中i未定义,故应在for循环之上定义i,扩大i的作用域

    算法错误:该算法未考虑i小于2的情况,显然负数、0、1都不是质数,故应在循环判断前增加特判if(num < 2)时直接返回false。

    修改代码如下:

    1. public static boolean isPrime(int num) {
    2. boolean result = false;
    3. if (num < 2) {
    4. return result;
    5. }
    6. int i;
    7. for (i = 2; i < num; i++) {
    8. if (num % i == 0) break;
    9. }
    10. if (i >= num) {
    11. result = true;
    12. }
    13. return result;
    14. }


     8-2 程序改错--接口。指出下面方法的错误(2分),并改正(3分)

    类Reader实现了Readable接口。

    interface Readable { void read(); }

    class Reader implements Readable {

      void read() { System.out.println("I Can read it."); }

    }

    解答:

    语法错误:对于Java的接口,其中的方法如果没有修饰符修饰,默认都是public abstract修饰的,这时Reader类实现Readable接口,所实现的成员方法read()也应由public修饰

    修改代码如下:

    1. interface Readable {
    2. void read();
    3. }
    4. class Reader implements Readable {
    5. public void read() {
    6. System.out.println("I Can read it.");
    7. }
    8. }


    8-3 程序改错--重载。指出下面方法的错误(2分),并改正(3分)

    main方法调用重载的max方法求2个数的最大值。


    public class Error03 {

      public static double max(int a, double b) { return a > b ? a : b; }

      public static double max(double a, int b) { return a > b ? a : b; }

      public static void main(String[] args) { double c = max(10, 100); }

    }

    解答:

    语法错误:

    首先对于两个max方法,它们的数据类型(均为double)相同,且参数列表不同,符合方法重载的规则;

    但在main方法中的调用存在歧义,调用max(10,100)时,两个参数默认视作int类型,int类型的参数可以赋值给double类型的变量(存在隐式类型转换),此时两个互相重载的方法都可以接收main方法中的传参,方法调用不明确,解决方法为调用max时,其中一个参数的末尾加上L(即显式声明这是一个double类型参数)。

    修改代码如下(以调用第二个max方法为例): 

    1. public class Main {
    2. public static double max(int a, double b) {
    3. return a > b ? a : b;
    4. }
    5. public static double max(double a, int b) {
    6. return a > b ? a : b;
    7. }
    8. public static void main(String[] args) {
    9. double c = max(10L, 100);
    10. }
    11. }


    8-4 程序改错--重写。指出下面方法的错误(2分),并改正(3分)

    子类Child覆盖了父类Parent中的output方法。


    class Parent{

      public final void output() { System.out.println("Parent"); }

    }

    class Child extends Parent{

      public void output() { System.out.println("Child");

    }

    解答:

    语法错误①:Child类这部分的代码少了一个右花括号即”}”,根据就近原则会优先和其中重写的方法output的左括号结合,此时划分Child类的作用域仅有左花括号无右花括号,应在Child类的结束位置加上右花括号(虽然我觉得很可能是出题人不小心漏了)

    语法错误②:对于Parent类,其中的output方法被final关键字修饰,则认为此方法是最终方法,不允许被重写,应去掉final关键字。

    修改代码如下:  

    1. class Parent {
    2. public void output() {
    3. System.out.println("Parent");
    4. }
    5. }
    6. class Child extends Parent {
    7. public void output() {
    8. System.out.println("Child");
    9. }
    10. }

  • 相关阅读:
    Jenkins测试报告样式优化
    【网络编程开发系列】好端端的MQTT-broker重新部署后居然出现TLS握手失败了
    Win10系统2023年10月更新补丁(KB5031356)后 IE11无法打开使用解决办法
    java.lang.ClassNotFoundException: org.apache.taglibs.standard.tlv.JstlCoreTLV
    MATLAB运算符
    Redis 分片集群
    Quill编辑器实现原理初探
    Spring框架(四):Spring命名空间和配置标签
    基于python技术的酒店管理系统
    Redis Lua沙盒绕过命令执行(CVE-2022-0543)
  • 原文地址:https://blog.csdn.net/liKeQing1027520/article/details/134501556