Java经典笔试题—day06

简介: Java经典笔试题—day06

🔎选择题

(1)关于抽象类与最终类,下列说法错误的是?

A. 抽象类能被继承,最终类只能被实例化。

B. 抽象类和最终类都可以被声明使用

C. 抽象类中可以没有抽象方法,最终类中可以没有最终方法

D. 抽象类和最终类被继承时,方法可以被子类覆盖

D

A, D.

最终类又称为密封类, 是由 final 修饰, 因此最终类只能被实例化

抽象类只能被继承

(2)在Java中下面Class的声明哪些是错误的?

A. public abstract final class Test { abstract void method(); }

B. public abstract class Test { abstract final void method(); }

C. public abstract class Test { abstract void method() { } }

D. public class Test { final void method() { } }

A, B, C

A, B. final 与 abstract 不能同时出现

C. abstract 修饰的方法不能有 { }

(3)已知表达式int m[]={0,1,2,3,4,5,6};下面哪个表达式的值与数组下标量最大值相等?

A. m. length()

B. m. length-1

C. m. length()+1

D. m. length+1

B

(4)下列哪个对访问修饰符作用范围由大到小排列是正确的?

A. private>default>protected>public

B. public>default>protected>private

C. private>protected>default>public

D. public>protected>default>private

D

public > protected > default(默认) > private

图片来自网络

(5)有六个元素6,5,4,3,2,1顺序入栈,问下列哪一个不是合法的出栈序列?()

A. 5 4 3 6 2 1

B. 4 5 3 1 2 6

C. 3 4 6 5 2 1

D. 2 3 4 1 5 6

C

(6)阅读下列程序,选择哪一个是正确的输出结果

class HelloA{
  public HelloA() {
    System.out.println("I’m A class ");
  }
  static {
    System.out.println("static A");
  }
}
public class HelloB extends HelloA{
  public HelloB() {
    System.out.println("I’m B class");
  }
  static {
    System.out.println("static B");
  }
  public static void main (String[] args){
    new HelloB();
  }
}

A. static A I’m A class static B I’m B class

B. I’m A class I’m B class static A static B

C. static A static B I’m A class I’m B class

D. I’m A class static A I’m B class static B

C

执行顺序

静态代码块(static 修饰的代码块) > 构造块(类内部, 构造方法外部的代码块) > 构造方法

其中静态代码块不管 new 多少个对象, 都只会执行一次

由于子类 HelloB 继承父类 HelloA, 所以先去执行父类的静态代码块, 再去执行子类的静态代码块. 先去执行父类的构造方法, 再去执行子类的构造方法

(7)执行下列代码的输出结果是( )

public class Demo{
  public static void main(String args[]){
   int num = 10;
   System.out.println(test(num));
  }
  public static int test(int b) {
   try {
    b += 10;
    return b;
   } catch(RuntimeException e) {
   
   } catch(Exception e2) {
   
   } finally {
    b += 10;
    return b;
   }
  }
}

A. 10

B. 20

C. 30

D. 40

C

finally 一定会被执行, 所以 b = 30

(8)下列关于构造方法的叙述中,错误的是()

A. java语言规定构造方法名与类名必须相同

B. java语言规定构造方法没有返回值,但不同void声明

C. java语言规定构造方法不可以重载

D. java语言规定构造方法只能通过new自动调用

C, D

C. 构造方法可以重载(一个类中可以有多个构造方法)

D. 子类继承父类时, 也可以通过 super() 调用父类的构造方法

(9)下面哪些赋值语句是正确的()

A. long test=012

B. float f=-412

C. int other =(int)true

D. double d=0x12345678

E. byte b=128

A, B. D

C. 布尔类型无法强转为数值

E. byte 类型的取值范围为 -128 ~ 127

(10)下列代码的输出结果是 ( )

boolean b = true ? false : true == true ? false : true;
System.out.println(b);

A. true

B. false

C. null

D. 空字符串

B

当表达式1 的结果为 true 时, 执行表达式2

当表达式1 的结果为 false 时, 执行表达式3

🔎编程题

🥝不要二

题目描述

二货小易有一个W*H的网格盒子,网格的行编号为0 ~ W-1,网格的列编号为0 ~ H-1

每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能等于2。

对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:

( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根

小易想知道最多可以放多少块蛋糕在网格盒子里。

输入描述

每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)

输出描述

输出一个最多可以放的蛋糕数

解题思路

根据题意得知这是一个 W * H 大小的矩阵

题目要求任意两块蛋糕的欧几里得距离不能等于2

