当前位置: 代码迷 >> J2ME >> 一个简单的java代码,求改错(本人java初学者)
  详细解决方案

一个简单的java代码,求改错(本人java初学者)

热度:6374   发布时间:2013-02-25 21:33:16.0
一个简单的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;
  相关解决方案