日期:2014-05-20  浏览次数:20707 次

一个简单的java代码,求改错(本人java菜鸟)

public class circle //约瑟夫环
{
   

static class player//参与者类
{
String name;//参与者姓名
int list,count;//参与者号码和控制出局变量
player()
{
name="li";
list=l;
count=0;
}
}
public static void main(String[] args)
{
  player pr[]=new player[6];
for(int i=0;i<6;i++) //初始化
{
pr[i].name="name"+i;
pr[i].list=i;
pr[i].count=0;//用来判断该对象是否出局
}
int m=2;//第二个出局
int lengh=6;//一共6个人
int k=1;
int i=0;
while(lengh==m-1)
{
if(k==m && pr[i].count==1)
{
i=(i+1)%6;
}
else if(k==m&&pr[i].count==0)
{
pr[i].count=1;
System.out.println(pr[i].name);
k++;
i=(i+1)%6;
}
else
{
k++;
i=(i+1)%6;


}
}

}





}


------解决方案--------------------
Java code

class player// 参与者类
{
    String name;// 参与者姓名
    int list, count;// 参与者号码和控制出局变量

    player() {
        name = "li";
        list = 1;
        count = 0;
    }

    @Override
    public String toString() {

        return "Player:" + name + "," + list + "," + count;
    }

}

public class Circle // 约瑟夫环
{
    public static void main(String[] args) {
        player pr[] = { new player(), new player(), new player(), new player(),
                new player(), new player() };// 需要初始化数组中的6个player
        for (int i = 0; i < 6; i++) // 初始化
        {
            pr[i].name = "name" + (i+1);
            pr[i].list = i+1;
            pr[i].count = 0;// 用来判断该对象是否出局
            // System.out.println(pr[i]);
        }

        int i, j, n, m;
        m = 2;// 第二个出局
        n = 6;// 一共6个人
        if (n <= 0 || m <= 0) // 处理参数值不正确的情况
        {
            System.out.println("Paramter must bigger than zero!");
            return;
        }
        int k = 1; // 标识处理第k个离开的人
        i = -1; // 数组下标,下一个为0,即第一个人
        while (true) // k等于n表示只剩下一个人了
        {
            for (j = 0; j < m;) // 在圈中数m个人
            {
                i = (i + 1) % n;
                if (pr[i].count ==  0)
                    j++; // a[i] >0表示第i个人还没有离开
            }
            if (k == n)
                break;
            pr[i].count = 1; // 表示该人离开
            System.out.println("No." + pr[i] + " is out!");
            k++;
        }
        System.out.println("No." + pr[i] + " is the winner!");

        System.out.println("------end------");
        
    }
}

------解决方案--------------------
第一个问题pr[i].name=p[i].name+i; name为Player的属性应该对象名打点调用。
第二个问题数组没有初始化在for循环中应该将6个人的信息初始化即加上pr[i]=new Player();
第三个问题当有人数到2时此人出局所以所有人的总数length应该减一,即满足条件:if(k==m&&pr[i].count==0)时应该length--
第四个问题当报数由1数到2应该再从1数到2所以每当k++时应该判断k的值是否为3如果为3则k应赋值为1,即在所有k++后应加入if(k==3)if(k==3){k=1;}
修改后的代码为:


public class Player 
{
String name;//参与者姓名
int list,count;//参与者号码与控制出局变量
Player()
{
name="li";
list=1;
count=0;
}
public static void main(String args [])
{
Player [] pr=new Player[6];

for(int i=0;i<6;i++)
{
pr[i]=new Player();
pr[i].name=pr[i].name+i;
pr[i].list=i;
pr[i].count=0;//用来判断该对象是否出局
}
int m=2;//第二个出局
int length=6;//一共6个人
int k=1;
int i=0;
while(length!=m-1)
{

if(k==m && pr[i].count==1)
{
i=(i+1) % 6;

}
else if(k==m&&pr[i].count==0)
{
pr[i].count=1;