Java 为什么单击按钮时该程序不循环?
我在尝试循环我开发的程序的一部分时遇到问题。有9个不同颜色的随机字符串,以及相应字符串的9个随机颜色。例如,可能会显示红黄色。我有9种颜色的按钮,每次按下字符串所代表的颜色按钮时,用户的分数都会增加一分。我知道得分的效果很好,我已经测试过了,在最紧要的时候会得到一分。我的问题是,一旦按下一个彩色按钮,我打算输出一个新的随机彩色随机字符串。这不会发生,相同颜色的相同字符串仍保留在屏幕上。以下是相关代码:Java 为什么单击按钮时该程序不循环?,java,android,loops,Java,Android,Loops,我在尝试循环我开发的程序的一部分时遇到问题。有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才起作用的,谢谢你的提醒。单个字符串显示在按钮上方的文本视图中,如果不清楚的话,很抱歉。按钮上没有文本。尽管如此,我还是为这两种情况提供了解决方案