Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: Java: sekuntit, minuutit? [java]

Tommittaja [10.01.2009 18:53:40]

#

onko javassa mitään luokkaa sekuntilaskurin ym. toteuttamiseen, kun haluasin esim laittaa johonkin peliin aikarajoituksen/ jonkun jutun johon tarvitaan sekunteja ja vastaavia juttuja...

Antti Laaksonen [10.01.2009 19:14:44]

#

Voit käyttää Date-luokan metodia getTime, joka palauttaa vuoden 1970 alusta kuluneen ajan millisekunteina. Kun panet muistiin tällaisen ajan ohjelman kahdessa eri vaiheessa, aikojen erotus kertoo, kuinka monta millisekuntia vaiheiden välissä kului aikaa.

import java.util.Date;
import java.util.Scanner;

public class Aika {
        public static void main(String[] args) {
                Scanner luku = new Scanner(System.in);
                System.out.println("Paljonko on 1+1?");
                long alku = new Date().getTime();
                int vastaus = luku.nextInt();
                long loppu = new Date().getTime();
                if (vastaus != 2) {
                        System.out.println("Vastasit väärin!");
                /* aikaraja: 5 sekuntia */
                } else if (loppu-alku > 5*1000) {
                        System.out.println("Olit liian hidas!");
                } else {
                        System.out.println("Oikein meni!");
                }
                System.out.println("Aikaa kului muuten " +
                        (double)(loppu-alku)/1000 + " sekuntia.");
        }
}

Tommittaja [10.01.2009 19:44:35]

#

onko tuon lopun ja alun pakko olla long?

edit: ja voiko siitä tehdä reaaliaikaisen esim. jos aikaa on mennyt yli sen 5 sec, niin se sanoo heti, että olit liian hidas eikä odota että kirjoitat syötteen?

edit2: vai onko se niin että konsoliohjelmat eivät voi olla reaaliaikaisia?
tuostahan voisi tehdä vaikka minkä trivian kun laittaa aikarajan ja kuinka monta pistettä saa jos vastaa esim. alle 3 sec ja alle 2 sec mm.

Tommittaja [10.01.2009 21:55:41]

#

Tein tämmöisen ohjelman:

import java.util.Date;

public class Laskupeli {
	public static void main(String[] args) {
		System.out.println("****Lukujenlaskentapeli**** 999 lopettaa");
		int piste = 0;
		while ( piste >= 0 ) {
		int luku1 = (int)(1+6*Math.random());
		int luku2 = (int)(1+6*Math.random());
		System.out.print("\npaljonko on "+luku1+" * "+luku2+"?\n:");
		long alku = new Date().getTime();
		int vastaus = Lue.kluku();
		long loppu = new Date().getTime();
		if (vastaus != luku1*luku2 && vastaus != 999 ) {
			System.out.println("\nLaskit väärin!");
			piste -= 10;
		}
		else if (loppu-alku > 6*1000) {
			System.out.println("\nAika loppui ennen kuin arvasit");
			piste -= 10;
		}
		else if (vastaus == 999) {
			System.out.println("sinä sait "+piste+" pistettä");
			break;
		}
		else {
			System.out.println("\nArvasit oikein!  +1 pistettä");
			System.out.println("aikaa kului"+(double)(loppu-alku)/1000+"sekuntia");
			piste += 1;
		}
		}
	}
}

PS: käytän luokkaa Lue BufferedReaderin sijasta, eli Lue.kluku() lukee syötteen int muodossa luokan löytää osoitteesta http://www.cs.helsinki.fi/u/lppelton/java/Lue.java

edit: kiitos neuvoista!

Jackal von ÖRF [10.01.2009 22:46:18]

#

Tommittaja kirjoitti:

edit: ja voiko siitä tehdä reaaliaikaisen esim. jos aikaa on mennyt yli sen 5 sec, niin se sanoo heti, että olit liian hidas eikä odota että kirjoitat syötteen?

Säikeillä saa tehtyä, mutta niiden käyttämiseksi sinulla on vielä paljon opittavaa.

Tommittaja [10.01.2009 23:15:36]

#

ai threadeilla, olisit heti sanonut. ei oikeen toi säie sanonu mitään..

maka78 [12.01.2009 13:08:07]

#

Tommittaja kirjoitti:

onko javassa mitään luokkaa sekuntilaskurin ym. toteuttamiseen, kun haluasin esim laittaa johonkin peliin aikarajoituksen/ jonkun jutun johon tarvitaan sekunteja ja vastaavia juttuja...

Tähän tarkoitukseen javasta on löytynyt aikojen alusta lähtien Timer-luokka.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta