【发布时间】:2020-06-29 15:14:57
【问题描述】:
我尝试在 Android Studio(语言:Java)中模拟一场足球比赛。我生成 90 个随机数。每次迭代必须代表比赛的一分钟。 (但现在测试时只有一秒钟)。每播放一分钟(在本例中为秒)后,必须在应用程序中调整播放分钟数和可能的分数。我已经测试了许多可以在 Internet 上找到的解决方案,例如随处可见的 Thread 解决方案。但是,这并没有达到我预期的结果。
预期输出:从 0 分钟开始并以 0-0 比分开始的应用,每秒将播放分钟数增加 1,如果进球,还会调整比分。
实际输出:白屏显示代码中指定的毫秒数,然后是游戏的“最终结果”。例如:90' 2-1。
我已经尝试将try/catch 代码放在循环中的其他位置。我还用wait 替换了sleep。这总是产生相同的输出。谁能告诉我如何在屏幕上实时显示秒数,并且进球一落下,比分就会改变?
public void playLeagueMatch(Team team1, Team team2, TextView minuteTV,
TextView homeGoalsTV, TextView awayGoalsTV){
int strength1 = team1.strength;
int strength2 = team2.strength;
int minutesPlayed = 0;
double separation = Double.valueOf(strength1) / (Double.valueOf(strength1)+Double.valueOf(strength2)) * 100;
int homeGoals = 0;
int awayGoals = 0;
for (minutesPlayed = 0; minutesPlayed < 91; minutesPlayed++) {
String minuteName = Integer.toString(minutesPlayed);
minuteTV.setText(minuteName + "'");
int random = playMinute();
if(random < 101){
if(random <= separation){
homeGoals++;
homeGoalsTV.setText(Integer.toString(homeGoals));
}
else{
awayGoals++;
awayGoalsTV.setText(Integer.toString(awayGoals));
}
try{
Thread.sleep(1000);
}
catch(InterruptedException e) {
throw new RuntimeException(e);
}
}
}
}
playMinute 函数:
public int playMinute(){
Random ran = new Random();
int random = ran.nextInt(3500) + 1;
return random;
}
【问题讨论】:
-
Thread解决方案是什么,为什么它不起作用?那是你代码中的Thread.sleep()吗? -
当您在“playLeagueMatch”函数中等待时,绘制函数无法运行。匹配需要在单独的线程上运行。我可以推荐 AsyncTask。
-
@MaartenBodewes 是的,我的意思是 Thread 解决方案是 Thread.sleep()。或者 Thread.wait() 我也试过了。所以,实际上我只想每秒迭代一次 for 循环。现在它一次完成所有 90 次迭代
-
@KYL3R 我会看看 AsyncTask。感谢您的回复!
-
如果你不喜欢 AsyncTask,你可以简单地将 for 循环转换为普通函数并检查时间戳而不是使用睡眠。