笔试强训day10

文章目录

    • 一、选择题
    • 二、编程题

一、选择题

1、下列运算符合法的是( )
A &&
B <>
C if
D :=
正确答案: A
参考答案:
注解:java 中没有<> := 这种运算符, if else不算运算符
2、下面代码运行结果是()

public class Test{
public int add(int a,int b){
try {
return a+b;
catch (Exception e) {
System.out.println("catch语句块");
}
finally{
System.out.println("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 (正确)
正确答案: C
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 静态区、栈区、栈区
他的回答: B (错误)
正确答案: C
参考答案:
全局变量、类的实例,存放在堆中;局部变量,存在栈里面,方法使用完,栈释放。
4、以下声明合法的是
A default String s
B public final static native int w( )
C abstract double d
D abstract final double hyperbolicCosine( )
他的回答: B (正确)
正确答案: B
参考答案:
抽象方法:被继承需要重写,但是finally修饰的是不能被继承的。
5、在使用super 和this关键字时,以下描述正确的是
A 在子类构造方法中使用super()显示调用父类的构造方法,super()必须写在子类构造方法的第一行,否则编译不通过
B super()和this()不一定要放在构造方法内第一行
C this()和super()可以同时出现在一个构造函数中
D this()和super()可以在static环境中使用,包括static方法和static语句块
他的回答: A (正确)
正确答案: A
参考答案:
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
他的回答: B (错误)
正确答案: D
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 运行期抛出异常
他的回答: B (错误)
正确答案: C
参考答案:
使用+的时候,会把byte的类型变成int类型,被finally修饰的不能被改变。b3=(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 运行时抛出异常
他的回答: C (错误)
正确答案: B
参考答案:
考察的知识点:多态、重载
首先,创建了一个匿名内部类,并将所创建的匿名对象赋给 Object (多态:子类对象赋给超类引用)。同时,该匿名内部类重写了 Object 类的 equals 方法,根
据多态及覆盖原则,会调用匿名内部类重写后的 equals 方法,所以选B。
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 (正确)
正确答案: D
10、下面所示的java代码,运行时,会产生()类型的异常

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

A ArithmeticException
B NullPointException
C IOException
D ArrayIndexOutOfBoundsException
他的回答: D (正确)
正确答案: D

二、编程题

【井字棋】
给定一个二维数组board,代表棋盘,其中元素为1的代表是当前玩家的棋子,0表示没有棋子,-1代表是对方玩家的棋子。当一方棋子在横竖斜方向上有连成排的及
获胜(及井字棋规则),返回当前玩家是否胜出。
测试样例:
[[1,0,1],[1,-1,-1],[1,-1,0]]
返回:true
【解题思路】:
井字棋有四种情况表示当前玩家获胜,1代表当前玩家棋子 1. 行全为1, 即行的和为3 2. 列全为1, 列的和为3 2. 主对角全为1, 对角和为3 副对角全为1, 对角和为3 3. 如果扩展为N*N的话,判断和是否等于N.

牛客网核心代码模式

import java.util.*;

public class Board {
    public boolean checkWon(int[][] board) {
       int n=board.length;
        int i=0;
        int j=0;
        int sum=0;
        //检查行
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                sum+=board[i][j];
                if(sum==n){
                    return true;
                }
            }
        }
        //检查列
        sum=0;
        for(i=0;i<n;i++){
            for(j=0;j<n;j++){
                sum+=board[j][i];
                if(sum==n){
                    return true;
                }
            }
        }
        //检查主对角巷
        sum=0;
        for(i=0;i<n;i++){
           sum+=board[i][i];
            if(sum==n){
                return true;
            }
        }
        //检查副对角线
        sum=0;
        for(i=0;i<n;i++){
            sum+=board[i][n-1-i];
            if(sum==n){
                return true;
            }
        }
        return false;
    }
}

**【密码强度等级】**密码按如下规则进行计分,并根据不同的得分为密码进行安全等级划分。
一、密码长度:
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
笔试强训day10_第1张图片

提示
1 <= 字符串的长度<= 300
输入描述:
输入一个string的密码

输出描述:
输出密码等级

示例1:
输入
38$@NoNoNo

输出
VERY_SECURE

【解题思路】:
这里对于不同种类的字符得分不同,同学们可以现对每一个维度进行单独判断,即对于长度,字母,数字,符号单独判断,最后把所有的单项值根据题目要求相加,输出对应的安全级别。
牛客网ACM模式代码

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        while(scanner.hasNextLine()){
            String str=scanner.nextLine();
           int sum=0;
            int sum1=getLen(str);
            int sum2=getChar(str);
            int sum3=getNum(str);
            int sum4=getString(str);
         if(sum2==20&&sum3>0&&sum4>0){
               sum=sum1+sum2+sum3+sum4+5;
            }else if(sum2==10&&sum3>0&&sum4>0){
                sum=sum1+sum2+sum3+sum4+3;
            }else if(sum2==10&&sum3>0&&sum4==0){
               sum=sum1+sum2+sum3+sum4+2;
            }else{
               sum=sum1+sum2+sum3+sum4;
            }       
        if(sum>=90){
            System.out.print("VERY_SECURE");
        }else if(sum>=80){
           System.out.print("SECURE"); 
        }else if(sum>=70){
            System.out.print("VERY_STRONG");
        }else if(sum>=60){
             System.out.print("STRONG");
        }else if(sum>=50){
             System.out.print("AVERAGE");
        }else if(sum>=25){
             System.out.print("WEAK");
        }else if(sum>=0){
             System.out.print("VERY_WEAK");
        }
     }
    }
    public static int getLen(String str){
        int len=str.length();
       if(len>=8){
           return 25;
       } else if(len>=5&&len<=7){
            return 10;
        } else if(len<=4){
           return 5;
       }
        return 0;
     }  
     public static int getChar(String str){
         int len=str.length();
         int count1=0;
         int count2=0;
         for(int i=0;i<len;i++){
             if(str.charAt(i)>=65&&str.charAt(i)<=90){
                 count1++;
             }else if(str.charAt(i)>=97&&str.charAt(i)<=122){
                 count2++;
             }       
         }
         if(count1>0&&count2>0){
             return 20;
            }else if(count1>0||count2>0){
               return 10;
            }else{
             return 0;
            } 
      }
        public static int getNum(String str){
            int len=str.length();
            int count=0;
            for(int i=0;i<len;i++){
                if(str.charAt(i)-'0'>=0&&str.charAt(i)-'0'<=9){
                    count++;
                }
            }
            if(count>1){
                return 20;
            }else if(count==1){
                return 10;
            }else{
                return 0;
            }
        }
        public static int getString(String str){
            int len=str.length();
            int num=0;
            for(int i=0;i<len;i++){
                if(!((str.charAt(i)>=65&&str.charAt(i)<=90))&&
                    !((str.charAt(i)>=97&&str.charAt(i)<=122))&&
                   !((str.charAt(i)-'0'>=0&&str.charAt(i)-'0'<=9))
                  ){
                    num++;
                }
            }
            if(num>1){
                return 25;
            }else if(num==1){
                return 10;
            }else{
                return 0;
            }
        }   
}

你可能感兴趣的:(笔试强训,java)