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