Hjälp med programmeringsuppgift! (Java)

Permalänk

Hjälp med programmeringsuppgift! (Java)

Har en uppgift som ska lämnas in senast kl 23:55 ikväll som går ut på att man ska göra ett tärningsspel (yatzy).
Citat från it's learning:
"Nu ska du få skapa ett litet enkelt tärningsspel där du får användning av dina kunskaper om fält. Spelet går till så här: Spelaren (eller snarare datorn) slår fem stycken sexsidiga tärningar. Spelaren får sedan välja en av tärningarna som datorn ska slå igen. Om alla tärningar är lika så är spelet vunnet. Annars forsätter spelaren välja en tärning som datorn ska slå igen. Presentera tärningsslagen i en showInputDialog-ruta."

Programkod:

package test_package; import javax.swing.*; import java.util.*; /** * * @author Johan */ public class yatzyvg { /** * @param args the command line arguments */ public static void main(String[] args) { double t1, t2, t3, t4, t5; int kontroll = 0; String läst1 = "1"; String läst2 = "2"; String läst3 = "3"; String läst4 = "4"; String läst5 = "5"; t1 = Math.floor(Math.random()*6+1); int t1int = (int)t1; t2 = Math.floor(Math.random()*6+1); int t2int = (int)t2; t3 = Math.floor(Math.random()*6+1); int t3int = (int)t3; t4 = Math.floor(Math.random()*6+1); int t4int = (int)t4; t5 = Math.floor(Math.random()*6+1); int t5int = (int)t5; int [] falt = new int [5]; falt[0] = t1int; falt[1] = t2int; falt[2] = t3int; falt[3] = t4int; falt[falt.length-1] = t5int; for (int i=0; i< falt.length; i++) System.out.println(falt[i]); JOptionPane.showMessageDialog(null, "Dina nummer: " + falt[0] + falt[1] + falt[2] + falt[3] + falt[4]); if (falt[0]==falt[1] && falt[0]==falt[2] && falt[1]==falt[3] && falt[0]==falt[4]) { JOptionPane.showMessageDialog(null, "Grattis, du fick Yatzy på första slaget!" ); } //om man får Yatzy på första slaget else while(kontroll == 0) { String token = null; int fråga1 = JOptionPane.showConfirmDialog(null, "vill du kasta om någon av tärningarna?"); if(fråga1 == 0) { kontroll=0; String fråga2 = JOptionPane.showInputDialog(null, "Dina nummer: " + falt[0] + falt[1] + falt[2] + falt[3] + falt[4] + "\nVilka? (Skriv t.ex '1 3' om du vill slå om tärning 1 och 3 )" ); { } StringTokenizer t = new StringTokenizer(fråga2); while (t.hasMoreTokens()) { token = t.nextToken(); if (token.equals(läst1)) { t1 = Math.floor(Math.random()*6+1); t1int = 0 + (int)t1; falt[0] = t1int; } else if (token.equals(läst2)) { t2 = Math.floor(Math.random()*6+1); t2int = 0 + (int)t2; falt[1] = t2int; } else if (token.equals(läst3)) { t3 = Math.floor(Math.random()*6+1); t3int = 0 + (int)t3; falt[2] = t3int; } else if (token.equals(läst4)) { t4 = Math.floor(Math.random()*6+1); t4int = 0 + (int)t4; falt[3] = t4int; } else if (token.equals(läst5)) { t5 = Math.floor(Math.random()*6+1); t5int = 0 + (int)t5; falt[4] = t5int; } } } else { kontroll = 1; } JOptionPane.showMessageDialog(null, falt[0] + " " + falt[1] + " " + falt[2] + " " + falt[3] + " " + falt[4]); if (falt[0]==falt[1] && falt[0]==falt[2] && falt[1]==falt[3] && falt[0]==falt[4]) { JOptionPane.showMessageDialog(null, "Grattis, du fick Yatzy!" ); } //Här får man Yatzy efter man slagit om tärningar } } }

Programmet fungerar som det ska i stora drag, det enda som strular är att efter man har fått Yatzy frågar programmet om man vill slå om "tärningarna" igen, samt några fler dialogrutor som dyker upp, vilket det inte ska. När man har fått Yatzy ska "Grattis, du har fått yatzy!" komma upp och sedan avslutas programmet.
Kan någon hjälpa mig med detta? Ge tips på vad jag ska lägga till/ändra/ta bort. Jag är inte så jätteduktig på programmering och har fått en del hjälp med denna uppgift.
Tackar för svar /Johan

Edit: Hittar verkligen inte var jag kan läga till en break-sats eller liknande. All hjälp uppskattas!

Permalänk
Medlem

Är det smart att döpa variabler till namn med åäö?
En variabel som är noll tills du har vunnit, du kollar alltså om den är noll innan du frågar om du vill kasta om. När du sedan visar grattis du har vunnit för du lägga till en rad som stänger ned programmet. Google borde ha svaret.
Jag har inte så mycket kunskaper har bara kört programmering a i c#. Men jag hade iaf lös det så.

Permalänk

Jag testade med att sätta en System.exit(0); efter grattismeddelandet, men då kunde man bara slå om tärningarna en gång, sedan stängdes programmet av. Lösningen på detta borde vara att sätte den i en if-sats, men jag vet inte hur man ska skriva för att den ska fortsätta fråga om man vill slå om tärningarna om man inte fått yatzy.

Permalänk
Medlem
Skrivet av Johan9360:

Jag testade med att sätta en System.exit(0); efter grattismeddelandet, men då kunde man bara slå om tärningarna en gång, sedan stängdes programmet av. Lösningen på detta borde vara att sätte den i en if-sats, men jag vet inte hur man ska skriva för att den ska fortsätta fråga om man vill slå om tärningarna om man inte fått yatzy.

Man skriver aldrig hela koden i main, utan man använder sig av metoder/funktioner. Då hade du lätt kunnat skapa en loop som loopar anropen tills variabeln eller vilkoret ändras i main.

Värt att notera så att du inte gör det i framtiden, inge ÅÄÖ i programmering.

Finns många brister i din kod och den är heller inte så optimerad. Vad du hade kunnat gjort är att te.x gjort om hela koden och gjort funktioner av det mesta.

Men jag gissar att det är ett programmering A projekt och då räcker det med att få det att fungera fint och ha någorlunda struktur

Men tänk på det i framtiden och lycka till:) Vilken kurs är det du läser?

Visa signatur

//clooak Mer CO-OP åt folket!

Permalänk
Skrivet av clooak:

Man skriver aldrig hela koden i main, utan man använder sig av metoder/funktioner. Då hade du lätt kunnat skapa en loop som loopar anropen tills variabeln eller vilkoret ändras i main.

Värt att notera så att du inte gör det i framtiden, inge ÅÄÖ i programmering.

Finns många brister i din kod och den är heller inte så optimerad. Vad du hade kunnat gjort är att te.x gjort om hela koden och gjort funktioner av det mesta.

Men jag gissar att det är ett programmering A projekt och då räcker det med att få det att fungera fint och ha någorlunda struktur

Men tänk på det i framtiden och lycka till:) Vilken kurs är det du läser?

