当前位置: 代码迷 >> J2SE >> 求大神告知异常,程序编译无有关问题,就是结果不对。数三退一有关问题。万分感谢
  详细解决方案

求大神告知异常,程序编译无有关问题,就是结果不对。数三退一有关问题。万分感谢

热度:101   发布时间:2016-04-23 20:28:51.0
求大神告知错误,程序编译无问题,就是结果不对。数三退一问题。万分感谢。
class Count3Quit2
{
public static void main(String[]args)
{
KidCircle kc=new KidCircle(500);
int countNum=0;
Kid k=kc.first;
while(kc.count>1)
{
countNum++;
if(countNum==3)
{
countNum=0;
kc.delete(k);
  }
  k=k.right;
  }
System.out.println(kc.first.id);
}
}
class Kid
{
int id;
Kid right;
Kid left;
}

class KidCircle
{
int count=0;
Kid first,last;
KidCircle(int n)
{
for(int i=0;i<n;i++)
{
add();
}
}

void add()
{
Kid k=new Kid();
k.id=count;
if(count<=0)
{
first=k;
last=k;
k.right=k;
k.left=k;
}
else 
{
k.left=last;
k.right=first;
last.right=k;
first.left=k;
k=last;

}
count++;
}
void delete(Kid k)
{
if(count<=0)
{
return;
}
else if(count==1)
{
last=first=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--;
}

}
------解决方案--------------------


public class Count3Quit2 {

public static void main(String[] args) {
int kids = 500;
int quiteNum = 3;

boolean[] quiteFlag = new boolean[kids];
for (int i = 0; i < quiteFlag.length; i++) {
quiteFlag[i] = false;
}

int pos = -1;
for (int i = 0; i < 500; i++) {
for (int j = 0; j < quiteNum; j++) {
while (true) {
pos++;
if (pos >= kids) {
pos = 0;
}
if (!quiteFlag[pos]) {
break;
}

}
}
quiteFlag[pos] = true;
System.out.printf("第%d次第%d个小孩退出\n", i + 1, pos + 1);
}
}
}




这是我写的一个程序,直接用一个标志数组和循环来实现的,没搞你那么多类和方法。
------解决方案--------------------
不好意思,改了一下


public class Count3Quit2 {

public static void main(String[] args) {
int kids = 500;
int quiteNum = 3;

boolean[] quiteFlag = new boolean[kids];
for (int i = 0; i < quiteFlag.length; i++) {
quiteFlag[i] = false;
}

int pos = -1;
for (int i = 0; i < kids; i++) {
for (int j = 0; j < quiteNum; j++) {
while (true) {
pos++;
if (pos >= kids) {
pos = 0;
}
if (!quiteFlag[pos]) {
break;
}

}
}
quiteFlag[pos] = true;
System.out.printf("第%d次第%d个小孩退出\n", i + 1, pos + 1);
}
}
}



for循环中写了一个500的常量,实际应该用kids。
  相关解决方案