Czasowe dodawanie losowych liczb

0

Wklejam wam kod ,


import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Random;





public class Main {
	public static void main(String[] args) {
		int hp = 60;
		int sum = 0;
		Scanner sc = new Scanner(System.in);
		Random los = new Random();
		int pc = 1 + los.nextInt(4);
		Timer czas = new Timer();
		do{
		TimerTask zd = new TimerTask(){
		    public void run(){
		        System.out.println("Czas off");
                      hp = hp + pc
		        System.exit(0);
		         
		    }
		};
		
		    czas.schedule(zd, 5 * 1000);
		    System.out.println("5 sek na odp");
		    String odp = sc.nextLine();
		    switch(odp){
		        case "atk":
		            System.out.println("oo tak");
		             sum = hp - pc;
		            System.out.println("hp spadlo o " + pc + " "  + " wynosi " + sum);
		            czas.cancel();
		            break;
		        default:
		            System.out.println("zle");
		            czas.cancel();
		            hp = hp + pc;
		            System.out.println("hp wzroslo o " + pc);
		        }
		    
		   }while(hp > 0);
		        System.out.println("pokonany");
		    
		    
		
		
	}
}

Generalnie chodzi mi o stworzenie pętli w której
Jeśli użytkownik nie napisze w ciągu 5 sek
odpowiedzi , to np komputer doda losowa liczbę od 1 do 6 do inta hp , jeśli napisze prawidłowa odpowiedź to wtedy np zabierze od 1 do 6 hp i tak wkolko do czasu kiedy hp będzie równe 0.

2

Dla @Wypierdzistyy :
https://codebeautify.org/javaviewer

import java.util.Scanner;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Random;

public class Main {
    public static void main(String[] args) {
        int hp = 60;
        int sum = 0;
        Scanner sc = new Scanner(System.in);
        Random los = new Random();
        int pc = 1 + los.nextInt(4);
        Timer czas = new Timer();
        do {
            TimerTask zd = new TimerTask() {
                public void run() {
                    System.out.println("Czas off");
                    hp = hp + pc
                    System.exit(0);

                }
            };

            czas.schedule(zd, 5 * 1000);
            System.out.println("5 sek na odp");
            String odp = sc.nextLine();
            switch (odp) {
            case "atk":
                System.out.println("oo tak");
                sum = hp - pc;
                System.out.println("hp spadlo o " + pc + " " + " wynosi " + sum);
                czas.cancel();
                break;
            default:
                System.out.println("zle");
                czas.cancel();
                hp = hp + pc;
                System.out.println("hp wzroslo o " + pc);
            }

        } while (hp > 0);

        System.out.println("pokonany");
    }
}

@DraggyCords cords: Na przyszłość ogarnij formatowanie kodu...
Przy edycji posta kliknij: Instrukcja obsługi Markdown (prawy dolny róg).
Przeczytaj sekcję: "Kod źródłowy".

Poza tym co ten program ma wspólnego z Androidem i Springiem?
Tagujesz jakbyś trollował...

Jeśli chodzi o Twoje zadanie...
Jeśli to co masz jakoś działa, to masz już bardzo dużo.
Musisz tylko wywalić bzdury i uzupełnić kod, tak aby operacje odpowiadały treści zadania.

Nie wiem czy trafiłeś akurat na ten kod, ale powinien się przydać w dalszej pracy nad zadaniem:
https://stackoverflow.com/questions/5853989/time-limit-for-an-input

1
Spine napisał(a):

Poza tym co ten program ma wspólnego z Androidem i Springiem?

Bo modne i wszyscy dają takie tagi

Spine napisał(a):

Musisz tylko wywalić bzdury i uzupełnić kod, tak aby operacje odpowiadały treści zadania.

Dla mnie nie realizuje zadania wcale - przypadkowa wklejka oddzielnych fragmentów z pierwszych pozycji googla

@DraggyCords cords: Użycie new Scanner(System.in) jak metoda realizacji nie prowadzi do celu, te operacje będą oczekiwać ad mortem defecatem

0

@Spine:
Kod nie spełnia zadania, tak jak bym chciał wywala mi błędy, byłem na stronie która mi podałeś, właśnie dzięki niej udało mi się zmodyfikować kod, przepraszam za te tagi , jak tworzyłem post to na telefonie i mi się najebało.

@ZrobieDobrze:
Kod nie jest przypadkowa wklejka z Google,
Jestem osobą ucząca się, także może to tak wyglądać. Dopiero zaczynam w Javę

