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

bit byte kb mb gb pb tb

(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表示,等等)

在这里插入图片描述

解题思路

  1. 判断给定的数字 M 是不是 0, 如果是 0, 直接返回 “0”
  2. 判断给定的数字 M 是不是负数, 如果是, 最后需要添加负号
  3. 将数字 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


🔎结尾

创作不易,如果对您有帮助,希望您能点个免费的赞👍
大家有什么不太理解的,可以私信或者评论区留言,一起加油

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值