文章目录
- 一、单选
- 1.
- 2.
- 3.
- 4.
- 5.
- 6.
- 7.
- 8.
- 9.
- 10.
- 二、编程
- 1. 求最小公倍数
- 解法:
- 代码:
- 2. 两种排序方法
- 解法:
- 代码:
一、单选
1.
正确答案:B
2.
正确答案:A
继承具有传递性
3.
正确答案:C
数组不是原生类,是根据基本数据类型来定义的
4.
正确答案:D
public static void main(String [] args){
System.out.println(new B().getValue());
//先调用静态内部类的函数
}
static class A{
protected int value;
public A(int v) {
setValue(v);// 5
}
public void setValue(int value){// 22 34
this.value = value;// 10 22 16 34
}
public int getValue(){
try{
value++;// 11 17
return value;// 11 17
} catch(Exception e){
System.out.println(e.toString());
} finally {
this.setValue(value);// 调用的是被子类重写的 setValue 方法 值为22 34
System.out.println(value);// 22 34
}
return value;
}
}
static class B extends A{
public B() {
super(5);//然后进入父类的构造 值是10
setValue(getValue() - 3);// 上面返回的是11 8
}
public void setValue(int value){// 5 11 8 17
super.setValue(2 * value);// 由于 B 进行重新了 setValue 所有调用的是 B 的 setValue
// 10 22 16 34
}
}
5.
正确答案:C
6.
如何跳出数组的循环
正确答案:A
7.
正确答案:C
可以包含多个类
8.
正确答案:D
9.
正确答案:A
先执行静态代码块
10.
正确答案:D
二、编程
1. 求最小公倍数
原题链接
解法:
最小公倍数 = 两数之积除以最大公约数
这里使用碾转相除法进行最大公约数的求解:
即 a与b的最大公约数可以转化为:
a、b之间的余数为两者之间最小的数之间的公约数
所以对于输入的两个数进行连续求余,直到余数为0,求余的分母即为结果
代码:
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int m = in.nextInt();
int n = in.nextInt();
int mn = gdc(m,n);
System.out.println(m*n/mn);
}
public static int gdc(int m, int n) {
if(m == n) {
return m;
}
if(m < n) {
int tmp = m;
m = n;
n = tmp;
}
int r;
while((r = m % n) > 0) {
m = n;
n = r;
}
return n;
}
}
2. 两种排序方法
原题链接
解法:
将接收的字符串都放到String数组中
利用string的compareTo方法来按ascii比较字符串字典序排序
利用string的length方法来比较字符串的长度排序
代码:
public class Main {
public static void main(String[] args) throws IOException {
//BufferedReader 从字符流中读取文本并且缓存
BufferedReader bi = new BufferedReader(new InputStreamReader(System.in));
int n = Integer.parseInt(bi.readLine());
String[] str = new String[n];
for (int i = 0; i < n; i++) {
str[i] = bi.readLine();
}
//判断
if (isSortLength(str) && isSortZidian(str)) {
System.out.println("both");
}else if (isSortZidian(str)) {
System.out.println("lexicographically");
}else if (isSortLength(str)){
System.out.println("lengths");
}else {
System.out.println("none");
}
}
public static boolean isSortZidian(String[] str) {
for (int i = 0; i < str.length - 1; i++) {
//用当前的字符串和后一个字符串比较,如果字典序大于后一个,说明排序混乱,直接返回 false
if (str[i].compareTo(str[i+1]) > 0) {
return false;
}
}
return true;
}
public static boolean isSortLength(String[] str) {
for (int i = 0; i < str.length - 1; i++) {
if (str[i].length() > str[i+1].length()) {
return false;
}
}
return true;
}
}