Java经典笔试题—day05

🔎选择题

(1)下面的程序 编译运行后,在屏幕上显示的结果是()

public class Test {
	public static void main(String args[]) {
		int x, y;
		x = 5 >> 2;
		y = x >>> 2;
		System.out.println(y);
	}
}

A. 0
B. 2
C. 5
D. 80

A

x : 5(0101) >> 2 => 1(0001)
y : 1(0001) >>> 2 => 0(0000)

(2)以下代码结果是什么?

public class foo {
	public static void main(String sgf[]) {
		StringBuffer a=new StringBuffer("A");
		StringBuffer b=new StringBuffer("B");
		operate(a,b);
		System.out.println(a+"."+b);
	}
	static void operate(StringBuffer x,StringBuffer y) {
		x.append(y);
		y=x;
	}
}

A. 代码可以编译运行,输出“AB.AB”
B. 代码可以编译运行,输出“A.A”
C. 代码可以编译运行,输出“AB.B”
D. 代码可以编译运行,输出“A.B”

C

通过 operate() 方法传入 StringBuffer a, StringBuffer b
x.append(y) 对 x 的值进行了修改, 也就意味着 a 的值进行了修改
y=x, 将 x 的地址赋值给 y, 此时 y 指向了 x, 并不会影响 b 的值

(3)在JAVA中,假设A有构造方法A(int a),则在类A的其他构造方法中调用该构造方法和语句格式应该为()

A. this.A(x)
B. this(x)
C. super(x)
D. A(x)

B

在这里插入图片描述

(4)下面代码的运行结果是()

public static void main(String[] args){
 	String s;
	System.out.println("s="+s);
}

A. 代码编程成功,并输出”s=”
B. 代码编译成功,并输出”s=null”
C. 由于String s没有初始化,代码不能编译通过。
D. 代码编译成功,但捕获到NullPointException异常

C

此处的 String s 是一个局部变量, 未进行初始化不能编译
如果将 String s 改成全局变量, 则输出 “s=null”
在这里插入图片描述

(5)在java7中,下列不能做switch()的参数类型是?

A. int型
B. 枚举类型
C. 字符串
D. 浮点型

D

不能做 switch() 参数的类型包括 1. double 2.float 3. long 4. boolean
能做 switch() 参数的类型包括 1. int 2. char 3.short 4. byte

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

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

C

(7)以下代码返回值是什么?

public boolean returnTest() {
	try {
 		return true;
 	}
 	catch (Exception e) {
 
 	}
 	finally {
 		return false;
 	}
}

A. true
B. false

B

最后一定会去执行 finally, 因此返回值是 false

(8)以下()不是合法的标识符?

A. STRING
B. x3x
C. void
D. deSf

C

Java 的标识符由数字, 字母, 下划线( _ ), 美元符号( $ )或人民币符号( ¥ )组成
要求标识符的首位不能是数字, 且关键字不能作为标识符

(9)下列有关JAVA异常处理的叙述中正确的是()

A. finally是为确保一段代码不管是否捕获异常都会被执行的一段代码
B. throws是用来声明一个成员方法可能抛出的各种非运行异常情况
C. final用于可以声明属性和方法,分别表示属性的不可变及方法的不可继承
D. throw是用来明确地抛出一个异常情况

A, B, D

A. finally 通常用于资源的关闭, 所以 finally 是一段一定会被执行的代码
B. throws 可以用于声明非运行异常, 也可以声明运行异常
C. final 声明属性表示该属性不可变, 声明方法表示该方法不可重写
D. throw 用于明确地抛出一个异常

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

public class Example{
 	String str=new String("good");
 	char[]ch={'a','b','c'};
 	public static void main(String args[]){
 		Example ex=new Example();
 		ex.change(ex.str,ex.ch);
 		System.out.print(ex.str+" and ");
 		System.out.print(ex.ch);
 	}
 	public void change(String str,char ch[]){
 		//引用类型变量,传递的是地址,属于引用传递。
 		str="test ok";
 		ch[0]='g';
 	}
}

A. good and abc
B. good and gbc
C. test ok and abc
D. test ok and gbc

B

