Java经典笔试题—day10

简介: Java经典笔试题—day10

🔎选择题

(1)下列运算符合法的是( )

A.&&

B.<>

C.if

D.:=

A

B. 泛型的标志, 例如 <T>

C. if 表示关键字

(2)下面代码运行结果是( )

public class Test{  
    public int add(int a,int b){  
         try {  
             return a+b;    
         } 
        catch (Exception e) { 
            System.out.print("catch语句块 ");  
         }  
         finally{ 
             System.out.print("finally语句块 "); 
         }  
         return 0;  
    } 
     public static void main(String argv[]){ 
         Test test =new Test(); 
         System.out.println("和是:"+test.add(9, 34)); 
     }
}

A.catch语句块 和是:43

B.编译异常

C.finally语句块 和是:43

D.和是:43 finally语句块

C

先去执行 finally, 输出 finally语句块

再去执行 return a+b, 输出 和是: 43

(3)下列Java代码中的变量a、b、c分别在内存的____存储区存放

class A {
    private String a = "aa";
    public boolean methodB() {
        String b = "bb";
        final String c = "cc";
    }
}

A.堆区、堆区、堆区

B.堆区、栈区、堆区

C.堆区、栈区、栈区

D.堆区、堆区、栈区

E.静态区、栈区、堆区

F.静态区、栈区、栈区

C

a 属于全局变量

b, c 属于局部变量

全局变量和类的实例化存储在

局部变量随着方法存储在栈帧中, 当方法调用结束后, 局部变量也就随之结束

(4)以下声明合法的是 ( )

A.default String s

B.public final static native int w( )

C.abstract double d

D.abstract final double hyperbolicCosine( )

B

A. 默认的访问权限修饰符是什么都不加, 不是 default. 例如 String s, 这就是默认的访问权限修饰符

C. 变量不能被声明为抽象类型

D. 抽象方法默认是需要被重写的, final 修饰代表不能重写, 因此不能这样搭配

(5)在使用super 和this关键字时,以下描述正确的是 ( )

A.在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过

B.super()和this()不一定要放在构造方法内第一行

C.this()和super()可以同时出现在一个构造函数中

D.this()和super()可以在static环境中使用,包括static方法和static语句块

A

A. Java 语言规定, 在执行该类构造方法之前必须先执行父类的构造方法, 直到 Object 类的构造方法

B. super() 和 this() 一定要放在构造方法内第一行

C. this() 和super() 不可以同时出现在一个构造函数中

D.this()和super()不可以在static环境中使用

因为 this() 和 super() 指代的是对象(在构造方法中使用), static 修饰指代的是类

(6)下面代码的输出结果是什么?

public class ZeroTest {
    public static void main(String[] args) {
      try{
         int i = 100 / 0;
         System.out.print(i);
      }catch(Exception e){
         System.out.print(1);
         throw new RuntimeException();
      }finally{
         System.out.print(2);
      }
      System.out.print(3);
  }
 }

A.3

B.123

C.1

D.12

D

除法运算中, 要求分母不能为 0

因此 catch() 会捕获到异常, 打印1

最后执行 finally, 打印2

(7)有代码片段如下:

byte b1=1,b2=2,b3,b6;  
final byte b4=4,b5=6;  
b6=b4+b5;  
b3=(b1+b2);  
System.out.println(b3+b6);

A.输出结果:13

B.语句:b6=b4+b5编译出错

C.语句:b3=b1+b2编译出错

D.运行期抛出异常

C

b4, b5 属于 byte 类型, 当执行到 b4 + b5 时, 遇见 + 号 byte 会升级成 int

但 b4, b5 被 final 所修饰, 因此 b4, b5 仍然是 byte 类型

当执行到 b1 + b2 时, byte 类型的 b1, b2 会升级为 int b1, b2, 因此会发生编译错误

(8)以下java程序代码,执行后的结果是()

public class Test { 
    public static void main(String[] args) {  
        Object o = new Object() { 
             public boolean equals(Object obj) {  
                 return true; 
          } 
      };  
      System.out.println(o.equals("Fred"));
     }
}

A.Fred

B.true

C.编译错误

D.运行时抛出异常

B

Object 是所有类的父类

Fred 是 String类型, String 类型继承自 Object

因此调用 Object 类的 equals 方法, 返回 true

(9)执行以下程序后的输出结果是()

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

A.A,A

B.A,B

C.B,B

D.AB,B

D

通过 operate() 方法传入 StringBuffer a, StringBuffer b

x.append(y) 对 x 的值进行了修改, 也就意味着 a 的值进行了修改

y=x, 将 x 的地址赋值给 y, 此时 y 指向了 x, 并不会影响 b 的值

(10)下面所示的java代码,运行时,会产生()类型的异常

int Arry_a[] = new int[10];
System.out.println(Arry_a[10]);

A.ArithmeticException

B.NullPointException

C.IOException

D.ArrayIndexOutOfBoundsException

D

数组下标越界异常

🔎编程题


🥝井字棋


题目描述

给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及获胜(及井字棋规则),返回当前玩家是否胜出。

解题思路

根据题意进行简单模拟即可

不要想复杂

朴素解法

枚举每一行, 判断该行是否连成排

枚举每一列, 判断该列是否连成排

枚举对角线, 判断该对角线是否连成排

