1、面向对象的主要特征
封装性:体现在对类的说明上。把一些数据、方法封装为一个整体,形成一个个独立的模块。用户在使用的时候只能够看到它的外部特性。
继承:子类可以继承父类的数据、方法。还可以在这基础上进行修改、扩充。
多态性:即不同的对象在接收同一消息时会产生不同的动作。
2、final关键字
final关键字的作用:
修饰类——此时这个类就不能被继承,同时这个类当中的所有成员方法会被隐式的指定为final方法。
修饰方法——这个方法就不能够被修改。(类当中的private方法会被隐式的指定为final方法)
修饰变量——如果这个变量是基本数据类型的话,那么它初始化之后就不能够被修改类;如果这个变量是引用类型的话,那么就不能够让其指向其他对象了。
注意的点:
虽然当变量是引用类型时不能够指向其他对象,但是其指向的对象的内容是可以改变的。
3、static关键字
static修饰的成员变量和成员方法可以通过类名直接访问。
4、编程题1
【组队竞赛】
牛牛举办了一次编程比赛,参加比赛的有3*n个选手,每个选手都有一个水平值a_i.现在要将这些选手进行组队,一共组成n个队伍,即每个队伍3人.牛牛发现 队伍的水平值等于该队伍队员中第二高水平值。
例如:
一个队伍三个队员的水平值分别是3,3,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是3,2,3.那么队伍的水平值是3
一个队伍三个队员的水平值分别是1,5,2.那么队伍的水平值是2
为了让比赛更有看点,牛牛想安排队伍使所有队伍的水平值总和最大
思路:
如果要寻找其中的第二高水平值,那么首先要对数组进行排序,这里就可以使用函数Arrays.sort()
接着便是考虑如何分组的问题。我们可以把第一个元素和倒数两个元素分为一组;依次进行分组。
那么在此基础上只需要找到每组第二高元素所在数组中的位置,并发现其规律;然后把这些第二高的元素相加即可。
具体编程如下:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int n = scanner.nextInt();
int[] a = new int[3*n];
long sum = 0;
//给数组添加元素
for (int i = 0; i < 3*n ; i++) {
a[i] = scanner.nextInt();
}
//对数组元素进行排序
Arrays.sort(a);
//对数组中元素进行分组,依次取第一个元素和最后两个元素构成一组。然后取其中第二高元素相加
for (int i = 0; i < n ; i++) {
//取第二高的元素可以根据以下公式
sum = sum + a[a.length-2*(i+1)];
}
System.out.println(sum);
}
}
5、编程题2
【删除公共字符】输入两个字符串,从第一字符串中删除第二个字符串中所有的字符。例如,输入”They are students.”和”aeiou”,则删除之后的第一个字符 串变成”Thy r stdnts.”
思路:
遍历两个字符串,寻找相同元素。找到就把第一个字符串中该元素置为""。
具体编程如下:
import java.util.Scanner;
public class Test {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String str1 = scanner.nextLine();
String str2 = scanner.nextLine();
//遍历字符串2
for (int i = 0; i < str2.length() ; i++) {
//遍历字符串1
for (int j = 0; j <str1.length() ; j++) {
//让字符串2的每一个元素与字符串1的每一个元素一一比较,相同把相应位置置为""
if (str2.charAt(i) == str1.charAt(j)) {
str1 = str1.replaceFirst(str1.charAt(j)+"","");
}
}
}
System.out.println(str1);
}
}