笔试强训(十)
目录
- 一、选择题
- 二、编程题
- 2.1 密码强度等级
- 2.1.1 题目
- 2.1.2 题解
- 2.2 井字棋
- 2.2.1 题目
- 2.2.2 题解
一、选择题
(1)下面代码运行结果是()
public class Test2 {
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[] args) {
Test2 test2=new Test2();
System.out.println(test2.add(9, 34));
}
}
//执行结果:
finally 语句块
43
(2)下列Java代码中的变量a、b、c分别存放在内存的___存储区存放
class A{
private String a="aa";
public void methodB(){
String b="bb";
final String c="cc";
}
}
//答案:堆区、栈区、栈区
a 是属于全局变量,也是实例成员变量,我们知道实例是通过new 关键字生成的,是放在堆上的,故变量a也出存储在堆中
b,c都是方法中的局部变量,存储在栈中
(3)下列代码的输出结果是什么()
public static void main(String[] args) {
try{
int i=100/0;
System.out.println(i);
}catch (Exception e){
System.out.print(1);
throw new RuntimeException();
}finally {
System.out.println(2);
}
System.out.println(3);
}
//输出结果:12
(4)关于下面这段代码叙述正确的是(C)
public static void main(String[] args) {
byte b1=1,b2=2,b3,b6;
final byte b4=4,b5=5;
b6=b4+b5;
b3=b1+b2;
System.out.println(b3+b6);
}
A.输出结果:13
B.语句:b6=b4+b5; 编译出错
C.语句: b3=b1+b2; 编译出错
D.运行时抛出异常
(5)下面这段代码的输出结果是()
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;
}
//执行结果:AB,B
二、编程题
2.1 密码强度等级
2.1.1 题目
2.1.2 题解
题目本身不难,只要细心一些就好
import java.util.*;
public class Main {
public static int lengthScore(String str){
if(str.length()>=8){
return 25;
}else if(str.length()>=5 && str.length()<=7){
return 10;
} else {
return 5;
}
}
public static int letterScore(String str){
int min=0;
int max=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)>='a' && str.charAt(i)<='z'){
min++;
}
if(str.charAt(i)>='A' && str.charAt(i)<='Z'){
max++;
}
}
if(min!=0 && max!=0){
return 20;
}
if(min==0 && max==0){
return 0;
}
if(min!=0 || max!=0){
return 10;
}
return 0;
}
public static int numScore(String str){
int count=0;
for(int i=0;i<str.length();i++){
if(str.charAt(i)>='0' && str.charAt(i)<='9'){
count++;
}
}
if(count>1){
return 20;
}else if(count==1){
return 10;
}else {
return 0;
}
}
public static int signScore(String str){
int count=0;
for(int i=0;i<str.length();i++){
if((str.charAt(i)>=0x21 && str.charAt(i)<=0x2F)||
(str.charAt(i)>=0x3A && str.charAt(i)<=0x40)||
(str.charAt(i)>=0x5B && str.charAt(i)<=0x60)||
(str.charAt(i)>=0x7B && str.charAt(i)<=0x7E)){
count++;
}
}
if(count>1){
return 25;
}else if(count==1){
return 10;
}else {
return 0;
}
}
public static void main(String[] args){
Scanner scanner=new Scanner(System.in);
String str=scanner.nextLine();
//String str="Jl)M:+";
int sum=0;
int sumLength=lengthScore(str);
int sumLetter=letterScore(str);
int sumNum=numScore(str);
int sumSign=signScore(str);
sum=sumLength+sumLetter+sumNum+sumSign;
if(sumLetter==20 && sumNum>0 && sumSign>0){
sum+=5;
}else if(sumNum>0 && sumLetter>0 && sumSign>0){
sum+=3;
}else if(sumLetter>0 && sumNum>0){
sum+=2;
}
if(sum>=90){
System.out.println("VERY_SECURE");
}else if(sum>=80){
System.out.println("SECURE");
}else if(sum>=70){
System.out.println("VERY_STRONG");
}else if(sum>=60){
System.out.println("STRONG");
}else if(sum>=50){
System.out.println("AVERAGE");
}else if(sum>=25){
System.out.println("WEAK");
}else if(sum>=0){
System.out.println("VERY_WEAK");
}
}
}
2.2 井字棋
2.2.1 题目
2.2.2 题解
思路:分别判断每一行
每一列和两条对角线是否符合获胜的要求
public class Board {
public boolean checkWon(int[][] board) {
int n=board.length;
int m=board[0].length;
//判断是否某一行有三个连在一起的棋子
for(int i=0;i<n;i++){
int sum=0;
for(int j=0;j<n;j++){
if(board[i][j]==1){
sum+=1;
}
}
if(sum==n){
return true;
}
}
//判断是否某一列有三个连在一起的棋子
for(int i=0;i<n;i++){
int sum=0;
for(int j=0;j<n;j++){
if(board[j][i]==1){
sum+=1;
}
}
if(sum==n){
return true;
}
}
//判断正对角线的三个棋子是否连成一排
int sum=0;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i==j){
sum+=board[i][j];
}
}
if(sum==n){
return true;
}
}
sum=0;
//判断斜对角线的三个棋子是否连成一排
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
if(i+j==n-1){
sum+=board[i][j];
}
}
if(sum==n){
return true;
}
}
return false;
}
}