這個(gè)是用集合類寫的,建議你多用集合類少用數(shù)組,從整個(gè)Java的api上來看,對集合類的支持要好于數(shù)組
成都創(chuàng)新互聯(lián)公司是一家專業(yè)提供平和企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站制作、成都網(wǎng)站設(shè)計(jì)、H5場景定制、小程序制作等業(yè)務(wù)。10年已為平和眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)站制作公司優(yōu)惠進(jìn)行中。
Josephus(1, 9, 5) 這個(gè)構(gòu)造方法的意思 從第1個(gè)人開始報(bào)數(shù),一共9個(gè)人,數(shù)到5的人出列
用了一個(gè)Iterator,不用也可以
List選用了LinkedLisk,用ArrayList或Vector也可以
沒有仔細(xì)想,有問題再交流
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; //從第幾個(gè)人開始
private int key; //數(shù)幾個(gè)
private int capacity; //一共幾個(gè)人
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.");
}
}
}
你的iter=all.iterator();這句后少了iter.next(); 如果不指向一個(gè)元素那你的iter.remove(); 就不知道要?jiǎng)h除那個(gè)元素了,所以獲取新迭代器后要用next方法指定刪除的是哪個(gè),否則會拋出異常的。
for(int?i=0;i3;i++){
?if(iter.hasNext())
?iter.next();
?else{
?iter=all.iterator();
?iter.next();
?}
?}
問題出在數(shù)組下表越界,但是我忘了約瑟夫環(huán)是怎么弄得了,具體講就是j+i的值不能比你聲明的數(shù)組a[12]還要大,剛才我試了下,在最內(nèi)層的循環(huán)執(zhí)行第2次時(shí),j+i的值為13,產(chǎn)生了越界