Java经典笔试题—day08

news2024/11/28 10:42:33

Java经典笔试题—day08

  • 🔎选择题
  • 🔎编程题
    • 🥝两种排序方法
    • 🥝求最小公倍数
  • 🔎结尾

🔎选择题

(1)下列选项中关于Java中super关键字的说法正确的是()

A.super关键字是在子类对象内部指代其父类对象的引用
B.super关键字不仅可以指代子类的直接父类,还可以直接指代父类的父类
C.子类通过super关键字只能调用父类的方法,而不能调用父类的属性
D.子类通过super关键字只能调用父类的属性,而不能调用父类的方法

A

B. super 关键字只能指代子类的直接父类, 不能指代父类的父类
C, D. 通过 super 关键字既可以调用父类的方法, 也可以调用父类的属性
在这里插入图片描述

(2)A派生出子类B,B派生出子类C,并且在java源代码中有如下声明:

A a0=new A();
A a1=new B();
A a2=new C();

以下哪个说法是正确的?

A.第1行,第2行和第3行的声明都是正确的
B.第1,2,3行都能通过编译,但第2,3行运行时出错
C.第1,2行能通过编译,但第3行编译出错
D.只有第1行能通过编译

A

继承具有传递性
在这里插入图片描述

(3)以下说法错误的是()

A.数组是一个对象
B.数组不是一种原生类
C.数组的大小可以任意改变
D.在Java中,数组存储在堆中连续内存空间里

C

A. 数组是一个对象 (int[] nums = new int[n])
B. 数组是原生类, 可以有整型(int[])数组, 字符型(char[])数组, 字符串型(String[])数组…
C. 数组的大小一经定义就不能改变(不会自动扩容)
D. new 出来的对象默认存储在堆中, 因为数组是连续的, 所以数组存储在堆中的连续内存空间里

(4)Test.main() 函数执行后的输出是()

public class Test {
	public static void main(String [] args){
		System.out.println(new B().getValue());
	}
	static class A{
		protected int value;
		public A(int v) {
			setValue(v);
		}
		public void setValue(int value) {
			this.value = value;
		}
		public int getValue() {
			try{
				value++;
				return value;
			} catch(Exception e) {
				System.out.println(e.toString());
			} finally {
				this.setValue(value);
				System.out.println(value);
			}
			return value;
		}
	}

	static class B extends A{
		public B() {
			super(5);
			setValue(getValue() - 3);
		}
		public void setValue(int value){
			super.setValue(2 * value);
		}
	}
}

A.11 17 34
B.22 74 74
C.6 7 7
D.22 34 17

D

建议调试一下该代码, 以便加深印象
-------------------------------------------------------------------------------
需要注意的是此处实例化的是 A 的子类 B, 默认执行的是子类的方法
new B().getValue()
拆分成2部分, 1. new B() 2.getValue()
-------------------------------------------------------------------------------
执行 new B() 操作
super(5)
调用父类的构造方法, 执行 setValue() 方法, 此处执行的是子类的 setValue()
value 的值变为 10
setValue(getValue() - 3)
先执行 getValue(), 因为子类没有重写父类的 getValue() 方法, 所以执行的是父类的 getValue() 方法
执行 getValue() 操作
value++, value 的值变为 11, 最后返回 11
但是下面有 finally, 就先去执行了 finally 的 setValue(), 此处的 setValue() 依旧是调用子类的 setValue()
value 的值变为 22
打印 22
返回 getValue() 的结果 11 到 setValue(getValue() - 3), 变为 setValue(11 - 3)
调用子类的 setValue()
value 的值变为 16
-------------------------------------------------------------------------------
执行 getValue() 操作
value++ , value 的值变为 17, 最后返回 17
但是下面有 finally, 就先去执行了 finally 的 setValue(), 此处的 setValue() 依旧是调用子类的 setValue()
value 的值变为 34
打印 34
返回 getValue() 的结果 17 并输出
-------------------------------------------------------------------------------
在这里插入图片描述