即 ( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根不等于2

即 (x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2) 不等于4

  • 两数相加的和为4有下列几种可能
  • 1 + 3 = 4
  • 3 + 1 = 4
  • 2 + 2 = 4
  • 0 + 4 = 4
  • 4 + 0 = 4

对于 1 + 3 = 4, 因为矩阵的行编号为 0 ~ W-1, 列编号为 0 ~ H-1, 所以不可能出现(y1 - y2) = 3 \sqrt 33

对于 3 + 1 = 4, 因为矩阵的行编号为 0 ~ W-1, 列编号为 0 ~ H-1, 所以不可能出现(x1 - x2) = 3 \sqrt 33

对于 2 + 2 = 4, 因为矩阵的行编号为 0 ~ W-1, 列编号为 0 ~ H-1

所以不可能出现(x1 - x2) = 2 \sqrt 22, (y1 - y2) = 2 \sqrt 22

对于 0 + 4 = 4, 得出 x1 == x2, y1 - y2 = 2

对于 4 + 0 = 4, 得出 y1 == y2, x1 - x2 = 2

注意, y1 - y2 = -2, 其平方的值也是4

因为遍历矩阵时是从(0, 0) 开始遍历, 所以只需要计算当前的列 + 2的结果即可

x1 - x2 同理

import java.util.Scanner;
//不要二
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextInt()) {
            int W = scan.nextInt();//列
            int H = scan.nextInt();//行
            int[][] matrix = new int[W][H];
            getCnt(W, H, matrix);
        }
    }
    // 计算蛋糕数
    private static void getCnt(int w, int h, int[][] matrix) {
        int cnt = 0;
        for (int i = 0; i < w; i++) {
            for (int j = 0; j < h; j++) {
              // 判断当前位置能否防止蛋糕
                if(matrix[i][j] == 0) {
                    cnt++;
                    // 防止越界
                    // 将当前行 + 2 设置为1表示不能该位置不能放置蛋糕
                    if(i + 2 < w) matrix[i + 2][j] = 1;
                    // 将当前列 + 2 设置为1表示不能该位置不能放置蛋糕
                    if(j + 2 < h) matrix[i][j + 2] = 1;
                }
            }
        }
        System.out.println(cnt);
    }
}

📢题目链接

链接: link


🥝把字符串转换成整数

题目描述

将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。

数值为 0 或者字符串不是一个合法的数值则返回 0

注意:

①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0

②字符串中可能出现 +/- 且仅可能出现在字符串首位。

输入描述

输入一个字符串,包括数字字母符号,可以为空

输出描述

如果是合法的数值表达则返回该数字,否则返回0

解题思路

定义 sum 用于表示返回的结果

定义 judge 判断给定的字符串是否包含负号

定义 idx 判断第 0 位是否为符号位

从字符串的不是符号位开始遍历

如果当前的字符不是数字, 返回0

当前的字符是数字, 将当前的结果保存到 sum 中

public static int StrToInt(String str) {
        if(str == null || str.length() == 0 || str.equals("0")) return 0;
        char[] chs = str.toCharArray();
        int sum = 0, judge = 1, n = chs.length, idx = 0;
        // 判断是否为数字
        if(!Character.isDigit(chs[0])) {
            // 既不是符号, 也不是数字
            if (chs[0] != '+' && chs[0] != '-') {
                return 0;
            } else {
                if(chs[0] == '-') judge = -1;
                idx = 1;
            }
        }
        for (int i = idx; i < n; i++) {
            if(!Character.isDigit(chs[i])) return 0;
            sum = sum * 10 + chs[i] - '0';
        }
        return judge < 0 ? ~sum + 1 : sum;
 }

📢题目链接

链接: link


🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍

大家有什么不太理解的,可以私信或者评论区留言,一起加油

相关文章
|
4月前
|
存储 安全 Java
冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)
冒死潜入某个外包公司获得的珍贵Java基础笔试题(附答案)
54 0
|
9月前
|
SQL 存储 数据管理
Java经典笔试题—day13
Java经典笔试题—day13
|
9月前
|
机器学习/深度学习 SQL 关系型数据库
Java经典笔试题—day14
Java经典笔试题—day14
|
9月前
|
Java
Java经典笔试题—day12
Java经典笔试题—day12
|
9月前
|
算法 Java 数据库
Java经典笔试题—day11
Java经典笔试题—day11
|
9月前
|
存储 安全 Java
Java经典笔试题—day10
Java经典笔试题—day10
127 0
|
9月前
|
Java
Java经典笔试题—day09
Java经典笔试题—day09
|
9月前
|
存储 机器学习/深度学习 Java
Java经典笔试题—day08
Java经典笔试题—day08
|
9月前
|
存储 Java 数据安全/隐私保护
Java经典笔试题—day07
Java经典笔试题—day07
|
9月前
|
Java
Java经典笔试题—day05
Java经典笔试题—day05