It makes sense det du säger. Jag går som du säger Programmering A, första året på gymnasiet.
Tack för alla tips!

Permalänk
Medlem

Konsolyatzy

import java.util.*; class Hand { private int[] dices; private Random rnd; public Hand() { dices = new int[5]; rnd = new Random(); for(int i=0; i < 5; ++i) updateDice(i); } void updateDice(int id) { if(id < 0 || id > 4) return; dices[id] = 1+rnd.nextInt(6); } boolean hasYatzy() { for(int i=0; i < 4; ++i) if(dices[i] != dices[i+1]) return false; return true; } public String toString() { String s = "The dices are:\nid: 1 2 3 4 5\n "; for(int i=0; i < 5; ++i) s+= dices[i] + " "; return s; } } public class Syatzy { public static void main(String[] argv) { Hand h = new Hand(); Scanner in = new Scanner(System.in); int rethrows = 0; while(!h.hasYatzy()) { System.out.println(h+"\nInput the id's of the dices to rethrow separated with space:"); String s = in.nextLine(); StringTokenizer st = new StringTokenizer(s," "); while(st.hasMoreTokens() ) h.updateDice(Integer.parseInt(st.nextToken())-1); } System.out.println("Congratulations, you won after: "+rethrows+"\n\n"+h); } }

Visa signatur

weeeee

Permalänk
Medlem

Du har hamnat i en loop.
Kolla dina while-ar, variabler måste sättas på rätt ställe för att komma ur också.