选择题纠错:
A. java.io.Serializable 表示序列化,是一个空接口,也就是说这个接口没有声明任何的方法,所以实现这个接口的类也不需要实现任何方法。
B. java.lang.Cloneable 是一个"标记接口",内部无任何方法、变量.
用于标记"可克隆的java对象",表示当前对象可重写Object.clone()
C. 1.CharSequence类是java.lang包下的一个接口,此接口对多种不同的对char访问的统一接口,像String、StringBuffer、StringBuilder类都是CharSequence的子接口;
2.CharSequence类和String类都可以定义字符串,但是String定义的字符串只能读,CharSequence定义的字符串是可读可写的;
3.对于抽象类或者接口来说不可以直接使用new的方式创建对象,但是可以直接给它的实例赋值;
例如:CharSequence cs = “a”;
4.CharSequence 接口中重新定义了 toString()方法,表示实现它的类必须重写该方法。
D.Comparable接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序, 类的 compareTo 方法被称为它的自然比较方法。
面向对象的主要特征:封装,继承,多态
结构化程序设计原则:自顶向下,模块化,逐步求精
A. i 属于成员变量,通过对象的引用来访问是可以的
C. A 是类名,类名去访问方法,除非这个方法是静态方法(非静态变量或非静态方法无法通过类名直接调用)
D. static 关键字修饰的变量或者方法可以通过类名直接调用
编程题:
思路:队伍的水平值等于该队伍队员中的第二高水平值,为了所有队伍的水平值总和最大的解法,也就是说每个队伍的第二个值是尽可能大的值。
所以我们可以先将输入的一组数进行排序
eg1 : 5 2 8 5 1 5 排序后 1 2 5 5 5 8
所以可以取最小的和最大的和次大的为一组 1 5 8 此时保证该组第二值尽可能大
剩下的 2 5 5分为一组
此时水平值总和的最大值就是 5 + 5 = 10
eg2: 9 7 6 8 2 1 3 4 5 排序后 1 2 3 4 5 6 7 8 9
所以第一组为 1 8 9 (取排序后最小值,最大值和次大值) 水平值为 8
第二组 为 2 6 7 (同第一组取法) 水平值为 6
第三组 为 3 4 5 水平值为4
此时水平值总和最大值为 8 + 6 + 4 = 18
代码如何实现,此时需要找关系:
eg1 中 1 2 5 5 5 8
看为数组则下标是 1 2 5 5 5 8
[0] [1] [2] [3] [4] [5]
第一组 1 5 8 此时队伍水平值 5 的下标是 [4]
[0] [4] [5]
第二组 2 5 5 此时队伍水平值 5 的下标是 [2]
[1] [2] [3]
此时输入的 n = 2;
所以下标关系是 arr.length - 2 * (i + 1) i 的取值是 [0,n)
验证 : i = 0 时 下标是 6 - 2 *(0 + 1) = 4
i = 1 时 下标是 6 - 2 * (1 + 1) = 2
eg2 中:1 2 3 4 5 6 7 8 9
n = 3
arr.length = 9
下标关系是 arr.length - 2 * (i + 1) i 的取值是 [0,n)
第一组 1 8 9 队伍水平值 8 的下标是 [7]
第二组 2 6 7 队伍水平值 6 的下标是 [5]
第三组 3 4 5 队伍水平值 4 的下标是 [3]
带公式验证
i = 0 时 下标为 9 - 2 * (0 + 1) = 7
i = 1 时 下标为 9 - 2 * (1 + 1) = 5
i = 0 时 下标为 9 - 2 * (2 + 1) = 3
代码如下:
思路:将字符串中的字符截取出来 利用 split()方法,然后用 contains() 方法进行比较,如果输入的第二个字符串中包含有第一个字符串中的字符,就舍弃掉,如果不包含,则使用 StringBuilder 的 append() 方法进行拼接!
补充:contains() 方法 : 如果字符串中包含相等的字符串或者字符时 返回 true.
eg: String s1 = "hello world";
String s2 = "llo";
String s3 = "what"
boolean b = s1.contains(s2);
boolean c = s1.contains(s2);
则输出 b 为 true , c 为 false
代码实现: