Day09 习题、抽象类
习题2、喊3出局
1,2,3,4,5,6,7,8,9,10
比如有10个人,围成一圈,依次报数,数到3,就退出,接着从1开始数
依次循环,最后留下2个人,问这两个人是谁
问 有1000个人,喊3,最后留下的2个人是谁
1 数组存储
2 模拟数组删除功能(比如删除2,2后元素向前移动)
3 额外变量,保存数组中元素个数,每删除一个,变量-1
-
@author 浩臣哥哥
-
@Date 2021年4月6日
*/
public class Test01 {
public static void main(String[] args) {
int[] nums = new int[10];
for (int i = 0; i < nums.length; i++) {
nums[i] = i + 1;
}
test(nums);
for (int i = 0; i < 2; i++) {
System.out.println(nums[i]);
}
}public static void test(int[] nums) {
// 4,10
// 已有元素个数,如果删除元素,length是不变的,而size就要 -1
int size = nums.length;
// 默认第一位喊1
int index = 0;
while (size > 2) {
// 喊2
index++;
if (index >= size) {
// 如果index++ 大于等于总人数,说明最后一个人喊得是 1,那么2 就应该是第一个人喊
index = 0;
}
// 喊3
index++;
if (index >= size) {
// 同上 最后一个人 喊得是2
index = 0;
}
// 1,2,4,5
// 删除 index 对应的数据
size = reomve(nums, size, index);if (index >= size) { // 删除之后,后面元素向前移动一位 // 如果删除的是最后一个元素的话,应该第一个元素喊1,所以index = 0 // 如果当前删除的不是最后一个元素,后面元素都需要向前移动一位,所以 我们的index就等于喊1,下次循环直接 index++ // 喊2 index = 0; } }
}
/**
- 删除数组中数据,返回已有元素个数
- @param nums
-
数组
- @param size
-
数组中元素个数
- @param index
-
删除的索引
- @return
*/
private static int reomve(int[] nums, int size, int index) {
for (int i = index; i < size - 1; i++) {
nums[i] = nums[i + 1];
}
return size - 1;
}
}
2.1、抽象类
第一:抽象类怎么定义?在class前添加abstract关键字就行了。
第二:抽象类是无法实例化的,无法创建对象的,所以抽象类是用来被子类继承的。
第三:final和abstract不能联合使用,这两个关键字是对立的。
第四:抽象类的子类可以是抽象类。也可以是非抽象类。
第五:抽象类虽然无法实例化,但是抽象类有构造方法,这个构造方法是供子类使用的。
第六:抽象类中不一定有抽象方法,抽象方法必须出现在抽象类中。
第七:抽象方法怎么定义?
public abstract void doSome();
第八(*****五颗星):一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。