(5)关于Java的异常处理机制的叙述哪些正确?

A.如果程序发生错误及捕捉到异常情况了,才会执行finally部分
B.其他选项都不正确
C.当try区段的程序发生异常且被catch捕捉到时,才会执行catch区段的程序
D.catch部分捕捉到异常情况时,才会执行finally部分

C

A, D. finally 不论怎样都会被执行
C. 当 catch() 捕获到异常才会执行 catch 区段的程序

(6)如何跳出Array的forEach循环?()

A.break
B.return true
C.return false
D.以上都不是

A

B, C. 当返回值为 void, int, String… 时, 就会产生错误

(7)一个以”.java”为后缀的源文件 ( )

A.只能包含一个类,类名必须与文件名相同
B.只能包含与文件名相同的类以及其中的内部类
C.只能有一个与文件名相同的类,可以包含其他类
D.可以包含任意类

C

可以包含多个类, 但只能有一个与文件名相同的类

(8)如下Java语句

double x = 3.0;
int y = 5;
x /= --y;

执行后, x的值是()

A3
B.0.6
C.0.4
D.0.75

D

--y是将 y 的值先进行 -1 操作, 因此 x = 3 .0 / 4 = 0.75

(9)下列代码运行后输出结果为()

public class Test1 {
    static int cnt = 6;
    static {
        cnt += 9;
    }
    public static void main(String[] args) {
        System.out.println("cnt =" + cnt);
    }
    static {
        cnt /= 3;
    }
}

A.cnt=5
B.cnt=2
C.cnt=3
D.cnt=6

A

执行顺序: 静态代码块 > 构造块 > 构造方法
在这里插入图片描述

如果在 main() 方法前面添加上一个构造方法, 结果也仍然是5
在这里插入图片描述

(10)以下程序的运行结果是()

public class Increment {
    public static void main(String args[]) {
        int a;
        a = 6;
        System.out.print(a);
        System.out.print(a++);
        System.out.print(a);
    }
}

A.666
B.667
C.677
D.676

B

第一次打印 a = 6
第二次打印 a = 6, 然后 a 的值++变为7
第三次打印, a = 7

🔎编程题

🥝两种排序方法

题目描述

考拉有n个字符串字符串,任意两个字符串长度都是不同的。
考拉最近学习到有两种字符串的排序方法:

1.根据字符串的字典序排序。例如:
“car” < “carriage” < “cats” < "doggies < “koala”

2.根据字符串的长度排序。例如:
“car” < “cats” < “koala” < “doggies” < “carriage”

考拉想知道自己的这些字符串排列顺序是否满足这两种排序方法,考拉要忙着吃树叶,所以需要你来帮忙验证。

输入描述

输入第一行为字符串个数n(n ≤ 100) 接下来的n行,每行一个字符串,字符串长度均小于100,均由小写字母组成

输出描述

如果这些字符串是根据字典序排列而不是根据长度排列输出"lexicographically",
如果根据长度排列而不是字典序排列输出"lengths",
如果两种方式都符合输出"both",否则输出"none"

在这里插入图片描述
解题思路

根据题意进行模拟即可

  • 字典序注意事项
    • 如果前一个字符串的第 i 个字符比当前字符串的第 i 个字符小即可结束比较, 并进入下一轮比较
    • 如果前一个字符串的第 i 个字符比当前字符串的第 i 个字符大, 即可直接判断这些字符串排列顺序不是字典序
import java.util.Scanner;

public class Main1 {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);

        while(scan.hasNextLine()) {
            int n = scan.nextInt();
            scan.nextLine();

            String[] strs = new String[n];
            for(int i = 0; i < n; i++) strs[i] = scan.nextLine();

            boolean flag1 = isDic(strs);
            boolean flag2 = isLen(strs);
            if(flag1 && !flag2) System.out.println("lexicographically");
            else if(!flag1 && flag2) System.out.println("lengths");
            else if(flag1 && flag2) System.out.println("both");
            else System.out.println("none");
        }
    }

    private static boolean isDic(String[] strs) {
        //判断字典序
        int n = strs.length;
        for (int i = 1; i < n; i++) {
            int index = 0;
            // 判断两个字符串的最小长度
            int minLen = Math.min(strs[i].length(),strs[i - 1].length());
            while(index < minLen) {
                char cur = strs[i].charAt(index), pre = strs[i - 1].charAt(index);
                if(pre < cur) {
                    break;
                } else if(pre > cur) {
                    return false;
                }
                index++;
            }
            if(index == minLen && strs[i].length() < strs[i - 1].length()) return false;
        }
        return true;
    }
	// 判断长度
    private static boolean isLen(String[] strs) {
        int n = strs.length;
        for (int i = 1; i < n; i++) {
            if (strs[i].length() < strs[i - 1].length()) return false;
        }
        return true;
    }
}

也可以将判断字典序改写成系统自带得判断 compareTo() 方法

private static boolean isDic(String[] strs) {
       int n = strs.length;
       for (int i = 1; i < n; i++) {
           if(strs[i].compareTo(strs[i - 1]) < 0) return false;
       }
       return true;
}

📢题目链接
链接: link


🥝求最小公倍数

题目描述

正整数 a 和正整数 b 的最小公倍数,是指能被 a 和 b 整除的最小的正整数。
请你求 a 和 b 的最小公倍数。
比如输入5和7,5和7的最小公倍数是35,则需要返回35。

输入描述

输入两个正整数

输出描述

输出最小公倍数

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路

求解 a 和 b 得最小公倍数
可以用 (a, b) 得乘积 除 (a, b) 得最大公约数
利用辗转相除法求解 (a, b) 得最大公约数

  • 以 4, 6 为例

    • 4 * 6 = 24
    • 4, 6 得最大公约数是 2
    • 24 / 2 = 12
  • 辗转相除法

    • 以除数和余数反复做除法运算, 当余数为0时, 此时得除数就是最大公约数
    • 辗转相除法用于求解两个正整数得最大公约数
    • 以 1997 和 615 为例
      • 1997 ÷ 615 = 3(余 152)
      • 615 ÷ 152 = 4(余 7)
      • 152 ÷ 7 = 21(余 5)
      • 7 ÷ 5 = 1(余 2)
      • 5 ÷ 2 = 2(余 1)
      • 2 ÷ 1 = 2(余 0)
      • 所以 1997 和 615 得最大公约数为 1
import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextInt()) {
            int A = scan.nextInt();
            int B = scan.nextInt();

            System.out.println(getNum(A,B));
        }
    }
    //求最小公倍数
    private static long getNum(int A,int B) {
        long a = A,b = B;
        int x = A % B;
        if(x == 0)  return Math.min(a,b);
        while(x != 0) {
        	// A 变成了除数
            A = B;
            // B 变成了余数
            B = x;
            x = A % B;
        }

        return (a * b) / B;
    }
}

📢题目链接
链接: link


🔎结尾

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524439.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

JAVA JDK下载安装手册

JDK的介绍与安装 JDK简介 JDK是 Java 语言的软件开发工具包&#xff0c;主要用于移动设备、嵌入式设备上的java应用程序。编写 Java 程序必须使用 JDK&#xff0c;它提供了编译和运行 Java 程序的环境。是整个java开发的核心。 准备JDK 本次使用的是JDK1.8 如下所示: 下载完…

记两道AES-CBC题

文章目录 知识导入&#xff08;AES-CBC模式&#xff09;题一(buu [ACTF新生赛2020]crypto-aes 1)题目描述&#xff1a;题目分析&#xff1a;知识导入os.urandom(n)函数比特&#xff0c;字节&#xff0c;二进制数之间的关系AES.new(key,AES.MODE_CBC,iv) 题二(crack AES-CBC IV)…

