旗帜软件工作室Java第二阶段考核答案

文章目录

  • 一、选择题(共五小题,每小题5分)
  • 二、算法题(共35分)
  • 三、面向对象程序设计基础(40分)

一、选择题(共五小题,每小题5分)

1、在一个合法的Java 源程序文件中定义了3 个类,属性为public 的类可能有( )个。
A、0
B、1
C、2
D、3

2、关于静态变量的叙述不正确的是________。
A、静态变量也称为类变量
B、静态变量是一个公共的存储空间
C、可以使用类名称直接访问静态变量
D、对象不能使用静态变量

3、Java语言中,对构造方法的描述不正确是________。
A、系统总提供默认的构造方法
B、构造方法没有返回值
C、构造方法可以重载
D、构造方法名称和类名称相同

4、Java语言的继承特性,下列说法错误的是________。
A、通过继承可以实现代码的复用
B、一个父类可以同时拥有多个子类
C、每个类都有直接父类
D、一个子类可以同时有多个直接父类

5、要求设计一个类,它拥有一个特殊的成员域,该成员域必须能够被这个类的子类访问到,但是不能被不在同一个包内的其他类访问到。下面( )可以满足上述要求。
A、该成员域的封装属性设置为public
B、该成员域的封装属性设置为private
C、该成员域的封装属性设置为protected
D、该成员域不需要特殊的封装属性

1B
2D
3A
4D
5C

二、算法题(共35分)

1.小蓝要为一条街的住户制作门牌号。
这条街一共有 2020 位住户,门牌号从 1 到 2020 编号。
小蓝制作门牌的方法是先制作 0 到 9 这几个数字字符,最后根据需要将字
符粘贴到门牌上,例如门牌 1017 需要依次粘贴字符 1、 0、 1、 7,即需要 1 个字符 0, 2 个字符 1, 1 个字符 7。
请问要制作所有的 1 到 2020 号门牌,总共需要多少个字符 2?

public class Test01 {
    public static void main(String[] args) {
        int x = 2020;
        int y = 0;
        for (int i = 1;i<=x;i++){
            int w = i;
            while (w!= 0){
                int z = w%10;
                if (z==2){
                    y++;
                }
                w /= 10;
            }
        }
        System.out.println(y);
    }
}

2.给定一个由 整数 组成的 非空 数组所表示的非负整数,在该数的基础上加一。
最高位数字存放在数组的首位, 数组中每个元素只存储单个数字。
你可以假设除了整数 0 之外,这个整数不会以零开头。(10分)

示例 1:

输入:digits = [1,2,3]
输出:[1,2,4]
解释:输入数组表示数字 123。

示例 2:

输入:digits = [4,3,2,1]
输出:[4,3,2,2]
解释:输入数组表示数字 4321。

示例 3:

输入:digits = [0]
输出:[1]
解释:输入的数组表示数字0.
public class Test02 {
    public static void main(String[] args) {
        //给定一个由整数组成的非空数组所表示的非负整数,在该数的基础上加一。最高位数字存放在数组的首位, 数
        //组中每个元素只存储单个数字。(注意:你要防止的是第一个数字是9或者最后一个是9哈!这种情况会有进位滴)
        int[] a={9,9,9};
        System.out.println(Arrays.toString(plusOne(a)));
    }
    public static int[] plusOne(int[] digits){
        for (int i = digits.length - 1; i >= 0; i--) {
            if (digits[i] != 9) {
                //如果不是9直接加一返回
                digits[i]++;
                return digits;
            }
            digits[i] = 0;//如果当前位是9,则需要进位,当前位赋值为0,前一位加一
        }
        //跳出for循环,说明数字全部是9
        int[] result = new int[digits.length + 1];
        result[0] = 1;
        return result;
    }
}

3.矩阵a用数组表示为 int a[ ][ ]={{1,2,3,4},{2,3,4,5},{3,4,5,6}},并编写transpose()方法实现矩阵的转置(转置如下)(15分)

public class Test03 {

