Permalänk
Medlem

Java, tidtagare hjälp

Hej, läser Systemutveckling och har en skoluppgift där vi ska göra ett bilspel och jag har hand om tidtagningen, jag använder mig just nu av System.currentTimeMillis();

där jag kör skrivit såhär

public class Car extends Actor
{
long start = System.currentTimeMillis();

public void act() {
time();
}

public void time() {
long stop = System.currentTimeMillis();
System.out.print((stop-start) / 1000);
}

Detta fungerar som jag vill. Alltså att den räknar från 0 och uppåt i sekunder men det funkar bara i terminalen, jag skulle vilja få ut time() metoden och skriva ut värdet som text i vår värld. Hur går jag tillväga? Finns det något sätt att omvandla datatypen long till String? Vill få ut en siffra som visar sekunder som gått från att man tryckt play som bara ska räkna uppåt

Vi använder oss av programmet Greenfoot (greenfoot.org) som är nybörjarvänligt

Permalänk
Medlem
Skrivet av phlfztdt:

jag skulle vilja få ut time() metoden och skriva ut värdet som text i vår värld. Hur går jag tillväga?

Antagligen världens sämsta formulering.... men jag antar att du vill visa tiden i GUIt för spelet? Skapa en GUI komponent eller rita ut ett textfält med värdet så är det klart?

Skrivet av phlfztdt:

Finns det något sätt att omvandla datatypen long till String?

Programmerat i en timme? Funderat på att googla innan du ställer en fråga?

long crap = 2; String shit = ""+crap;

Där haru en sträng med värdet av longen. Går även att använda String.valueOf(long param);

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

ja jag vill få ut värdet i GUI:t istället för i en seperat terminal. Jag är väldigt ny i programmering ja.

Permalänk
Medlem

public long time() { long stop = System.currentTimeMillis(); return(stop-start) / 1000; }

så är det en long och du kan hämta den när du skriver ut i GUI't

long till String behöver man oftast inte göra (själv, kompilatorn fixar). Ibland bråkar det men då brukar det räcka med:

printTextInYourWorldOrWhatEver( "" + time());

Om det inte funkar så är det "riktiga" sättet:

String bla = Long.toString(time());

Lägg märke till stort "L" i Long.

Visa signatur

Be wiser than other people if you can; but do not tell them so.

►Jag förbehåller mig rätten att ha helt upp åt väggarna fel◄

Permalänk
Medlem
Skrivet av phlfztdt:

ja jag vill få ut värdet i GUI:t istället för i en seperat terminal. Jag är väldigt ny i programmering ja.

Har ni ett GUI?
Om ni har ett GUI redan så fråga dem som har gjort GUIt om hjälp, om de har lyckats göra ett GUI av något slag så har dom nog inga problem att få din tid att synas där.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem

tack för alla svar, fick rätt med det! problemet som löste det var " " innan min variabel. Nu till en annan fråga, vad skriver jag för att hämta en variabel från en klass till en annan?

Permalänk
Medlem
Skrivet av phlfztdt:

tack för alla svar, fick rätt med det! problemet som löste det var " " innan min variabel. Nu till en annan fråga, vad skriver jag för att hämta en variabel från en klass till en annan?

På samma sätt som du anropar övriga metoder och variabel på en klass.
Du måste ha ett (instans av klassen) objekt eller en klassvariabel.

instans.variabelnamn

ex:

Klass k = new Klass();
int resultat = k.variabel; //Hämtar (fiktionella) heltalet "variabel" från instansen k som är en instans av klassen Klass och placerar det i den lokala variabeln "resultat"

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Okej, detta med klass, skriver man det bara i den klassen som man vill hämta det till?
jag har det såhär just nu: Jag har en bil, bilbana och en startlinje, och innan i tråden har jag löst hur jag fick tiden att funka, så nu startar tiden direkt när jag trycker play, sen vill jag att tiden ska stanna och skrivas ut för min bil när den kört ett varv och över startlinjen

därför vill har jag skrivit såhär i Bil classen:
public long time() {
Actor StartLine = getOneIntersectingObject(StartLine.class);

if (StartLine !=null) {
long stop = System.currentTimeMillis();
long player1time = ((stop-start) / 1000);
String player1 = "Player1" +player1time;

}
return 0;

}
Detta fungerar, men jag vill kalla på denna metoden i min Scoreboard class som sedan ska skriva ut det.

Jag vill ju kalla på detta " String player1 = "Player1" +player1time; " till min Scoreboard klass

Permalänk
Medlem
Skrivet av phlfztdt:

Okej, detta med klass, skriver man det bara i den klassen som man vill hämta det till?

Ja, det är en väg att gå.

Skrivet av phlfztdt:

jag har det såhär just nu: Jag har en bil, bilbana och en startlinje, och innan i tråden har jag löst hur jag fick tiden att funka, så nu startar tiden direkt när jag trycker play, sen vill jag att tiden ska stanna och skrivas ut för min bil när den kört ett varv och över startlinjen

därför vill har jag skrivit såhär i Bil classen:
public long time() {
Actor StartLine = getOneIntersectingObject(StartLine.class);

if (StartLine !=null) {
long stop = System.currentTimeMillis();
long player1time = ((stop-start) / 1000);
String player1 = "Player1" +player1time;

}
return 0;

}
Detta fungerar, men jag vill kalla på denna metoden i min Scoreboard class som sedan ska skriva ut det.

Jag vill ju kalla på detta " String player1 = "Player1" +player1time; " till min Scoreboard klass

Vet "bil", "bilbana" och "startlinje" om varandra?
Om Scoreboard vet om klassen där metoden "time()" finns så kan du ju kalla på den metoden vid lämpligt tillfälle.

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Medlem

Hur menar du med om dom vet om varandra? Jag är som sagt väldigt grön på det här med att programmera men vill gärna lära mig. Hur skriver man för att kalla på en metod eller en variabel i en annan klass?

Permalänk
Medlem

Om du läser systemutveckling och detta är en skoluppgift så är jag ganska säker på att ni har kurslitteratur eller liknande som tar upp något så trivialt som att invokera en metod.

Visa signatur

Spelrigg: 800D| i7 3930K@4,7 GHz - Custom WC | 32 GB Kingston HyperX Beast | 7970 GHz X-Edition |1x30 Dell U3011, 2x27" | Sennheiser HD650 | Xonar Essence STX |
Laptop: G74SX 17,3" 120 Hz 3D |
Server: Phenom II X4 955BE | Corsair XMS3 8 GB | 16 HDDs, 27 TB |
HTPCs: ASUS EEE Box 1.8 Ghz | Blu-Ray | OCZ Vertex 2 60 GB | 4 GB RAM |

Permalänk
Medlem
Skrivet av phlfztdt:

Hur menar du med om dom vet om varandra? Jag är som sagt väldigt grön på det här med att programmera men vill gärna lära mig. Hur skriver man för att kalla på en metod eller en variabel i en annan klass?

Vad jag menar är om de har en referens till en instans så de kan komma åt varandras variabler och metoder.

Du kan inte ha alla dessa objekt utan referenser till varandra på något sätt. Ditt bilbana-objekt bör ju förslagsvis ha hand om alla instanser av bil-klassen och startlinje-klassen.

Jag skrev tidigare hur du kallar på en metod eller variabel från en annan instans av en klass.

instans.metodnamn() eller instans.variabelnamn

Så om bilbana har hand om alla bilar så kan du skriva på detta sätt i bilbane-klassen.

//bil1 är en instans av Bil-klassen //time() är din metod som du skrev i Bil-klassen bil1.time();

Visa signatur

ηλί, ηλί, λαμά σαβαχθανί!?

Permalänk
Skrivet av phlfztdt:

Okej, detta med klass, skriver man det bara i den klassen som man vill hämta det till?
jag har det såhär just nu: Jag har en bil, bilbana och en startlinje, och innan i tråden har jag löst hur jag fick tiden att funka, så nu startar tiden direkt när jag trycker play, sen vill jag att tiden ska stanna och skrivas ut för min bil när den kört ett varv och över startlinjen

därför vill har jag skrivit såhär i Bil classen:
public long time() {
Actor StartLine = getOneIntersectingObject(StartLine.class);

if (StartLine !=null) {
long stop = System.currentTimeMillis();
long player1time = ((stop-start) / 1000);
String player1 = "Player1" +player1time;

}
return 0;

}
Detta fungerar, men jag vill kalla på denna metoden i min Scoreboard class som sedan ska skriva ut det.

Jag vill ju kalla på detta " String player1 = "Player1" +player1time; " till min Scoreboard klass

En fråga, varför returnera värdet 0 varje gång, bättre då att returnera något du vill ha (kanske din String?) eller inte returnera något alls och låta metoden vara en void.

Visa signatur

Corsair Vengeance LPX 4x8GB DDR4 2666MHz CL16 | Intel Core i7 6700 3,4 GHz 8MB | MSI Z170A KRAIT GAMING | Corsair Force Series 3 120 GB | Seagate SSHD Desktop 2 TB 7200 RPM 3,5" | Creative Sound Blaster Z PCIe | Western Digital 500 GB | Samsung Writemaster | Corsair TX750 V2 750 W | EVGA GeForce GTX 970 4GB SSC ACX 2.0+| Fractal Design Define R5 (Svart)

Permalänk
Medlem
Skrivet av gaminggirl:

En fråga, varför returnera värdet 0 varje gång, bättre då att returnera något du vill ha (kanske din String?) eller inte returnera något alls och låta metoden vara en void.

Okej, jag ändra den till void. Fel av mig!

Permalänk
Medlem
Skrivet av gaminggirl:

En fråga, varför returnera värdet 0 varje gång, bättre då att returnera något du vill ha (kanske din String?) eller inte returnera något alls och låta metoden vara en void.

Skrivet av fidde91:

Okej, jag ändra den till void. Fel av mig!

Det är bättre om du returnerar tiden, då åstadkommer faktiskt metoden något

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Har löst allting nu. Kan lägga ut hela spelet inom ett par dagar om ni vill när de andra är klara med sitt.