一、选择题(共五小题,每小题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、该成员域不需要特殊的封装属性
1、B
2、D
3、A
4、D
5、C
二、算法题(共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();
}
}
}