成都网站建设设计

将想法与焦点和您一起共享

java约瑟夫问题代码 java实现约瑟夫环问题

JAVA中怎么用List实现约瑟夫问题,我只会用数组求、

这个是用集合类写的,建议你多用集合类少用数组,从整个Java的api上来看,对集合类的支持要好于数组

成都创新互联公司是一家专业提供平和企业网站建设,专注与成都网站制作、成都网站设计、H5场景定制、小程序制作等业务。10年已为平和众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

Josephus(1, 9, 5) 这个构造方法的意思 从第1个人开始报数,一共9个人,数到5的人出列

用了一个Iterator,不用也可以

List选用了LinkedLisk,用ArrayList或Vector也可以

没有仔细想,有问题再交流

import java.util.Iterator;

import java.util.LinkedList;

public class Main {

public static void main(String[] args) {

Josephus test = new Josephus(1, 9, 5);

for (Integer i : test) {

System.out.println(i);

}

}

}

class Josephus implements IterableInteger {

private LinkedListInteger stack;

private int first; //从第几个人开始

private int key; //数几个

private int capacity; //一共几个人

public Josephus(int first, int capacity, int key) {

this.first = first;

this.capacity = capacity;

this.key = key;

this.stack = new LinkedListInteger();

for (int i = 1; i = this.capacity; i++) {

this.stack.add(i);

}

for (int i = 0; i this.first - 1; i++) {

this.stack.add(this.stack.remove());

}

}

public Iterator iterator() {

return new Itr();

}

class Itr implements IteratorInteger {

public boolean hasNext() {

return !stack.isEmpty();

}

public Integer next() {

for (int i = 0; i key - 1; i++) {

stack.add(stack.remove());

}

return stack.remove();

}

public void remove() {

throw new UnsupportedOperationException("Not supported yet.");

}

}

}

Java中利用集合实现约瑟夫问题

你的iter=all.iterator();这句后少了iter.next(); 如果不指向一个元素那你的iter.remove(); 就不知道要删除那个元素了,所以获取新迭代器后要用next方法指定删除的是哪个,否则会抛出异常的。

for(int i=0;i3;i++){

 if(iter.hasNext())

 iter.next();

 else{

 iter=all.iterator();

 iter.next();

 }

 }

帮忙看下这个代码。约瑟夫环问题报错。一维数组的。

问题出在数组下表越界,但是我忘了约瑟夫环是怎么弄得了,具体讲就是j+i的值不能比你声明的数组a[12]还要大,刚才我试了下,在最内层的循环执行第2次时,j+i的值为13,产生了越界


分享名称:java约瑟夫问题代码 java实现约瑟夫环问题
标题链接:http://chengdu.cdxwcx.cn/article/ddidhgs.html