    public int[][] transpose(int[][] a){
        int[][] b = new int[4][3];
        for (int i = 0; i < a[0].length; i++) {
            for (int j = 0; j < a.length; j++) {
                b[i][j] = a[j][i];
            }
        }
        return b;
    }

    public static void main(String[] args) {
        int[][] a ={{1,2,3,4},{2,3,4,5},{3,4,5,6}};
        Test03 test03 =new Test03();
        System.out.println(Arrays.deepToString(test03.transpose(a)));
    }

}

三、面向对象程序设计基础(40分)

要求:
(1)按照题目所给变量名称、类型和方法名称进行编程,禁 止修改;
(2)编程环境可选,Eclipse或JDK均可

① 图书馆接口(Library)
成员方法:
borrow(),借阅图书
revert(),归还图书

② 图书类(Book)
成员变量:
图书名称(name)String类型
出版社(publisher)String类型
构造方法:
通过形参初始化图书名称(name)和出版社(publisher)
普通方法:
(1)设置getter和setter方法用于获取和设置类中的name变量的值;
(2)重写Equals方法,当且仅当书名(name)和出版社(publisher)均相等时,即为同一本书。
(3)重写toString方法,返回书名(name)和出版社(publisher)的信息,样式如下:
“书名:Java程序设计,出版社:清华大学出版社”

③ 馆藏图书类(CollectionBook),继承自Book类,实现Library接口
成员变量:
图书编号(bNo)String类型
所在书库(stacks)String类型
是否借阅(isBorrow)boolean类型 图书状态为已借阅时,值为true
构造方法:
调用父类构造方法初始化书名(name)和出版社(publisher)信息,然后初始化图书编号(bNo)和线路图书书库(stacks)
普通方法:
(1)实现接口中的borrow方法
如果图书状态为已借阅,则输出“对不起,该图书已借阅”,否则,修改该图书状态为已借阅,输出“借阅成功”
(2)实现接口中的revert方法
如果图书状态是可借阅状态,输出“该图书已归还”,否则,修改图书借阅状态为未借阅,并输出“还书成功”

④ 通过main函数测试
(1)创建两个CollectionBook对象book1和book2,分别输出book1和book2,
并调用其equals方法判断两个对象是否相等
(2)通过键盘输入整数,输入0,则对book1进行借阅,输入1,则对book1进行归还操作

interface Library{
    void borrow();
    void revert();
}


class Book{
    private String name;
    private String publisher;

    public Book(String name, String publisher) {
        this.name = name;
        this.publisher = publisher;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getPublisher() {
        return publisher;
    }

    public void setPublisher(String publisher) {
        this.publisher = publisher;
    }

    public boolean equals(Book book) {
        if (this.name.equals(book.name)&&this.publisher.equals(book.publisher)){
            return true;
        }else {
            return false;
        }
    }

    @Override
    public String toString() {
        return "书名:'" + name +", 出版社:" + publisher ;
    }
}

class CollectionBook extends Book implements Library{
    private String bNo;
    private String stacks;
    private boolean isBorrow = false;

    public CollectionBook(String name, String publisher, String bNo, String stacks) {
        super(name, publisher);
        this.bNo = bNo;
        this.stacks = stacks;
    }

    @Override
    public void borrow() {
        if (isBorrow){
            System.out.println("对不起,该图书已借阅");
        }else {
            isBorrow = true;
            System.out.println("借阅成功");
        }
    }

    @Override
    public void revert() {
        if (isBorrow==false){
            System.out.println("该图书已归还");
        }else {
            isBorrow = false;
            System.out.println("还书成功");
        }
    }
}
public class Test01 {
    public static void main(String[] args) {
        CollectionBook book1=new CollectionBook("混元功法","马家出版社","666","书库");
        CollectionBook book2=new CollectionBook("混元功法","马家出版社","777","书库");
        System.out.println(book1);
        System.out.println(book2);
        System.out.println("两书是否相同:"+book1.equals(book2));
        Scanner input = new Scanner(System.in);

        int i = input.nextInt();
        if (i==0){
            book1.borrow();
        }else if (i==1){
            book1.revert();
        }
    }
}

你可能感兴趣的:(BannerStudio,java)