有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java项目一次执行所有操作

我正在做一个安卓simon says应用程序,我正在启动循环, 在这个例子中,我定义了它,所以它会点亮4种颜色,因为有数字点亮相应数字的数组有4个单元格长

不幸的是,它同时点亮了所有的颜色,你无法区分顺序,我试图弄清楚为什么会这样,以及我如何让它同时点亮一种颜色这是我的主要活动和java Cals的代码

以下是活动:

package com.gabie212.simonsays;

import 安卓.content.Context;
import 安卓.content.Intent;
import 安卓.support.v7.app.AppCompatActivity;
import 安卓.os.Bundle;
import 安卓.view.View;
import 安卓.widget.Button;
import 安卓.widget.Toast;

import java.util.ArrayList;

public class GameActivity extends AppCompatActivity implements View.OnClickListener {

    private int i = 0;
    private Thread t = new Thread();
    private Button greenButton;
    private Button redButton;
    private Button blueButton;
    private Button yellowButton;
    private Button startButton;

    private ArrayList<Integer> randomColors = new ArrayList<Integer>();
    private ArrayList<Integer> userColors = new ArrayList<Integer>();

    private GameManger gm;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        gm =  new GameManger(this);

        setContentView(R.layout.activity_game);
        greenButton = (Button) findViewById(R.id.btnGreen);
        redButton = (Button) findViewById(R.id.btnRed);
        blueButton = (Button) findViewById(R.id.btnBlue);
        yellowButton = (Button) findViewById(R.id.btnYellow);
        startButton = (Button) findViewById(R.id.btnStart);
        startButton.setOnClickListener(this);
        greenButton.setOnClickListener(this);
        redButton.setOnClickListener(this);
        blueButton.setOnClickListener(this);
        yellowButton.setOnClickListener(this);





    }

    @Override
    public void onClick(View v) {

        int num;
        for (i=0;i<3;i++) {
            num = gm.getColor(4);
            randomColors.add(num);
        }
        安卓.os.Handler handler = new 安卓.os.Handler();
        //TODO if the start button is pressed multiple times simultaneously it starts the lightup loop multiple times simultaneously
        if (v.getId() == startButton.getId()) {

            for (i = 0; i < randomColors.size(); i++) //light up loop
            {
                switch (randomColors.get(i)) {
                    case 1:
                        greenButton.setBackgroundResource(R.drawable.greenlightup);

                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                greenButton.setBackgroundResource(R.drawable.green);
                            }
                        }, 2000);


                        break;
                    case 2:
                        redButton.setBackgroundResource(R.drawable.redlightup);
                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                redButton.setBackgroundResource(R.drawable.red);
                            }
                        }, 2000);


                        break;
                    case 3:
                        blueButton.setBackgroundResource(R.drawable.bluelightup);
                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                blueButton.setBackgroundResource(R.drawable.blue);
                            }
                        }, 2000);


                        break;
                    case 4:
                        yellowButton.setBackgroundResource(R.drawable.yellowlightup);
                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                yellowButton.setBackgroundResource(R.drawable.yellow);
                            }
                        }, 2000);


                        break;
                }



            }
           /*
            for(i=0;i<randomColors.size();i++)
            {

                if(v.getId()==greenButton.getId())
                {
                    userColors.add(1);
                }
                else
                {
                    if(v.getId()==redButton.getId()){
                        userColors.add(2);
                    }
                    else
                    {
                        if(v.getId()==blueButton.getId())
                        {
                            userColors.add(3);
                        }
                        else
                        {
                            userColors.add(4);
                        }
                    }


                }


            }

            for(i=0;i<randomColors.size();i++)
            {
                if(randomColors.get(i) != userColors.get(i))
                {

                    Intent i = new Intent( GameActivity.this, GameOverActivity.class);
                    startActivity(i);

                }
            }
            */


        }

    }
}

这是java类:

package com.gabie212.simonsays;

import java.util.Random;

/**
 * Created by Ronit on 21/02/2018.
 */

public class GameManger {

    private GameActivity gActivity;
    static Random rnd = new Random();


    public GameManger(GameActivity mA)
    {

        this.gActivity =mA;
    }

    public int getColor(int size)
    {

        return rnd.nextInt(4)+1;
    }
}

我遇到的问题是这一部分:

 int num;
        for (i=0;i<3;i++) {
            num = gm.getColor(4);
            randomColors.add(num);
        }
        安卓.os.Handler handler = new 安卓.os.Handler();
        //TODO if the start button is pressed multiple times simultaneously it starts the lightup loop multiple times simultaneously
        if (v.getId() == startButton.getId()) {

            for (i = 0; i < randomColors.size(); i++) //light up loop
            {
                switch (randomColors.get(i)) {
                    case 1:
                        greenButton.setBackgroundResource(R.drawable.greenlightup);

                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                greenButton.setBackgroundResource(R.drawable.green);
                            }
                        }, 2000);


                        break;
                    case 2:
                        redButton.setBackgroundResource(R.drawable.redlightup);
                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                redButton.setBackgroundResource(R.drawable.red);
                            }
                        }, 2000);


                        break;
                    case 3:
                        blueButton.setBackgroundResource(R.drawable.bluelightup);
                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                blueButton.setBackgroundResource(R.drawable.blue);
                            }
                        }, 2000);


                        break;
                    case 4:
                        yellowButton.setBackgroundResource(R.drawable.yellowlightup);
                        handler.postDelayed(new Runnable() {

                            @Override
                            public void run() {
                                // TODO Auto-generated method stub
                                yellowButton.setBackgroundResource(R.drawable.yellow);
                            }
                        }, 2000);


                        break;
                }

正如我提到的,它一次点亮4个按钮,而不是按顺序点亮,我使用的睡眠功能不起作用,我使用的延迟磨似乎也不起作用,我如何使它按顺序点亮颜色(我认为它使用睡眠功能,但我不确定)


共 (1) 个答案

  1. # 1 楼答案

    我认为问题在于,您要同时启动多个协程(在for循环中)。我猜您对Runnable接口不是很熟悉:每次运行Runnable时,它都与主进程并行运行,这意味着无论发生什么,代码都会继续运行

    它运行

    greenButton.setBackgroundResource(R.drawable.greenlightup);
    

    并设置一个计时器来运行延迟方法。但是当这个方法在等待时,等待循环继续进行

    redButton.setBackgroundResource(R.drawable.redlightup);
    

    被执行等等。这就是为什么你的按钮(几乎)同时被涂上颜色。你延迟的方法几乎同时开火