changes() 方法是引用传递
进入 changes() 方法的形参 str 最初指向的是 “good” 的地址
当执行到 str=“test ok” 时, 形参 str 指向的是 “test ok” 的地址
而实参 str 仍然指向的是 “good” 的地址
ch[0] = ‘g’ 是将 ch 所指向地址的值进行了修改, 即 char[] ch = {‘g’, ‘b’, ‘c’}
但 ch 所指向的对象未发生改变

🔎编程题

🥝统计回文

题目描述

“回文串”是一个正读和反读都一样的字符串,比如“level”或者“noon”等等就是回文串。
花花非常喜欢这种拥有对称美的回文串,生日的时候她得到两个礼物分别是字符串A和字符串B。
现在她非常好奇有没有办法将字符串B插入字符串A使产生的字符串是一个回文串。
你接受花花的请求,帮助她寻找有多少种插入办法可以使新串是一个回文串。
如果字符串B插入的位置不同就考虑为不一样的办法。

例如:
A = “aba”,B = “b”。这里有4种把B插入A的办法:

  • 在A的第一个字母之前: “baba” 不是回文
  • 在第一个字母‘a’之后: “abba” 是回文
  • 在字母‘b’之后: “abba” 是回文
  • 在第二个字母’a’之后 “abab” 不是回文
    所以满足条件的答案为2

输入描述

每组输入数据共两行。 第一行为字符串A 第二行为字符串B 字符串长度均小于100且只包含小写字母

输出描述

输出一个数字,表示把字符串B插入字符串A之后构成一个回文串的方法数

在这里插入图片描述

解题思路

枚举
将字符串 B 分别插入到 字符串 A 的(0 ~ n) 上
判断当前拼接的字符串是不是回文串

import java.util.Scanner;
//统计回文
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextLine()) {
            String a = scan.nextLine();
            String b = scan.nextLine();
            int ret = 0;
            //枚举
            for (int i = 0; i <= a.length(); i++) {
                StringBuilder s = new StringBuilder(a).insert(i,b);
                if(isSame(s.toString()))
                    ret++;
            }

            System.out.println(ret);
        }
    }

    //判断是否是回文串
    private static boolean isSame(String s) {
        char[] chs = s.toCharArray();
        int left = 0,right = chs.length - 1;
        while(left < right) {
            if(chs[left++] != chs[right--])
                return false;
        }
        return true;
    }
}

📢题目链接
链接: link


🥝连续子数组最大和

题目描述

一个数组有 N 个元素,求连续子数组的最大和。
例如:[-1,2,1],和最大的连续子数组为[2,1],其和为 3

输入描述

输入为两行。
第一行一个整数n(1 <= n <= 100000),表示一共有n个元素
第二行为n个数,即每个元素,每个整数都在32位int范围内。
以空格分隔。

输出描述

所有连续子数组中和最大的值。

在这里插入图片描述

解题思路

以 -6, -3, 7, -1, 2为例

设置一个变量为 sum, 初始值为 nums[0], 记录当前连续子数组中和的最大值
设置一个变量为 max, 初始值为 nums[0], 每次比较 max 和 sum 的结果, 记录整体连续子数组中和的最大值

sum = -6, max = -6

下标为1时, sum = -3, max = -3, 当前的连续子数组从下标为1开始, 而不是下标为0开始了
下标为2时, sum = 7, max = 7, 当前的连续子数组从下标为2开始, 而不是下标为1开始了
下标为3时, sum = 6, max = 7, 当前的连续子数组依旧从下标为2开始
下标为4时, sum = 8, max = 8, 当前的连续子数组依旧从下标为2开始

import java.util.Scanner;
//连续子数组最大和
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while(scan.hasNextInt()) {
            int n = scan.nextInt();//n个元素
            int[] nums = new int[n];
            for(int i = 0; i < n; i++) nums[i] = scan.nextInt();

            getMax(nums, n);
        }
    }

    private static void getMax(int[] nums, int n) {
        int max = nums[0], sum = nums[0];
        for (int i = 1; i < n; i++) {
            sum = Math.max(sum + nums[i], nums[i]);
            max = Math.max(sum, max);
        }
        System.out.println(max);
    }
}

📢题目链接
链接: link


🔎结尾

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

  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值