Java经典笔试题—day04
- 🔎选择题
- 🔎编程题
- 🥝计算糖果
- 🥝进制转换
- 🔎结尾
🔎选择题
(1)下列与队列结构有关联的是()
A. 函数的递归调用
B. 数组元素的引用
C. 多重循环的执行
D. 先到先服务的作业调度
D
队列(先进先出)
(2)下面选项中,哪些是interface中合法方法定义?
A. public void main(String [] args);
B. private int getSum();
C. boolean setFlag(Boolean [] test);
D. public float get(int x);
A, C, D
接口中的方法默认被 public abstract 修饰
接口中的方法默认是要被重写的, 而被 private 修饰, 只能在当前类使用, 就不能被重写了
(3)下面哪些类实现或继承了 Collection 接口?
A. HashMap
B. ArrayList
C. Vector
D. Iterator
B, C
图片来自网络
(4)类所实现接口的修饰符不能为()
A. void
B. public
C. abstract
D. final
A, D
接口默认是要被重写的, 被 final 修饰就表示固定的 “常量”, 无法进行重写
(5)下列关于栈叙述正确的是( )
A. 算法就是程序
B. 设计算法时只需要考虑数据结构的设计
C. 设计算法时只需要考虑结果的可靠性
D. 以上三种说法都不对
D
(6)下面关于abstract关键字描述错误的是()
A. abstract关键字可以修饰类或方法
B. final类的方法都不能是abstract,因为final类不能有子类
C. abstract类不能实例化
D. abstract类的子类必须实现其超类的所有abstract方法
D
B. final 修饰的类默认是不被重写的, abstract 修饰的类默认是需要被重写的, 所以 final 类的方法不能是 abstract
D. 子类也是 abstract 修饰, 就不需要重写父类的 abstract() 方法. 子类不是 abstract 修饰, 就需要重写 abstract() 方法
(7)结构化程序的三种基本结构是( )
A. 递归、迭代和回溯
B. 过程、函数和子程序
C. 顺序、选择和循环
D. 调用、返回和选择
C
(8)对于abstract声明的类,下面说法正确的是 ( )
A. 可以实例化
B. 不可以被继承
C. 子类为abstract
D. 只能被继承
E. 可以被抽象类继承
E
A. 不可以实例化
B. 可以被继承
C. 子类可以是 abstract 修饰, 也可以不是 abstract 修饰
D. 可以不被继承
(9)1GB 的准确值是( )
A. 1024×1024 Bytes
B. 1024 KB
C. 1024 MB
D. 1000×1000 KB
C
(10)对于jdk1.8,以下为 java 语法保留不能作为类名和方法名使用的是 ( )
A. default
B. int
C. implements
D. throws
A, B, C, D
关键字均不能作为类名和方法名使用
🔎编程题
🥝计算糖果
题目描述
A,B,C三个人是好朋友,每个人手里都有一些糖果,我们不知道他们每个人手上具体有多少个糖果,但是我们知道以下的信息:
A - B, B - C, A + B, B + C. 这四个数值.每个字母代表每个人所拥有的糖果数.
现在需要通过这四个数值计算出每个人手里有多少个糖果,即A,B,C。这里保证最多只有一组整数A,B,C满足所有题设条件。
输入描述
输入为一行,一共4个整数,分别为A - B,B - C,A + B,B + C,用空格隔开。 范围均在-30到30之间(闭区间)。
输出描述
输出为一行,如果存在满足的整数A,B,C则按顺序输出A,B,C,用空格隔开,行末无空格。 如果不存在这样的整数A,B,C,则输出No
解题思路
int a = A - B; int b = B - C;
int c = A + B; int d = B + C;
结果有两个 B 的值, 如果这两个 B 的值相等, 返回 true. 否则返回 false
A = (a + c) / 2 , B1 = (c - a) / 2 , B2 = (b + d) / 2 , C = (d - b) / 2
import java.util.Scanner;
//计算糖果
public class Main1 {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(scan.hasNextInt()) {
int a = scan.nextInt();//A - B
int b = scan.nextInt();//B - C
int c = scan.nextInt();//A + B
int d = scan.nextInt();//B + C
if(isTrue(a,b,c,d))
System.out.println((a + c) / 2 + " " + (b + d) / 2 + " " + (d - ((b + d) / 2)));
else
System.out.println("No");
}
}
private static boolean isTrue(int a,int b,int c,int d) {
int B1 = (c - a) / 2;// B的糖果数
int B2 = (b + d) / 2;// B的糖果数
return B1 == B2;
}
}
📢题目链接
链接: link
🥝进制转换
题目描述
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开
输出描述
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
解题思路
- 判断给定的数字 M 是不是 0, 如果是 0, 直接返回 “0”
- 判断给定的数字 M 是不是负数, 如果是, 最后需要添加负号
- 将数字 M 转换成 N 进制( M % N)
public String solve (int M, int N) {
// write code here
if (M == 0) return "0";
boolean flg = false;
if (M < 0) {
flg = true;
M = ~M + 1;
}
StringBuilder sb = new StringBuilder();
while (M != 0) {
int x = M % N;
if (x > 9) {
x = x - 10 + 'A';// (10 ~ 16) - 10 + 'A' - > 'A' ~ 'F'
} else {
x = x + '0';// (0 ~ 9) + 0 -> 0 ~ 9
}
sb.append((char)x);
M /= N;
}
if (flg) sb.append("-");
return sb.reverse().toString();
}
📢题目链接
链接: link
🔎结尾
创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油