当前位置: 代码迷 >> 综合 >> Day01:笔试题总结
  详细解决方案

Day01:笔试题总结

热度:55   发布时间:2023-11-29 19:47:20.0

目录

一,选择题

二,编程题

1.组队竞赛

2.删除公共字符


一,选择题

1.

解析:

A.Character属于是char(字符类型)的包装类

B.String就是用来存放字符串的,而且是存放字符串常量的(不可变性,从String远吗来看,创建一个字符串常量的方法是用字符数组,并且被final修饰,因此是不可变的

) 

C.StringBuffer存放字符串常量需要new一个对象,并且是存放字符串变量的(这个方法可以直接在原有的字符串后面进行拼接,不用重新创建一个对象)

D.Vector是一个集合框架,不能直接存放字符串常量

2.

解析:从答案来看都是针对于fun方法,并且是普通的成员方法,因此,从父类继承的方法重写后,这个方法的访问修饰限定符必须大于等于父类方法的限定符

(private < 默认(default)< protected<public)

3.

解析:Java面向对象的三大特性:封装,继承,多态

 自顶向下,模块化,逐步求精是结构化程序的设计原则

4.

解析:

在静态成员变量中,可以不用初始化,如果不初始化会赋给其对应类型的默认值(int默认初始值为0) 

5.

解析:100%3得到余数1

而100%1.0会自动进行类型转换,得到1.0 

6.

解析:对于默认类型,整形就是int,带小数的只能是double

7.

解析:方法存储在方法区

8.

解析:

private:同一个包中的同一个类

默认:同一个包中的不同类

protected:不同包中的子类

public:不同包中的非子类

9.

解析:

被final修饰的类是不可继承的 

10.

解析: 

A.i属于是A类的成员变量,肯定可以通过a(对象实例)来进行调用

B.method1是普通成员方法,可以通过a(对象实例)来调用

C.method1是普通成员方法,不能通过类名来调用

D.method2是静态成员方法,必须通过类名进行调用

二,编程题

1.组队竞赛

题目描述:

解析:

1)从题目上得到的信息,会分组(可以考虑数组的形式接收数据) ,取第二高水平值

2)根据题的分析,如果不对数据进行排序,是非常的凌乱,对取水平值有很大的影响

3)首先想,如果是要取最大的水平值(假如让最大值的人当组长),我们是不是就可以从排序后的数据中,从最末尾的下标位置去拿数据,有几组,我依次向前取几个数据,剩余的人我不用管,随便去哪组都行,只要保证这几组中我刚刚取的数据是都是组长就行

4)对于这道题,我们也可以这么想,既然取第二大,那我就要让我这一组里的第二大的人足够大,不浪费,那现在,让刚才组队的机制进行改变,从排好序的数组的末尾开始,第一个人当组长,组长从剩下的人里面,挑选本组第二大的人(组长肯定会尽量让本组第二大的人足够大,因此,这个组长肯定会选紧靠着自己的那个人,因为那个人就是最佳人选,至于第三个人,随便来谁都行,靠着这样的机制,那么,第三个人就是第二组的组长,本着有最大选最大,第二组组长也会选择自己旁边的这一位)

5)以上触类旁通,我们可以得到一个规律,从排好序的数组当中,从后往前,每两个人组一队,第三人未知,那么,每组的第二大就是最理想情况下的

解题代码示例: 

import java.util.*;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);//list的作用就是获取所有输入的数据List<Integer> list = new ArrayList<>();while(sc.hasNextInt()){list.add(sc.nextInt());}//第一个数据是由多少组,提取出来int count = list.get(0);//删除第一个数据,第一个数据不是参赛选手的水平值list.remove(0);//将list进行排序Collections.sort(list);//后面为了寻找最大的水平值总和,要从list中提取相应的数据//并且需要进行动态的变化int len = list.size();long sum = 0;//count代表有几组,就相应的取几次数据while(count >= 1){sum = sum + list.get(len - 2);//定义下次取数据的起始位置len = len - 2;//取一次数据,减少一次循环的次数count--;}System.out.println(sum);}
}

2.删除公共字符

题目内容:

解析:

1)这道题可以看做是一个简单的字符串平拼接,有就拼接,没有就拼接

2)需要两样东西:对比字符数组,进行拼接并打印的字符变量(StringBuilder)

解题代码示例: 

import java.util.*;public class Main{public static void main(String[] args){Scanner sc = new Scanner(System.in);String s1 = "";String s2 = "";while(sc.hasNext()){s1 = sc.nextLine();s2 = sc.nextLine();}//本题采用不断拼接的方式来拼接一个新的字符串,不在原来的字符串上做修改//创建一个list用来保存s2的每个字符//作用:用来对比s1中每个字符的存在与否List<Character> list = new ArrayList<>();for(int i = 0;i < s2.length();i++){list.add(s2.charAt(i));}//准备用StringBuilder进行拼接StringBuilder sb = new StringBuilder();for(int i = 0;i < s1.length();i++){//遍历每个字符//如果是true说明重复了,不拼接//如果是false,说明没有重复的直接拼接(空格等字符也可以)if(!list.contains(s1.charAt(i))){sb.append(s1.charAt(i));}}System.out.println(sb.toString());}
}