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<num; i++){  if(num%i==0) break;  }

      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。

修改代码如下:

public static boolean isPrime(int num) {
        boolean result = false;
        if (num < 2) {
            return result;
        }
        int i;
        for (i = 2; i < num; i++) {
            if (num % i == 0) break;
        }
        if (i >= num) {
            result = true;
        }
        return result;

    }


 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修饰

修改代码如下:

interface Readable {
    void read();
}

class Reader implements Readable {
    public void read() {
        System.out.println("I Can read it.");
    }
}


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方法为例): 

public class Main {

    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(10L, 100);
    }
}


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关键字。

修改代码如下:  

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

class Child extends Parent {
    public void output() {
        System.out.println("Child");
    }
}

  • 7
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值