如何解决Android中的For循环和随机问题?

时间:2019-12-24 12:18:38

标签: java android for-loop

PlayerData类

public class PlayerData{

    int id; // id means Player's order
    boolean isTeacher;

    public PlayerData() {

    }

    public void setID(int id) {
        this.id = id;
    }

    public void setTeacher() {
        isTeacher = true;
    }
}

单班

 public class Singleton {

    public int time;
    public int total; // number of total players
    public int teacher; // number of teachers
    public int student; // number of students

    public int count = 1;
    public String keyWord; // 
    ArrayList<PlayerData> playerArrayList = new ArrayList<PlayerData>();

    // method init creates Objects of players
    public void init() {
        for (int i = 1; i <= total; i++) {
            PlayerData player = new PlayerData();
            player.setID(i);  // set id
            playerArrayList.add(player); // add player Object to ArrayList
        }
    }

    public void JobSelection() {

        int a[] = new int[teacher]; // Make array to the number I will select
        Random r = new Random(); // Random Object
        PlayerData player = new PlayerData();
        for (int i = 0; i < teacher; i++)    // for loop to select Teachers 
        {
            a[i] = r.nextInt(total) + 1; //select a number from 1~total and Save in a[0]~a[total]
            for (int j = 0; j < i; j++) //for loop to avoid overlap
            {
                if (a[i] == a[j]) {
                    i--;
                }
            }

            if (a[i] == player.id) { 
                playerArrayList.get(player.id - 1).isTeacher = true;
            }
        }
    }

角色选择类

 public class RoleSelection extends AppCompatActivity {
    Singleton s1 = Singleton.getInstance();
    PlayerData player = new PlayerData();

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_role_selection07_03);

        TextView t1 = (TextView) findViewById(R.id.textJobConfirm);

        if (s1.playerArrayList.get(s1.player.id-1).isTeacher == true) {
            t1.setText(" You job is Teacher ");
        } else {
            t1.setText(" Your job is Student ");

我正在制作一款应用程序游戏,其工作仅包括教师和学生。 上面的代码显示了我的应用。

  1. 有一个具有数据和设置器的播放器类
  2. 有一个Singleton类,可将值保存在变量中,例如总计(球员总数),老师,学生等。 另外,Singleton类还具有创建播放器对象的ArrayList。
  3. 在Singleton类中,我做了2种方法:一种用于在ArrayList中创建对象,另一种用于向对象提供其工作。
  4. JobSelection方法正在尝试给每个玩家一个工作。例如,如果在游戏设置中选择的总玩家为10,而选择的教师为4,则我必须将10个游戏对象随机分配给4个教师任务。
  5. 给玩家一份工作之后,我在“角色选择”类中编写了代码,以考虑到玩家的工作而以不同的方式设置了setText。

我的logcat或应用程序中没有任何错误。 但是,我只收到“您的工作是学生”。我猜JobSelection方法效果不好。 所以我试图修复这些代码

 for (int i = 0; i < teacher; i++)    // for loop to select Teachers 
    {
        a[i] = r.nextInt(total) + 1; //select a number from 1~total and Save in a[0]~a[total]
        for (int j = 0; j < i; j++) //for loop to avoid overlap
        {
            if (a[i] == a[j]) {
                i--;
            }
        }

        if (a[i] == player.id) { 
            playerArrayList.get(player.id - 1).isTeacher = true;
        }
    }

但是我无法解决这些问题...

如果有人回答我如何分配工作并根据他们的工作看到不同的TextView,我将不胜感激。谢谢

1 个答案:

答案 0 :(得分:0)

我通过以下代码解决了这个问题:

  for (int i = 0; i < teacher; i++)    
    {
        a[i] = r.nextInt(total) + 1; 
        for (int j = 0; j < i; j++) 
        {
            if (a[i] == a[j]) {
                i--;
            }
        }

        if (playerArrayList.get(a[i] - 1).id == a[i]) { 
            playerArrayList.get(a[i] - 1).setTeacher();
        }

    }
}