小黑子—Java从入门到入土过程:第九章-IO流

Java零基础入门9.0 Java系列第九章- IO流1. 初识IO流2. IO流的体系2.1 字节流2.1.1 FileOutputStream 字符串输出流2.1.1 - I 字符串输出流的细节2.1.1 - II FileOutputStream写数据的3种方式2.1.1 -III FileOutputStream写数据的两个小问题 2.1.2 FileInputStream 字符串输入流…

点线面产生局部坐标系以及计算到世界坐标系的旋转矩阵

欢迎关注更多精彩 问题描述 给定点O&#xff0c;线段AB&#xff0c;平面OP&#xff0c;求以OP法向为某一轴&#xff0c;以AB在OP上的投影为另一轴&#xff0c;O为原点的局部坐标系。要求给出X,Y,Z轴的单位向量&#xff0c;以及原点O. 求出转换到世界坐标系的旋转矩阵RT。 如…

ChatGPT的简单了解

ChatGPT 是 InstructGPT 的同级模型&#xff0c;它经过训练可以按照提示中的说明进行操作并提供详细的响应。 InstructGPT论文&#xff1a;https://arxiv.org/pdf/2203.02155.pdf InstructGPT怎么准备和标记数据集&#xff1a;https://harryliu.blog.csdn.net/article/detail…

【连续介质力学】张量的性质2

张量的代数操作 张量的性质 张量迹 Tensor Trace 定义 e ^ i ⨂ e ^ j \hat e_i \bigotimes \hat e_j e^i​⨂e^j​的迹: T r ( e ^ i ⨂ e ^ j ) e ^ i ⋅ e ^ j δ i j Tr(\hat e_i \bigotimes \hat e_j) \hat e_i \cdot \hat e_j \delta_{ij} Tr(e^i​⨂e^j​)e^i​⋅…

总结如何申请注册 GitHub 教师教育优惠 Benefits for Teachers 来免费使用 copilot

目录 1. GitHub 教师教育优惠有什么2. 如何申请教师教育优惠呢2.1 选择学校2.2 更改个人信息2.3 准备证明材料2.4 提交申请2.5 遇到的问题2.5.1 问题 12.5.2 问题 22.5.3 问题 3 3. 申请免费的 GitHub Copilot 学生注册不在此处赘述了&#xff0c;网上有很多教程可以参考。但是…

软件测试面试面对HR提出的问题,怎么回答才不会被面试官“套路”

面试中&#xff0c;如何回答HR提出的问题很大程度上决定了面试能不能成功。 下面是软件测试人员在面试过程中经常被问到的10个问题&#xff0c;告诉你怎么回答才不会被面试官套路...... 请你做一个自我介绍 误区&#xff1a; 一般人回答这个问题过于平常&#xff0c;只说姓…

JVM学习(一)

一、JVM介绍 1.1基本概念 JVM 是可运行 Java 代码的假想计算机 &#xff0c;包括一套字节码指令集、一组寄存器、一个栈、 一个垃圾回收&#xff0c;堆 和 一个存储方法域。JVM 是运行在操作系统之上的&#xff0c;它与硬件没有直接 的交互。 1.2 运行过程 我们都知道 Java …

1000W用户1Wqps高并发签到系统的架构和实操

说在前面 在尼恩的&#xff08;50&#xff09;读者社群中&#xff0c;经常有小伙伴面试的时候&#xff0c;遇到一个一个高并发 架构方面的问题&#xff0c;比如&#xff1a; (1) 高并发秒杀系统如何架构&#xff1f; (2) 高并发签到系统如何架构&#xff1f; (3) 等等等等… 刚…

【C++】函数高级

