Próbuję zasymulować mecz piłki nożnej w Android Studio (język: Java). Generuję 90 liczb losowych. Każda iteracja musi odpowiadać jednej minucie meczu. (Ale teraz jest to tylko jedna sekunda podczas testowania). Po każdej rozegranej minucie (w tym przypadku sekundowej) minuty rozegrane i ewentualnie wynik należy skorygować w aplikacji. Przetestowałem już szereg rozwiązań, które mogłem znaleźć w internecie, jak na przykład rozwiązanie Thread, które pojawia się wszędzie. Nie daje to jednak rezultatu, jakiego się spodziewałem.
Oczekiwany wynik: aplikacja, która zaczyna się od 0 minut i wyniku 0-0, zwiększając liczbę minut gry o 1 co sekundę, a także dostosowując wynik w przypadku strzelenia gola.
Rzeczywiste dane wyjściowe: biały ekran z liczbą milisekund określoną w kodzie, a następnie tylko „wynik końcowy” gry. Na przykład: 90' 2-1
.
Próbowałem już umieścić kod try/catch
w innym miejscu w pętli. Zastąpiłem również sleep
wait
. To zawsze daje ten sam wynik. Czy ktoś może mi powiedzieć, w jaki sposób mogę wyświetlić na żywo liczbę sekund, aby zwiększyć się na ekranie, a wynik zmienia się, gdy tylko padnie gol?
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);
}
}
}
}
Funkcja playMinute:
public int playMinute(){
Random ran = new Random();
int random = ran.nextInt(3500) + 1;
return random;
}
2 odpowiedzi
Nie używaj Thread.sleep()
to zła praktyka. Możesz użyć Countdown Timer
i onTick
uruchomić playMinute()
new CountDownTimer(30000, 1000) {
public void onTick(long millisUntilFinished) {
Log.i("seconds remaining: " ,""+ millisUntilFinished / 1000);
}
public void onFinish() {
Log.i("Timer Finished");
}
}.start();
Thread.sleep(1000)
będzie spać tylko przez 1 sekundę, ponieważ 1 sekunda to 1000 ms.
Zastąp go na minutę Thread.sleep(1 * 60 * 1000)
Podobne pytania
Nowe pytania
java
Java to język programowania wysokiego poziomu. Użyj tego tagu, jeśli masz problemy z używaniem lub zrozumieniem samego języka. Ten tag jest rzadko używany samodzielnie i jest najczęściej używany w połączeniu z [spring], [spring-boot], [jakarta-ee], [android], [javafx], [hadoop], [gradle] i [maven].