Day01:笔试题总结

目录

一,选择题

二,编程题

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());
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值