2021-04-06

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();
      第八(*****五颗星):一个非抽象的类,继承抽象类,必须将抽象类中的抽象方法进行覆盖/重写/实现。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值