首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >数组超出范围的异常,Josephus

数组超出范围的异常,Josephus
EN

Stack Overflow用户
提问于 2014-09-04 14:36:14
回答 4查看 636关注 0票数 1

我似乎搞不懂我为什么老是犯这个错误!这是我第一次处理排队问题。我确信解决方案很简单,我可能遗漏了一些基本的东西。如有任何指导/帮助,将不胜感激:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import java.util.LinkedList;
import java.util.Queue;


public class Josephus{
  public static void main(String[] args)
    {
        int n = Integer.parseInt(args[0]),
            m = Integer.parseInt(args[1]);

        Queue<Integer> q = new LinkedList<Integer>();
    for (int i = 0; i < n; i++)
        q.remove(new Integer(i));

    int k = 0;
    while (!q.isEmpty())
    {
        int x = q.remove();

        if (++k % m == 0)
            System.out.print(x + " ");
        else
            q.remove(x);

    System.out.println(x + " ");
    }
    }
}

此代码的原始提示符如下: Josephus问题。在约瑟夫斯问题自古以来,N人处于困境,并同意以下战略,以减少人口。他们把自己安排成一个圆圈(从0到N1的位置),然后绕着圆圈转,消除每一个人,直到只剩下一个人。传说约瑟夫斯找到了避免被淘汰的位置。编写队列客户端Josephus,从命令行中提取N和M,并打印出人被清除的顺序(从而显示Josephus坐在圆圈中的位置)。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2014-09-04 14:58:01

你用错误的方式称呼你的程序..。如果使用命令行,则必须提供参数:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
java Josephus 5 6

否则,如果使用Eclipse (例如),则必须以“运行为”、“运行配置”和“程序参数”字段中添加一些参数。还可以用手动类型的值替换第一行:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
int n = 10, m = 5;

我使用(m,n)值的随机集运行它,它运行时没有任何错误(但是,它没有打印任何内容)。

票数 0
EN

Stack Overflow用户

发布于 2014-09-04 14:45:10

你有:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Queue<Integer> q = new LinkedList<Integer>();
for (int i = 0; i < n; i++)
    q.remove(new Integer(i));

为什么要从新创建的(空)队列中删除项?试着把它们加进去!

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
q.add(new Integer(i));
票数 0
EN

Stack Overflow用户

发布于 2014-09-04 14:46:27

Java认为您试图在while循环下if语句的else语句中调用remove(int index),因为您正在传递一个int。作为一项工作,做您在for循环中所做的事情。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
q.remove(new Integer(x));

另外,您需要确保用户在命令行中输入正确的参数。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
if (args.length != 2){
    System.out.println("Invalid arguments.");
    return;
}

int n = Integer.parseInt(args[0]),
    m = Integer.parseInt(args[1]);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25676019