public boolean checkWon(int[][] board) {
        // write code here
        // 判断行
        for(int i = 0; i < 3; i++) {
            if(board[i][0] + board[i][1] + board[i][2] == 3) return true;
        }
        // 判断列
        for(int i = 0; i < 3; i++) {
            if(board[0][i] + board[1][i] + board[2][i] == 3) return true;
        }
        // 判断对角线
        if(board[0][0] + board[1][1] + board[2][2] == 3) return true;
        if(board[0][2] + board[1][1] + board[2][0] == 3) return true;
        return false;
}

📢题目链接

链接: link


🥝密码强度等级


题目描述

密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。

一、密码长度:

5 分: 小于等于4 个字符
10 分: 5 到 7 字符
25 分: 大于等于8 个字符

二、字母:

0 分: 没有字母
10 分: 密码里的字母全都是小(大)写字母
20 分: 密码里的字母符合”大小写混合“

三、数字:

0 分: 没有数字
10 分: 1 个数字
20 分: 大于1 个数字

四、符号:

0 分: 没有符号
10 分: 1 个符号
25 分: 大于1 个符号

五、奖励(只能选符合最多的那一种奖励):

2 分: 字母和数字
3 分: 字母、数字和符号
5 分: 大小写字母、数字和符号

最后的评分标准:

>= 90: 非常安全
>= 80: 安全(Secure)
>= 70: 非常强
>= 60: 强(Strong)
>= 50: 一般(Average)
>= 25: 弱(Weak)
>= 0:  非常弱(Very_Weak)

对应输出为:

VERY_SECURE
SECURE
VERY_STRONG
STRONG
AVERAGE
WEAK
VERY_WEAK

请根据输入的密码字符串,进行安全评定。

注:

字母:a-z, A-Z

数字:0-9

符号包含如下: (ASCII码表可以在UltraEdit的菜单view->ASCII Table查看)

!"#$%&'()*+,-./ (ASCII码:0x21~0x2F)

:;<=>?@ (ASCII码:0x3A~0x40)

[]^_` (ASCII码:0x5B~0x60)

{|}~ (ASCII码:0x7B~0x7E)

提示:

1 <= 字符串的长度<= 300

输入描述

输入一个string的密码

输出描述

输出密码等级

解题思路

根据题意进行简单模拟即可

//密码强度等级
import java.util.Scanner;
public class Main {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        while (scan.hasNextLine()) {
            //输入的string密码
            String str = scan.nextLine();
            String safeGrade = safeGrade(str);
            System.out.println(safeGrade);
        }
    }
    private static String safeGrade(String str) {
        int ret = 0;
        ret += getLen(str);
        int character = getCharacter(str);
        int num = getNum(str);
        int asc = getAsc(str);
        ret += character + num + asc;
        //字母和数字
        if (character != 0 && num != 0) {
            if (asc == 0) {
                ret += 2;
            } else {//字母,数字和符号
                if (character != 20) {
                    ret += 3;
                } else {//大小写字母,数字和符号
                    ret += 5;
                }
            }
        }
        return func(ret);
    }
    private static String func(int ret) {
        if (ret >= 90) return "VERY_SECURE";
        else if (ret >= 80) return "SECURE";
        else if (ret >= 70) return "VERY_STRONG";
        else if (ret >= 60) return "STRONG";
        else if (ret >= 50) return "AVERAGE";
        else if (ret >= 25) return "WEAK";
        else return "VERY_WEAK";
    }
    //判断长度
    private static int getLen(String str) {
        int n = str.length();
        if (n <= 4) {
            return 5;
        } else if (n <= 7) {
            return 10;
        } else {
            return 25;
        }
    }
    //判断字母
    private static int getCharacter(String str) {
        //flg1 --> 小写字母 flg2 --> 大写字母
        boolean flg1 = false, flg2 = false;
        char[] chs = str.toCharArray();
        int n = chs.length;
        for (char c : chs) {
            if (c >= 'A' && c <= 'Z') {
                flg1 = true;
            }
            if (c >= 'a' && c <= 'z') {
                flg2 = true;
            }
        }
        if (!flg1 && !flg2) return 0;
        if (flg1 && flg2) return 20;
        return 10;
    }
    //判断数字
    private static int getNum(String str) {
        char[] chs = str.toCharArray();
        int ret = 0;
        for (char c : chs) {
            int x = c - '0';
            if (x >= 0 && x <= 9) ret++;
        }
        if (ret == 0) return 0;
        return ret == 1 ? 10 : 20;
    }
    //判断符号
    private static int getAsc(String str) {
        char[] chs = str.toCharArray();
        //0x21 ~ 0x2F (33 ~ 47)
        //0x3A ~ 0x40 (58 ~ 64)
        //0x5B ~ 0x60 (91 ~ 96)
        //0x7B ~ 0X7E (123 ~ 126)
        int ret = 0;
        for (char c : chs) {
            int x = c;
            if (x >= 33 && x <= 47) ret++;
            else if (x >= 58 && x <= 64) ret++;
            else if (x >= 91 && x <= 96) ret++;
            else if (x >= 123 && x <= 126) ret++;
        }
        if (ret == 0) return 0;
        return ret == 1 ? 10 : 25;
    }
}

📢题目链接

链接: 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经典笔试题—day09
Java经典笔试题—day09
|
9月前
|
存储 机器学习/深度学习 Java
Java经典笔试题—day08
Java经典笔试题—day08
|
9月前
|
存储 Java 数据安全/隐私保护
Java经典笔试题—day07
Java经典笔试题—day07
|
9月前
|
人工智能 Java BI
Java经典笔试题—day06
Java经典笔试题—day06
|
9月前
|
Java
Java经典笔试题—day05
Java经典笔试题—day05