求教,循环取间隔数的问题?

xiaotqc0000 2020-07-07 04:57:10
现有一个list集合,list里存有10个数,设置一个起始点,一个间隔数,总共取几个数,如已取到的数就跳过取这个数的下一个数,取到结尾时从头开始循环取。
请问有大神知道怎么写么。

例如:
list(1到36),起始点是28(该数算录取),间隔数为8,总共取10个数。
结果28,1,10,19......这样

间隔数的意思是隔几个数
...全文
8867 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
YangjulongTrue 2020-07-31
  • 打赏
  • 举报
回复
引用 6 楼 xiaotqc0000 的回复:
[quote=引用 2 楼 似水流年风萧兮 的回复:]https://blog.csdn.net/mr_zql/article/details/104333466

客户需要又改了,如某个数取到,在计算间隔时该数就跳过了, 也就是说,取过的数,不在参与间隔数的计算。原始算法:长度19,间隔数2,取10个数,结果为[1, 4, 7, 10, 13, 16, 19, 3, 6, 9],现在结果为[1, 4, 7, 10, 13, 16, 19, 3, 8, 11] 因为4、7已经取过[/quote]
我看你发了好几次这个帖子了 ??? 我不明白 你什么意思 是写的有问题还是怎么了啊????????????从2月到7月了
YangjulongTrue 2020-07-31
  • 打赏
  • 举报
回复
 List<Integer> nums=new ArrayList<Integer>();
for (int i = 1; i < 11; i++) {
nums.add(i);
}
int index=4,step=2;
while(nums.size()>step) {
for (int i = 0; i < nums.size(); i++) {
System.out.println(nums.get(index));
nums.remove(index);
index=(index+step)%nums.size();
}
}
约瑟夫环呗 通过取模运算来拿值
xiaotqc0000 2020-07-30
  • 打赏
  • 举报
回复
引用 2 楼 似水流年风萧兮 的回复:
https://blog.csdn.net/mr_zql/article/details/104333466
客户需要又改了,如某个数取到,在计算间隔时该数就跳过了, 也就是说,取过的数,不在参与间隔数的计算。原始算法:长度19,间隔数2,取10个数,结果为[1, 4, 7, 10, 13, 16, 19, 3, 6, 9],现在结果为[1, 4, 7, 10, 13, 16, 19, 3, 8, 11] 因为4、7已经取过
梦在明月 2020-07-08
  • 打赏
  • 举报
回复
不排序的情况下修改个bug

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;

import org.apache.commons.collections.CollectionUtils;

public class Test {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(42);
        list.add(12);
        for (int i = 0; i < 37; i++) {
            list.add(i);
        }
        List<Integer> result = gogo(list, 6, 5, 10);
        System.out.println(JSON.toJSONString(result));
    }

    public static List<Integer> gogo(List<Integer> list, int startNum, int interval, int total) {
        if (CollectionUtils.isEmpty(list) || total == 0) {
            return null;
        }
        //不排序
        List<Integer> sortedList =list;
        int size = sortedList.size();

        List<Integer> result = new ArrayList<>();
        if (sortedList.contains(startNum)) {
            result.add(startNum);
        } else {
            return null;
        }

        int i = 0;
        int startNumIndex = -1; //第一个数字的下标
        int nextNum = startNum + (interval + 1);
        for (; ; ) {
            if (result.size() == total) {
                break;
            }
            if (i == size) {
                i = 0;
            }
            Integer integer = sortedList.get(i);

            if (integer == null) {
                i++;
                continue;
            }
            if (integer == startNum && startNumIndex == -1) {
                startNumIndex = i;
                nextNum = startNum + (interval + 1);
                i++;
                continue;
            }
            if (integer == nextNum) {
                result.add(integer);
                nextNum += (interval + 1);
                if(startNumIndex == -1){
                    startNumIndex = i;
                }
                i++;
                continue;
            }

            if (i == startNumIndex) {
                //循环一圈了没发现下一个满足的数字了 终止
                break;
            }
            i++;
        }
        return result;
    }

}
梦在明月 2020-07-08
  • 打赏
  • 举报
回复
不排序也可以实现

import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;

import org.apache.commons.collections.CollectionUtils;

public class Test {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(42);
        for (int i = 0; i < 37; i++) {
            list.add(i);
        }
        List<Integer> result = gogo(list, 6, 5, 10);
        System.out.println(JSON.toJSONString(result));
    }

    public static List<Integer> gogo(List<Integer> list, int startNum, int interval, int total) {
        if (CollectionUtils.isEmpty(list) || total == 0) {
            return null;
        }
        //不排序
        List<Integer> sortedList =list;
        int size = sortedList.size();

        List<Integer> result = new ArrayList<>();
        if (sortedList.contains(startNum)) {
            result.add(startNum);
        } else {
            return null;
        }

        int i = 0;
        int startNumIndex = -1; //第一个数字的下标
        int nextNum = startNum + (interval + 1);
        for (; ; ) {
            if (result.size() == total) {
                break;
            }
            if (i == size) {
                i = 0;
            }
            Integer integer = sortedList.get(i);

            if (integer == null) {
                i++;
                continue;
            }
            if (integer == startNum && startNumIndex == -1) {
                startNumIndex = i;
                nextNum = startNum + (interval + 1);
                i++;
                continue;
            }
            if (integer == nextNum) {
                result.add(integer);
                nextNum += (interval + 1);
                i++;
                continue;
            }

            if (i == startNumIndex) {
                //循环一圈了没发现下一个满足的数字了 终止
                break;
            }
            i++;
        }
        return result;
    }

}
梦在明月 2020-07-08
  • 打赏
  • 举报
回复

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

import com.alibaba.fastjson.JSON;

import org.apache.commons.collections.CollectionUtils;

public class Test {

    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        for (int i = 0; i < 37; i++) {
            list.add(i);
        }
        List<Integer> result = gogo(list, 6, 5, 10);
        System.out.println(JSON.toJSONString(result));
    }

    public static List<Integer> gogo(List<Integer> list, int startNum, int interval, int total) {
        if (CollectionUtils.isEmpty(list) || total == 0) {
            return null;
        }
        //先排序
        List<Integer> sortedList = list.stream().sorted().collect(Collectors.toList());
        int size = sortedList.size();

        List<Integer> result = new ArrayList<>();
        if (sortedList.contains(startNum)) {
            result.add(startNum);
        } else {
            return null;
        }

        int i = 0;
        int startNumIndex = -1; //第一个数字的下标
        int nextNum = startNum + (interval + 1);
        for (; ; ) {
            if (result.size() == total) {
                break;
            }
            if (i == size) {
                i = 0;
            }
            Integer integer = sortedList.get(i);

            if (integer == null) {
                i++;
                continue;
            }
            if (integer == startNum && startNumIndex == -1) {
                startNumIndex = i;
                nextNum = startNum + (interval + 1);
                i++;
                continue;
            }
            if (integer == nextNum) {
                result.add(integer);
                nextNum += (interval + 1);
                i++;
                continue;
            }

            if (i == startNumIndex) {
                //循环一圈了没发现下一个满足的数字了 终止
                break;
            }
            i++;
        }
        return result;
    }

}
winner245 2020-07-07
  • 打赏
  • 举报
回复
索引从起始值开始每次递增9,并将结果与list长度 list.size() 求余,求余的结果作为最终的索引从list里取数据

50,528

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