复制
相关文章
C语言中数组超出范围,检测数组下标边界是否超出范围解决方案
iRows= iRsz; iColumns = iCsz; iCurrentRow = -1;
全栈程序员站长
2022/11/02
1.1K0
vue删除数组中某一元素_数组索引超出范围
在前端开发中,我们经常需要对数组进行操作,增删改是经常的事情,那我们js中该如何删除指定的下标元素呢????
全栈程序员站长
2022/09/22
1.8K0
vue删除数组中某一元素_数组索引超出范围
[DS]链表之约瑟夫环(Josephus)问题
原文链接:https://blog.csdn.net/humanking7/article/details/80786920
祥知道
2020/03/10
4840
BUG-索引超出范围
小心一点 System.ArgumentOutOfRangeException:“Index was out of range. Must be non-negative and less than the size of the collection.”
用户9857551
2022/06/28
1.4K0
BUG-索引超出范围
java 字符串数组 下标_运行时错误9:使用字符串数组时,下标超出范围「建议收藏」
我是vba脚本的新手 . 我正在尝试编写下面的函数,但无法成功完成 . 我真的很感激我能得到的任何帮助 .
全栈程序员站长
2022/11/02
1.4K0
《挑战30天C++入门极限》理解C++面向对象程序设计中的抽象理论
  为了更容易学习便于理解,我们的图例是以有两个小孩围成一圈,并且设置报数的数为1的情况来制作的。   上面的两种解决Josephus问题的解决办法从代码上来看,都属于一杆子到底的解法,第二种从结构表达上优于第一种,但是这两个都属于纯粹的过程式程序设计,程序虽然简短,但很难让人看懂,程序的可读性不高,在我们没有学习面向对象的编程之前,聪明的人可能会把各各步骤分解出来做成由几个函数来解决问题。   思路大致可以分为以下六个部分:   1.建立结构   2.初始化小孩总数,和数小孩的数   3.初始化链表并构成环链   4.开始通过循环数小孩获得得胜者   5.输出得胜者   6.返回堆内存空间   从表上看这个程序为了便于阅读可以写成六个函数来分别处理这六个过程,的确,这么修改过后程序的可读性是提高了一大步,但是有缺点仍然存在,程序完全暴露在外,任何人都可以修改程序,程序中的一些程序作者不希望使用者能够修改的对象暴露在外,各对象得不到任何的保护,不能保证程序在运行中不被意外修改,对于使用者来说还是需要具备解决Josephus问题算法的能力,一旦程序变的越来越很,,每一个参与开发的程序员都需要通读程序的所有部分,程序完全不具备黑盒效应,给多人的协作开发带来了很大的麻烦,几乎每个人都做了同样的重复劳动,这种为了解决一个分枝小问题写一个函数,最后由很多个解决局部问题的函数组合成的程序我们叫做结构化程序设计,结构化编程较过程化编程相比可读性是提高了,但程序不能轻易的被分割解决一个个大问题的模块,在主函数中使用他们的时候总是这个函数调用到那个函数,如果你并不是这些函数的作者就很难正确方便的使用这些函数,而且程序的变量重名问题带来的困扰也是很让人头痛的…… 那么面向对象的程序设计又是如何解决这些问题的呢?   面向对象的程序设计的思路是这样的:   程序 = 对象 + 对象 +对象..........   这么组合而来的   对于上面的josephus问题可以把问题分割成如下的方法进行设计(如下图所示)
