各位大大,帮我看看这个程序吧....写的是一个圈里围着很多小孩子,大家报数,数到3就退出圈子,然后下一个重新开始数,一直到只剩最后一个返回这个小孩的编号.
通过参数指定总人数和数到几退出 我写的代码在下面,然而总是最后一个退出,而且退出N多次,不知道哪里错了麻烦各位帮小弟解答以下 拜谢!
小弟新手!public class CountNQuit{
public static void main(String[] args){
if(args.length != 2){
System.out.println("请输入两个参数以指定小孩的总数和需要数到\"几\"退出的数字!");
System.exit(-1);
} else {
Circle cc = new Circle(Integer.parseInt(args[0]));
int countNum = 0;
Kid k = cc.first;
while (cc.count > 1){
countNum ++;
if(countNum == Integer.parseInt(args[1])){
countNum = 0;
cc.delete(k);
System.out.print(k.id+" ");
}
k = k.right;
}
System.out.println("\n剩下的最后一位是:第"+cc.first.id+"位小孩!");
}
}
}class Kid{
int id;
Kid right;
Kid left;
}class Circle{
int count = 0 ;
Kid first;
Kid last;
Circle (int n){
for(int i=0;i<n;i++){
add();
}
}
void add(){
Kid k = new Kid();
k.id = count + 1;
if(count <= 0){
first = k;
last = k;
k.left = k;
k.right = k;
}else{
last.right = k;
k.left = last;
k.right = first;
first.left = k;
k = last;
}
count ++ ;
}
void delete(Kid k){
if(count <= 0){
System.out.println("没有小孩在圈中,无法删除!");
return;
} else if(count == 1){
first = last = null;
} else {
k.left.right = k.right;
k.right.left = k.left;
if(k == first){
first = k.right;
} else if(k == last){
last = k.left;
}
}
count -- ;
}
}
运行结果:
通过参数指定总人数和数到几退出 我写的代码在下面,然而总是最后一个退出,而且退出N多次,不知道哪里错了麻烦各位帮小弟解答以下 拜谢!
小弟新手!public class CountNQuit{
public static void main(String[] args){
if(args.length != 2){
System.out.println("请输入两个参数以指定小孩的总数和需要数到\"几\"退出的数字!");
System.exit(-1);
} else {
Circle cc = new Circle(Integer.parseInt(args[0]));
int countNum = 0;
Kid k = cc.first;
while (cc.count > 1){
countNum ++;
if(countNum == Integer.parseInt(args[1])){
countNum = 0;
cc.delete(k);
System.out.print(k.id+" ");
}
k = k.right;
}
System.out.println("\n剩下的最后一位是:第"+cc.first.id+"位小孩!");
}
}
}class Kid{
int id;
Kid right;
Kid left;
}class Circle{
int count = 0 ;
Kid first;
Kid last;
Circle (int n){
for(int i=0;i<n;i++){
add();
}
}
void add(){
Kid k = new Kid();
k.id = count + 1;
if(count <= 0){
first = k;
last = k;
k.left = k;
k.right = k;
}else{
last.right = k;
k.left = last;
k.right = first;
first.left = k;
k = last;
}
count ++ ;
}
void delete(Kid k){
if(count <= 0){
System.out.println("没有小孩在圈中,无法删除!");
return;
} else if(count == 1){
first = last = null;
} else {
k.left.right = k.right;
k.right.left = k.left;
if(k == first){
first = k.right;
} else if(k == last){
last = k.left;
}
}
count -- ;
}
}
运行结果:
package day0331;
class Pig{
private int no;
private Pig left;
private Pig right;
//猪的编号
public Pig(int no){
this.no=no;
}
public Pig getLeft() {
return left;
}
public void setLeft(Pig left) {
this.left = left;
}
public int getNo() {
return no;
}
public void setNo(int no) {
this.no = no;
}
public Pig getRight() {
return right;
}
public void setRight(Pig right) {
this.right = right;
}
}
class PigCircle{
private int pigNum;
private Pig[] pigs;
public PigCircle(int pigNum){
this.pigNum=pigNum;
pigs=new Pig[pigNum];
createPigCircle();
}
//创建一个猪圈
private void createPigCircle(){
//创建pigNum头猪
for(int i=0;i<pigNum;i++)
pigs[i]=new Pig(i+1);
//构造猪圈
for(int i=0;i<pigNum;i++){
if(i==0){//第一头猪
pigs[i].setLeft(pigs[i+1]);
pigs[i].setRight(pigs[pigNum-1]);
}else if(i==pigNum-1){//尾猪
pigs[i].setLeft(pigs[0]);//第一头猪
pigs[i].setRight(pigs[i-1]);
}else{//其他的猪
pigs[i].setLeft(pigs[i+1]);
pigs[i].setRight(pigs[i-1]);
}
}
}
//删除一头猪
public void deletePig(int index){
//被删除的猪的右手那个猪的左边设置成被删除的猪的左边
pigs[index].getRight().//
setLeft(pigs[index].getLeft());
pigs[index].getLeft().setRight(pigs[index].getRight());
pigs[index].setLeft(null);
pigs[index].setRight(null);
pigs[index]=null;
}
//数三退一
public void Number3Quit1(){
int leftPigNum=pigNum;//剩下猪的数目
int count=1;
int index=0;
while(true){
if(leftPigNum==1) break;
if(index==pigNum) index=0;
if(pigs[index]!=null){
if(count==3){
deletePig(index);
count=0;
leftPigNum--;
}
count++;
}
index++;//不停的数着
}
}
//打印出最后剩下的猪
public void printLastLeftPig(){
for(int i=0;i<pigNum;i++){
if(pigs[i]!=null){
System.out.println("最后剩下第"+pigs[i].getNo());
}
}
}
public int getPigNum() {
return pigNum;
}
public void setPigNum(int pigNum) {
this.pigNum = pigNum;
}
public Pig[] getPigs() {
return pigs;
}
public void setPigs(Pig[] pigs) {
this.pigs = pigs;
}
}
public class While3Quit1{
public static void main(String[] args) {
PigCircle pc=new PigCircle(3);
pc.Number3Quit1();
pc.printLastLeftPig();
}}