Java经典笔试题—day05

简介: 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月前
|
存储 安全 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 BI
Java经典笔试题—day06
Java经典笔试题—day06