【笔试练习题】每日一题Day1

文章目录

  • 选择题
    • 第一题*
    • 第二题
    • 第三题
    • 第四题
    • 第五题
    • 第六题
    • 第七题
    • 第八题
    • 第九题
  • 代码题

选择题

第一题*

在 Java 中,存放字符串常量的对象属于( )类对象。
A. Character
B. String
C. StringBuffer
D. Vector

此题的答案应该选B
解析:
此题的错误答案应该集中在C上,我们在编译器上运行可以看到字符串常量不能之间赋值给StringBuffer的。
【笔试练习题】每日一题Day1_第1张图片

第二题

已知如下类定义:

class Base { 
 public Base (){
 //...
 } 
 public Base ( int m ){
 //...
 } 
 public void fun( int n ){
 //...
 }
} 
public class Child extends Base{ 
 // member methods 
}

如下哪句可以正确地加入子类中?
A. private void fun( int n ){ //…}
B. void fun ( int n ){ //… }
C. protected void fun ( int n ) { //… }
D. public void fun ( int n ) { //… }

此题的答案应该选D
此题的考点是重写的概念,重写时子类的方法名、返回值与参数都必须与父类相同,而访问限定符需要大于等于父类,此时父类中的fun()方法使用public修饰,那么观察答案,只有D符合题意。

第三题

下列选项中属于面向对象编程主要特征的是()
A. 继承
B. 自顶向下
C. 模块化
D. 逐步求精

此题答案为A
非常简单:面向对象编程的三大特性为,继承,封装与多态,而题目中说的自顶向下、模块化、逐步求精都是结构化程序设计的原则

第四题

关于下列程序段的输出结果,说法正确的是:( )

public class MyClass{
static int i;
public static void main(String argv[]){
System.out.println(i);
}
}

A. 有错误,变量i没有初始化。
B. null
C. 1
D. 0

此题答案为D
成员变量没有手动初始化时,会初始化为默认值,此时i的类型为int默认初始化的值为0。

第五题

下列代码的执行结果是:( )

public class Test{
 public static void main(String args[]){
System.out.println(100%3);
System.out.println(100%3.0);
 }
}

A. 1和1
B. 1和1.0
C. 1.0和1
D. 1.0和1.0

此题答案为B
此题考查Java中求余数,在Java中求余数时可以为小数求余数,100%3余数为1,因为两个操作数都是整数所以结果也是整数,而100%3.0有一个操作数为浮点数,答案也是浮点数为1.0,所以选B。

第六题

方法通常存储在进程中的哪一区()
A. 堆区
B. 栈区
C. 全局区
D. 方法区

此题答案选D

第七题

不考虑反射,关于私有访问控制符 private 修饰的成员变量,以下说法正确的是()
A. 可以三种类所引用:该类自身、与它在同一包中的其他类,在其他包中的该类的子类
B. 可以被两种类访问和引用:该类本身、该类的所有子类
C. 只能被该类自身所访问和修改
D. 只能被同一个包中的类访问

此题答案选C
private 访问控制符表示私有的,只能在当前类中进行访问,所以选C。

第八题

类声明中,声明一个类不能再被继承的关键字是()
A. public
B. abstract
C. final
D. static

此题答案为C
public 不用说,abstract表示抽象类,抽象类中的抽象方法必须在子类中实现所以可以被继承,static表示静态的,而final修饰的类是不可以被继承的。
【笔试练习题】每日一题Day1_第2张图片

第九题

假设 A 类有如下定义,设 a 是 A 类的一个实例,下列语句调用哪个是错误的?()

public class A
{
public int i;
static String s;
void method1(){}
static void method2(){}
}

A. System.out.println(a.i);
B. a.method1();
C. A.method1();
D. A.method2();

此题答案为C
通过对象调用成员变量和成员方法没有问题,所以AB正确,D使用类名调用静态方法也没有问题,C使用类名调用普通方法显然是错误的。

代码题

链接: 组队竞赛 - 牛客网

题目:
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现队伍的水平值等于该队伍队员中第二高水平值。
例如:
一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大。
如样例所示:
如果牛牛把6个队员划分到两个队伍
如果方案为:
team1:{1,2,5}, team2:{5,5,8}, 这时候水平值总和为7.
而如果方案为:
team1:{2,5,8}, team2:{1,5,5}, 这时候水平值总和为10.
没有比总和为10更大的方案,所以输出10.

通过读题我们发现了一句最重要的话牛牛发现队伍的水平值等于该队伍队员中第二高水平值。这句话非常重要,通过这句话我们可以找到解题的关键,如果我们想让队伍的水平总和最大那么我们需要让每个队伍的水平值最大,我们在进行分配队伍时,每次分配一个水平值最低的队员和两个最大的队员,问题就解决了。
【笔试练习题】每日一题Day1_第3张图片
通过我们的分析找到了一些规律,我们先将队员的水平值放入一个数组中进行排序,每次取出都是该数组中的最小元素、最大元素、和次大元素,而次大元素就是每个队伍的水平值,通过对该这组次大元素下标的分析,我们找到了规律。
下面是题解:

  public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        int n = scanner.nextInt();
        long[] arr = new long[3 * n];

        for(int i = 0;i < arr.length;i++) {
            arr[i] = scanner.nextInt();
        }

        long count = 0;

        for(int i = 0;i < n;i++) {
            count += arr[arr.length - 2 * (i +1)];
        }

        System.out.println(count);
    }

链接: 删除公共字符串 - 牛客网

输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符串变成”Thy r stdnts.”
输入描述:
每个测试输入包含2个字符串
输出描述:
输出删除后的字符串

我们通过分析可以将这个题变成找重复元素,找到str1中与str2重复的元素删除并输出删除重复字符后的字符串,我们可以直接遍历字符串,找到重复元素后替换为"",我们还可以使用更高级的一些方法例如HashMapHashMap map = new HashMap<>();我们可以创建一个这样的HashMap,遍历str2,将字符作为key存入HashMap中,并给value++,遍历完str2之后,在遍历str1如果str1中的字符作为key所对应的value为0,那就输出,如果不为0就说明在str2中重复,不输出。

 public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        HashMap<Character,Integer> map = new HashMap<>();

        String str1 = scanner.nextLine();
        String str2 = scanner.nextLine();

        for(int i = 0;i < str2.length();i++) {
            if(map.get(str2.charAt(i)) == null) {
                map.put(str2.charAt(i),1);
            }else {
                map.put(str2.charAt(i),map.get(str2.charAt(i)) + 1);
            }
        }

        String ret = "";

        for(int i = 0;i < str1.length();i++) {
            if(map.get(str1.charAt(i)) == null) {
                ret += str1.charAt(i);
            }
        }

        System.out.println(ret);
    }

你可能感兴趣的:(笔试练习题,java,开发语言)