笔试强训day6

文章目录

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

一、选择题

1、关于抽象类与最终类,下列说法错误的是?
A 抽象类能被继承,最终类只能被实例化。
B 抽象类和最终类都可以被声明使用
C 抽象类中可以没有抽象方法,最终类中可以没有最终方法
D 抽象类和最终类被继承时,方法可以被子类覆盖
他的回答: A (错误)
正确答案: D
参考答案:
final修饰的类(就是最终类)不能被继承
2、已知表达式int m[]={0,1,2,3,4,5,6};下面哪个表达式的值与数组下标量最大值相等?
A m. length()
B m. length-1
C m. length()+1
D m. length+1
他的回答: D (错误)
正确答案: B
3、下列哪个对访问修饰符作用范围由大到小排列是正确的?
A private>default>protected>public
B public>default>protected>private
C private>protected>default>public
D public>protected>default>private
他的回答: D (正确)
正确答案: D
4、有六个元素6,5,4,3,2,1顺序入栈,问下列哪一个不是合法的出栈序列?()
A 5 4 3 6 2 1
B 4 5 3 1 2 6
C 3 4 6 5 2 1
D 2 3 4 1 5 6
他的回答: C (正确)
正确答案: C
5、阅读下列程序,选择哪一个是正确的输出结果

class HelloA{
public HelloA()
{
System.out.println("I’m A class ");
}
static
{
System.out.println("static A");
}
}
public class HelloB extends HelloA{
public HelloB()
{
System.out.println("I’m B class");
}
static{
System.out.println("static B");
}
public static void main (String[] args){
new HelloB();
}
}

A static A I’m A class static B I’m B class
B I’m A class I’m B class static A static B
C static A static B I’m A class I’m B class
D I’m A class static A I’m B class static B
他的回答: C (正确)
参考答案:
静态代码块先执行父类的静态代码块,在执行其它静态代码块
6、执行下列代码的输出结果是( )

public class Demo{
public static void main(String args[]){
int num = 10;
System.out.println(test(num));
}
public static int test(int b){
try
{
b += 10;
return b;
}
catch(RuntimeException e)
{
}
catch(Exception e2)
{
}
finally
{
b += 10;
return b;
}
}
}

A 10
B 20
C 30
D 40
他的回答: B (错误)
正确答案: C
参考答案:
如果finally块中有return语句的话,它将覆盖掉函数中其他return语句,所以返回30。
7、下列代码的输出结果是_____

boolean b=true?false:true==true?false:true;
System.out.println(b)

A true
B false
C null
D 空字符串
他的回答: A (错误)
正确答案: B
参考答案:
这是一个三目运算符在这里插入图片描述
为真返回false,假返回true==true?false:true
8、在Java中下面Class的声明哪些是错误的?
A public abstract final class Test { abstract void method(); }
B public abstract class Test { abstract final void method(); }
C public abstract class Test { abstract void method() { } }
D public class Test { final void method() { } }
他的回答: A B D (错误)
正确答案: A B C
参考答案:
abstract和finally是不能同时出现的,抽象方法不能有具体的实现
9、下列关于构造方法的叙述中,错误的是()
A java语言规定构造方法名与类名必须相同
B java语言规定构造方法没有返回值,但不同void声明
C java语言规定构造方法不可以重载
D java语言规定构造方法只能通过new自动调用
他的回答: C D (正确)
正确答案: C D
10、下面哪些赋值语句是正确的()
A long test=012
B float f=-412
C int other =(int)true
D double d=0x12345678
E byte b=128
他的回答: A E (错误)
正确答案: A B D
参考答案:
A是8进制,D是十六进制

二、编程题

【**不要二】**二货小易有一个W*H的网格盒子,网格的行编号为0H-1,网格的列编号为0W-1。每个格子至多可以放一块蛋糕,任意两块蛋糕的欧几里得距离不能
等于2。
对于两个格子坐标(x1,y1),(x2,y2)的欧几里得距离为:
( (x1-x2) * (x1-x2) + (y1-y2) * (y1-y2) ) 的算术平方根
小易想知道最多可以放多少块蛋糕在网格盒子里。
输入描述:
每组数组包含网格长宽W,H,用空格分割.(1 ≤ W、H ≤ 1000)
示例1:
输入
3 2
输出
4
【解题思路】:
仔细读理解了上面的题目解读,本题就非常简单了,定义一个二维数组,array开空间并初始化,每个位置初始化为0,表示当蛋糕,a[i][j]位置放蛋糕,则可以标记处a[i][j+2]和a[i+2][j]位置不能放蛋糕,遍历一遍二维数组,标记处不能放蛋糕的位置,统计也就统计出了当蛋糕的位置数。
笔试强训day6_第1张图片

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner sc=new Scanner(System.in);
        int H=sc.nextInt();
        int W=sc.nextInt();
        int[][] array=new int[H][W];
        int count=0;
        for(int i=0;i<H;i++){
            for(int j=0;j<W;j++){
                if(array[i][j]==0){
                    count++;
                   if(i+2<H){
                   array[i+2][j]=1;
                   }
                   if(j+2<W){
                     array[i][j+2]=1;
                   }
                }
            }
        }
        System.out.print(count);
   }
}

【把字符串转换成整数】
将一个字符串转换成一个整数,要求不能使用字符串转换整数的库函数。 数值为 0 或者字符串不是一个合法的数值则返回 0
数据范围:字符串长度满足 0<=n<=10
进阶:空间复杂度o(1) ,时间复杂度0(n)
注意:
①字符串中可能出现任意符号,出现除 +/- 以外符号时直接输出 0
②字符串中可能出现 +/- 且仅可能出现在字符串首位。
输入描述:
输入一个字符串,包括数字字母符号,可以为空
输出描述:
如果是合法的数值表达则返回该数字,否则返回0
示例1:
输入
+2147483647
1a33
输出
2147483647
0
【解题思路】:
解题思路非常简单,就是上次计算的结果*10,相当于10进制进位,然后加当前位的值。
本题的关键是要处理几个关键边界条件:

  1. 空字符串
  2. 正负号处理
  3. 数字串中存在非法字符
public class Solution {
    public int StrToInt(String str) {
      char[] array=str.toCharArray();
        if(array==null||array.length==0){
            return 0;
        }
        int flag=1;
        if(array[0]=='-'){
            flag=-1;
            array[0]='0';
        }
         if(array[0]=='+'){
             array[0]='0';
            flag=1;
          }
           int sum=0;
           for(int i=0;i<array.length;i++){
               if(array[i]<'0'||array[i]>'9'){
                    sum=0;
                   break;
               }
              sum=sum*10+array[i]-'0';   
           }
           return flag*sum;
   }
}
    

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