Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/328.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么单击按钮时该程序不循环?_Java_Android_Loops - Fatal编程技术网

Java 为什么单击按钮时该程序不循环?

Java 为什么单击按钮时该程序不循环?,java,android,loops,Java,Android,Loops,我在尝试循环我开发的程序的一部分时遇到问题。有9个不同颜色的随机字符串,以及相应字符串的9个随机颜色。例如,可能会显示红黄色。我有9种颜色的按钮,每次按下字符串所代表的颜色按钮时,用户的分数都会增加一分。我知道得分的效果很好,我已经测试过了,在最紧要的时候会得到一分。我的问题是,一旦按下一个彩色按钮,我打算输出一个新的随机彩色随机字符串。这不会发生,相同颜色的相同字符串仍保留在屏幕上。以下是相关代码: 我希望它能够在用户点击任何按钮时循环,无论是对还是错。提前感谢您的帮助。您的问题很让人困惑,但

我在尝试循环我开发的程序的一部分时遇到问题。有9个不同颜色的随机字符串,以及相应字符串的9个随机颜色。例如,可能会显示红黄色。我有9种颜色的按钮,每次按下字符串所代表的颜色按钮时,用户的分数都会增加一分。我知道得分的效果很好,我已经测试过了,在最紧要的时候会得到一分。我的问题是,一旦按下一个彩色按钮,我打算输出一个新的随机彩色随机字符串。这不会发生,相同颜色的相同字符串仍保留在屏幕上。以下是相关代码:


我希望它能够在用户点击任何按钮时循环,无论是对还是错。提前感谢您的帮助。

您的问题很让人困惑,但我想我理解您想要做什么

如果我没弄错的话

你有不同颜色的按钮 每个按钮都包含一个字符串,该字符串也采用随机颜色 您的问题:

如果用户单击一个按钮,该按钮的颜色对应于其文本的颜色,则您希望随机更改其两种颜色。那 不会发生。 此外,您似乎误解了GUI的基础知识,因此没有必要将代码封装在inifite循环中。Gui在单独的线程事件Dispacher线程中运行。只有当您关闭它时,它才会终止。以System.exit0为例。注意:更好的方法是设置defaultCloseOperation。 现在你要做的是。让我们以这个ActionListener为例:

 purpleButton.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (colorString[decider] == colorString[5]) {
                            score++;
                        }
                    }
                });
根本没有改变单词属性颜色的机制。 您要更改文字颜色:

purpleButton.setOnClickListener(new View.OnClickListener() {
                        @Override
                        public void onClick(View v) {
                            if (colorString[decider] == colorString[5]) {
                                score++;
                                changeTextColor();
                            }
                        }
                    });

private void changeTextColor(){
    int[] androidColors = getResources().getIntArray(R.array.androidcolors);
    int randomAndroidColor = androidColors[new Random().nextInt(androidColors.length)];
    this.word.setTextColor(randomAndroidColor);
}
通过提供这段代码片段,我希望您有一个全局属性词。如果要在每个按钮上显示一个单词,请创建一个新类,该类使用全局单词属性和上述方法扩展JButton。比如:

class ButtonWithLabel extends JButton{


    public ButtonWithLabel(ActionListener onClickListener, Color color, String text){
    this.setName(text);
    this.setForegroundColor(color)
    this.addActionListener(onClickListener);
    }

    public void changeLabel(Color color, String text){
    this.setName(text);
    this.setForegroundColor(color)
    }
}
我手头没有IDE,所以可能会有一些拼写错误。

如果是真的{

这是完全没有用的。它什么也不做。true将始终等于true,因此这不会影响您的程序。如果它完全优化了,我不会感到惊讶

你可能打算写

while (true) {

但是,既然你设法混淆了假设和假设这就是问题所在,我强烈建议你在进一步研究之前后退一步,回顾一下基础知识。确保你准确地理解假设和假设,而至少是这样做。

我不明白,没有循环?那么你希望发生什么?我在这里没有看到任何循环。你知道吗可能打算将所有这些代码放在一个循环中。程序不循环是因为……没有循环。你完全正确。请投赞成票,但我认为他的问题在其他地方。@Tomwellrock如果还有其他问题,我不会感到惊讶。不过,我主要是根据标题解释这个问题,这就是为什么我只关注这个问题循环方面。现在我通过后期编辑再次阅读了这个问题,他确实提到了你在回答中提到的内容。问题是,我在以前的程序中使用了iftrue,它工作得很好。我接受了你的建议,用whiletrue替换了它,它在循环下面的倒计时上给了我一个错误,这不是问题,因为我只是我的问题是,一旦用“while”替换“if”,每次我按下按钮时,应用程序都会崩溃,其中显示的程序在OP中带有代码,这是另一次点击按钮的一部分,该按钮将启动游戏。现在,我单击“starter”按钮,我的应用程序会在启动前冻结模拟器背靠背out@H3ll0您需要意识到,正如我所提到的,Ifrue什么都不做;永远。它永远不会导致循环。在您的其他程序中,您必须使用其他循环机制;显式或递归。您需要调试错误的确切原因。要回答您的主要问题,要循环,您需要包装所有这些循环中的代码。是的,原来另一个循环不是因为iftrue才起作用的,谢谢你的提醒。单个字符串显示在按钮上方的文本视图中,如果不清楚的话,很抱歉。按钮上没有文本。尽管如此,我还是为这两种情况提供了解决方案