landv
2019/07/15
3940
list强转数组抛异常-ClassCastException
toArray(new String[0]), 创建一个大小为0的数组,当为输入数组长度小于集合size时,toArray方法会自动创建一个等大数组放入数据并返回。 toArray(new String[100000]),同上输入的10w数组比集合size小,toArray方法会重新创建一个等大数组放入数据并返回,原来的10w数组等于白建了 toArray(new String[1000000]),输入数组长度与集合size相等,当是一个理想状态时,即数组size没有发生变化(比如没有并发情况),那么toArray方法会直接使用输入数组并返回,但如果在输入数组创建之后,原集合size发生了变化,最糟糕的情况会退化为#2 toArray(new String[2000000]),输入数组长度大于集合size,那么toArray方法会直接使用输入数组并返回,当然多出去的那部分数组量就算浪费了
用户1503405
2021/10/06
5080
约瑟夫环的解法
解法一:顺序表ArrayList import java.util.ArrayList; import java.util.Scanner; public class Josephproblem { //这是一个main方法,是程序的入口: public static void main(String[] args) { Scanner zs = new Scanner(System.in); //打印 System.out.print("
楠羽
2022/11/18
3720
Arrays工具类的使用与数组中的常见异常(一)
Arrays工具类提供了sort方法,用于对数组进行排序。该方法有两种重载形式:一个接受原始类型数组,另一个接受对象类型数组。这里我们以对象类型数组为例进行说明。
玖叁叁
2023/05/10
3350
Arrays工具类的使用与数组中的常见异常(二)
IndexOutOfBoundsException是一个运行时异常,当试图访问数组中不存在的索引时抛出。例如,当尝试访问一个空数组的第一个元素时,就会抛出IndexOutOfBoundsException。
玖叁叁
2023/05/10
3740
Python面试题目之列表取值超出范围
# 下面列表取值超出范围,会报错还是有返回值: L1 = ['1','2','3','4','5','6',] print(L1[10]) print(L1[10:]) 第一个打印会报错: 第二个打
Jetpropelledsnake21
2019/02/15
1K0
约瑟夫环问题
约瑟夫环是一个数学的应用问题:已知n个人(以编号0,2,3...n-1分别表示)围坐在一张圆桌周围。从编号为k的人开始报数,数到m的那个人出列;他的下一个人又从1开始报数,数到m的那个人又出列;依此规律重复下去,直到圆桌周围的人全部出列。 解决方案: 约瑟夫环有递归和非递归两种解决方案。 1. 非递归可用数组和循环链表来解决。下面给出用数组解决的源码:
卡尔曼和玻尔兹曼谁曼
2019/01/25
6480
【算法】约瑟夫环问题解析与实现
约瑟夫环(Josephus Problem)是一个经典的数学问题,涉及一个编号为 1 到 n 的人围成一圈,从第一个人开始报数,报到某个数字 m 的人出列,然后再从下一个人开始报数,如此循环,直到所有人都出列。本篇博客将详细解析约瑟夫环问题,并使用 Python 实现算法。
繁依Fanyi
2023/10/12
9970
约瑟夫环的三种解法
约瑟夫环(Josephus)问题是由古罗马的史学家约瑟夫(Josephus)提出的,他参加并记录了公元66—70年犹太人反抗罗马的起义。约瑟夫作为一个将军,设法守住了裘达伯特城达47天之久,在城市沦陷之后,他和40名死硬的将士在附近的一个洞穴中避难。在那里,这些叛乱者表决说“要投降毋宁死”。于是,约瑟夫建议每个人轮流杀死他旁边的人,而这个顺序是由抽签决定的。约瑟夫有预谋地抓到了最后一签,并且,作为洞穴中的两个幸存者之一,他说服了他原先的牺牲品一起投降了罗马。 约瑟夫环问题的具体描述是:设有编号为1,2,……,n的n(n>0)个人围成一个圈,从第1个人开始报数,报到m时停止报数,报m的人出圈,再从他的下一个人起重新报数,报到m时停止报数,报m的出圈,……,如此下去,直到所有人全部出圈为止。当任意给定n和m后,设计算法求n个人出圈的次序。
海天一树
2018/07/25
8.7K0
数据结构基础温故-1.线性表(下)
在上一篇中,我们了解了单链表与双链表,本次将单链表中终端结点的指针端由空指针改为指向头结点,就使整个单链表形成一个环,这种头尾相接的单链表称为单循环链表,简称循环链表(circular linked list)。
Edison Zhou
2018/08/20
4440
数据结构基础温故-1.线性表(下)
导入:什么是数据结构,为什么要学习数据结构,约瑟夫环的数组实现
我们不知道怎么造轮子,但是我们起码要知道轮子为什么是圆的。在读这篇文章的你估计在想,为什么会有数据结构这门课,为什么我要学数据结构?现在我解释你们也不会听进去,我简短说一句,如果你是想考研,数据结构必考,如果你想去好一点的公司,数据结构必考,所以以后你也不用再纠结为什么要学数据结构,数据结构有什么用,学就对了。 我们以一个问题引入数据结构基础,先看题目 约瑟夫问题: 在罗马人占领乔塔帕特后,39个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀
mathor
2018/06/22
9980
redis系列:通过队列案例学习list命令
这一篇文章将讲述Redis中的list类型命令,同样也是通过demo来讲述,其他部分这里就不在赘述了。
云枭
2018/08/16
1.5K0
经典算法之约瑟夫问题
据说著名犹太历史学家 Josephus有过以下的故事:在罗马人占领乔塔帕特后,39 个犹太人与Josephus及他的朋友躲到一个洞中,39个犹太人决定宁愿死也不要被敌人抓到,于是决定了一个自杀方式,41个人排成一个圆圈,由第1个人开始报数,每报数到第3人该人就必须自杀,然后再由下一个重新报数,直到所有人都自杀身亡为止。 然而Josephus 和他的朋友并不想遵从。首先从一个人开始,越过k-2个人(因为第一个人已经被越过),并杀掉第k个人。接着,再越过k-1个人,并杀掉第k个人。这个过程沿着圆圈一直进行,直到最终只剩下一个人留下,这个人就可以继续活着。问题是,给定了和,一开始要站在什么地方才能避免被处决?
用户3467126
2019/11/14
1.7K0
点击加载更多

相似问题

Josephus使用数组?

11

Josephus选举问题数组的实现

23

关于使用数组表示Josephus难题

10

索引数组超出范围异常

93

数组索引超出范围异常

30
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文