0
ZrobieDobrze napisał(a):

@DraggyCords cords:

Użycie Scanner(System.in) jak metoda realizacji nie prowadzi do celu, te operacje będą oczekiwać ad mortem defecatem

Tutaj trzeba się dowiedzieć jak zrobić, żeby dało się przerwać pobieranie linii.
https://stackoverflow.com/questions/4983065/how-to-interrupt-java-util-scanner-nextline-call

0

@Spine
Przecież to proste ..
W moim przypadku Scanner nazywa się sc, także wystarczy że dorzucę do kodu

sc.close();

Jednak nawet po tym to dalej nie działa. Program uruchamia się, ale wyrzuca błędy podczas programu.
Poniżej logi:

5 sek na odp
atk
oo tak
hp spadlo o 3  wynosi 57
Exception in thread "main" java.lang.IllegalStateException: Timer already cancelled.
        at java.base/java.util.Timer.sched(Unknown Source)
        at java.base/java.util.Timer.schedule(Unknown Source)
        at Main.main(Main.java:26)

[Program finished]
2
DraggyCords cords napisał(a):

Jednak nawet po tym to dalej nie działa. Program uruchamia się, ale wyrzuca błędy podczas programu.

Zwyczajnie przenieś wiersz:
Timer czas = new Timer();
wewnątrz pętli.

0

@_13th_Dragon:
Gościu jesteś wielki, taka pierdoła która przeoczyłem a tyle zmienia , dziękuję bardzo, jednak pojawia się jeszcze jeden problem , dlaczego czas naliczany na odpowiedź użytkownika. Jest naliczany tylko raz , chodzi mi o to że się nie zapętla.

0

@_13th_Dragon:
Tylko nie rozumiem dlaczego akurat musiałem przenieść do pętli Timer? Co tutaj zaszło w takim razie? Skoro czas został chyba na stałe przypisany do Timeru.

0
DraggyCords cords napisał(a):

@_13th_Dragon:
Tylko nie rozumiem dlaczego akurat musiałem przenieść do pętli Timer? Co tutaj zaszło w takim razie? Skoro czas został chyba na stałe przypisany do Timeru.

https://docs.oracle.com/javase/7/docs/api/java/util/Timer.html
void cancel() - Terminates this timer, discarding any currently scheduled tasks.
Więc po cancel() timer jest do wywalenia.

Ewentualnie:
https://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html
boolean cancel() - Cancels this timer task. If the task has been scheduled for one-time execution and has not yet run, or has not yet been scheduled, it will never run. If the task has been scheduled for repeated execution, it will never run again. (If the task is running when this call occurs, the task will run to completion, but will never run again.)
Note that calling this method from within the run method of a repeating timer task absolutely guarantees that the timer task will not run again.
This method may be called repeatedly; the second and subsequent calls have no effect.

Zawsze czytaj dokumentacje dookoła tematu.

0

@_13th_Dragon:
Ale to dalej mi nie tlumaczy dlaczego timertask się nie zapętla, do czasu kiedy hp nie równa się 0 chyba że czegoś nie rozumiem. Bo po 5 sekundach odpala metodę dla timer taska ale nie ma dalszej pętli, na kolejne 5 sekund i ponowny powrót do metody timertaska , ale do końca nie rozumiem.

0

Odpala się metoda która zabija Timer lub TimerTask oraz przerywa Scanner może pomyśl co musi zmienić w jej wykonaniu aby program trwał dalej.
Powtarzam raz jeszcze - "Zawsze czytaj dokumentacje dookoła tematu" - tym razem: System.exit()

0

@_13th_Dragon:
Nie mam kompletnie pomysłu co jest nie tak i czemu jedno z drugim coś zabiją, system.exit prowadzi do całkowitego wyłączenia programu kiedy tylko uruchomi się metoda void run, próbowałem używać timertask.cancel();
Stworzyłem nawet 2 metody które przenosiły się z jednej do drugiej aby była kontunuacjspętli mp
Public static void metoda1
Metoda2("asd")
//coś tam
I potem do metody 1
Ale g**no buguje mi program wtedy całkowicie.
Wszystko działa jak należy dopóki nie uruchomi się timertask, jak się uruchamia to jest koniec. Pętli , czas nie nalicza się na nowo, jak i nie ma ponownego zapytania o 5 sekund itd.
Może jakoś pomożesz ?

1 użytkowników online, w tym zalogowanych: 0, gości: 1