目录 &#x1f34a;一.函数的默认参数&#x1f34a; 1.默认参数的性质 2.函数默认参数的注意事项 &#x1f34e;二.函数的占位参数&#x1f34e; &#x1f34f;三.函数的重载 &#x1f34f; 1.重载的性质和条件 &#xff08;1&#xff09;修改参数的个数 &#xff…

go语言中文文档 学习笔记(未完)

这里写目录标题 网络编程互联网协议介绍socket编程socket图解TCP编程服务端客户端 UDP编程TCP黏包 http编程WebSocket编程 网络编程 互联网协议介绍 socket编程 socket图解 Socket是应用层与TCP/IP协议族通信的中间软件抽象层。在设计模式中&#xff0c;Socket其实就是一个门…

12.设计模式之门面模式

前言 门面模式&#xff0c;是指提供一个统一的接口去访问多个子系统的多个不同的接口&#xff0c;它为子系统中的一组接口提供一个统一的高层接口。使得子系统更容易使用。日志框架slf4J是门面模式最经典的应用场景。 本节&#xff0c;我们就门面模式&#xff0c;展开详细介绍…

1.setContentView流程分析

1. setContentView初步分析之继承自Activity 我们创建的MainActivity继承自Activity,在代码中使用setContentView(R.layout.activity_main),查看他在Activity中的源码如下: public void setContentView(LayoutRes int layoutResID) {//这里的getWindow方法获取到一个PhoneWind…

什么是好代码/坏代码?给普通人的图解示例

本文翻译自国外论坛 medium&#xff0c;原文地址&#xff1a;https://medium.com/todbotts.triangles/what-is-good-bad-code-an-illustrated-example-for-non-programmers-1222b600a0f0 我曾经在某个地方读到过一句话&#xff0c;基本上有以下内容&#xff1a; 在现代世界中&a…

算法(一)—— 回溯(3)

文章目录 1 78 子集2 90 子集II3 491 递增子序列 子集问题 1 78 子集 如果把 子集问题、组合问题、分割问题都抽象为一棵树的话&#xff0c;那么组合问题和分割问题是收集树的叶子节点&#xff0c;而子集问题是找树的所有节点&#xff01; 因为需要找到所有的节点&#xff0…

JavaEE(系列一 )-- 计算机是如何进行工作的

目录 1. 操作系统 2. 进程/任务&#xff08;Process/Task&#xff09; 2.1 进程 2.2 进程管理 2.2.1 进程的结构体 2.2.2 进程调度 2.3 并行 和 并发 2.4 内存分配 -- 内存管理(Memory Manage) 2.5 进程间通信 3. 线程 1. 操作系统 操作系统是一组做计算机资源管理的软件的…

谷歌I/O大会重磅发布:Bard编码能力优化后仍不支持中文,开发者选择CodeGeeX更佳

谷歌I/O大会今天凌晨发布&#xff0c;打出系列AI组合拳。除了发布升级版语言模型PaLM2之外&#xff0c;Bard能力也要起飞。 凭借改进的数学、逻辑和推理技能&#xff0c;Bard 现在可以帮助生成、解释和调试 20 多种编程语言的代码&#xff0c;开发者们需要输入prompt&#xff0…

C#从入门到入坟(原创不易,转载请注明出处)

文章目录 C# 基础篇0 环境部署1 Hello world1.1 两种框架1.2 创建项目的过程1.3 项目组成结构1.3.1 解决方案和项目1.3.2 程序集信息1.3.3 引用1.3.4 配置文件1.3.5 程序入口类 1.4 解决方案1.5 Debug 和 Release1.6 CSharp虚拟机初始1.7 .Net Framework混合语言开发1.8 托管代…

上下文感知的体素对比学习用于标签高效的多器官分割

文章目录 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient Multi-organ Segmentation摘要本文方法有监督损失Context-Aware Contrastive Learning Loss for Unlabeled Voxels 实验结果 Context-Aware Voxel-Wise Contrastive Learning for Label Efficient…