Java: Jämföra Variabler, Tärningspel

Permalänk

Java: Jämföra Variabler, Tärningspel

Tärning1 = myRandom.nextInt(5); Tärning2 = myRandom.nextInt(5); Tärning3 = myRandom.nextInt(5); Tärning4 = myRandom.nextInt(5); Tärning5 = myRandom.nextInt(5); Tärning6 = myRandom.nextInt(5);

Programmet ska simulera ett tärningspel. Och jag vet inte riktigt hur jag ska tänka i det här fallet.

Reglerna i spelet är:
Om man får trepar i vilken tärning som helst får man tärningsvärdet+00. Så 3st 4:or=400p.
1:or är värda 100p
5:or 50p
Stegar är värda 1500p

Uppgiften med koden/tankesättet är att jag vill kunna jämföra variablerna, samt på något "ojobbigt" sätt kunna få ut poäng och så.
Basically en kod som säger "Om TärningX = TärningY/?.
Om ni inte redan klurat ut det, är detta det inte så kända tärningsspelet Tiotusen.

Även fast jag utryckt mig konstigt så tror jag att ni förstår

Permalänk
Medlem

Lägg in värderna i en array och sen sortera den. Sen sätterin gu igång med att rudimentärt beta av de olika testcasen. Ska du lära dig programmera så är det viktigt att du tillåter dig göra fel och på ditt eget sätt innan du kanske på helt engen hand gör rätt.
Så fortsätt lek och kom tillbaka imorgon när du har kommit längre än en enda rads kodning.

Permalänk
Skrivet av iXam:

Lägg in värderna i en array och sen sortera den. Sen sätterin gu igång med att rudimentärt beta av de olika testcasen. Ska du lära dig programmera så är det viktigt att du tillåter dig göra fel och på ditt eget sätt innan du kanske på helt engen hand gör rätt.
Så fortsätt lek och kom tillbaka imorgon när du har kommit längre än en enda rads kodning.

import java.util.Scanner; import java.util.Random; public class Tiotusen { public static void main(String[] args) { Scanner myScanner = new Scanner(System.in); Random myRandom = new Random(); int Tärning1; int Tärning2; int Tärning3; int Tärning4; int Tärning5; int Tärning6; boolean JaSvar; System.out.print("Välkommen till 10'000!"); System.out.println(); System.out.print("Vill du kasta tärningar? true/false"); JaSvar = myScanner.nextBoolean(); if (JaSvar) { System.out.print("Kastar Tärningar!"); Tärning1 = myRandom.nextInt(5); Tärning2 = myRandom.nextInt(5); Tärning3 = myRandom.nextInt(5); Tärning4 = myRandom.nextInt(5); Tärning5 = myRandom.nextInt(5); Tärning6 = myRandom.nextInt(5); System.out.println(); System.out.println(Tärning1 + 1); System.out.println(Tärning2 + 1); System.out.println(Tärning3 + 1); System.out.println(Tärning4 + 1); System.out.println(Tärning5 + 1); System.out.println(Tärning6 + 1); } else { System.out.print("NEJ"); } } }

Där är så långt jag kommit. Och varför ska jag ha det i en array? Höll på och finurlade på en array för det, men det funkar väl lika bra såhär? Eller blir det lättare om man använder en array?

Permalänk
Medlem
Skrivet av OrbitJ0k3r:

Där är så långt jag kommit. Och varför ska jag ha det i en array? Höll på och finurlade på en array för det, men det funkar väl lika bra såhär? Eller blir det lättare om man använder en array?

Du vill ha en array och en algoritm för att minska repetition i koden. I nuläget skulle du exempelvis behöva ändra på sex ställen för att få tiosidiga tärningar. Om du skulle göra ett program med hundra tärningar skulle det bli hundra ändringar. Förvisso en struntsak med smarta sökningar, men ohållbart i längden.

Visa signatur

Kom-pa-TI-bilitet

Permalänk
Medlem

Du skall lägga tärningarna i en lista (List<Tärning> tärningar = new ArrayList<Tärning>();) eller array (int tärningar[] new int[5];) eftersom de skall hanteras tillsammans, som en enhet. Att lägga dem i enskilda variabler som du gör det svårare att exempelvis jämföra första tärningen med de resterande fyra.

Sedan blir det så mycket enklare att göra vettiga saker som att sortera tärningskasten i stigande ordning. Det blir så mycket lättare att hitta tre lika värden, eftersom de ligger brevid varandra.

Skall du leta i en sorterad lista, så behöver du bara leta efter tre lika tärningar, som ligger brevid varandra (ex 1 3 3 3 5 eller 2 2 2 4 6). Det ger i bästa fall 3 jämförelser för att se att det inte finns ett triss, samt sämsta fallet 6 jämförelser. (Varför? Tänk igenom fallen).

Skall du leta i en Osorterad lista, så behöver du ta var och en av tärningarna och sedan söka bland de andra fyra efter en likadan, och sedan leta i resterande tre tärningarna efter den tredje likadan. Vilket ger 5*4*3 = 60 jämförelser i för att se att det inte finns något triss. Vilket borde vara det vanligaste utfallet.

Jag skulle skapa en klass typ Tärningskast som hanterar en tärningskas och som du sedan kan hantera för att kasta tärningar och sedan fråga efter poängen. Så att main() inte behöver hantera den delen.

Permalänk
Medlem

Vet inte riktigt hur mycket du tänkte lära dig om Java, om detta e en skoluppgift lr om du bara leker. Om du vill komma in lite mer i objektorienterat tänkande så gör en klass som heter t.ex. Dice(tärning). Låta Dice hålla ett värde precis som dina integers nu, gör metoder för att t.ex. slumpa om värdet, hämta "poängvärdet" etc. Sedan låt klassen implementera Comparable interfacet. Om du sen lägger alla tärningobjekten i en lista (t.ex. ArrayList som AJXn nämnde) så kan du lätt sortera dem efter storlek med hjälp av Collections.sort(). Såg precis att AJXn skrev väldigt likt detta på slutet är nyvaken ..
Sen blir det nog snyggare om din scannar tar in en string istället för boolean vid frågan om man vill spela, så kör du en if sats med typ
( input.equalsIgnoreCase("ja") || input.equalsIngoreCase("j") ) lr nåt i den stilen snyggare än å behöva skriva true/false samt mindre risk för knasigheter.
En sidenote är väl att variabelnamn bör skrivas med en gemen som begynnelsebokstav. Sen är väl engelska att föredrar både i kod och kommentarer men om du är ung och inte känner dig helt hundra på det så är det nog okej iaf
Det blir mer för dig att lära dig om du börjar med att skapa nya klasser men tror att det är värt det, koden kommer bli lättare att förstå och bli snyggare, ju tidigare man börjar med att tänka objektorienterat ju bättre!
Oftast vill man heller inte ha så mycket kod i main() metoden heller, bara typ game.start(); lr menu.show() lr något liknande som bara sätter igång flödet, renare och snyggare.

Lycka till!

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
Skrivet av Gnejs:

Vet inte riktigt hur mycket du tänkte lära dig om Java, om detta e en skoluppgift lr om du bara leker. Om du vill komma in lite mer i objektorienterat tänkande så gör en klass som heter t.ex. Dice(tärning). Låta Dice hålla ett värde precis som dina integers nu, gör metoder för att t.ex. slumpa om värdet, hämta "poängvärdet" etc. Sedan låt klassen implementera Comparable interfacet. Om du sen lägger alla tärningobjekten i en lista (t.ex. ArrayList som AJXn nämnde) så kan du lätt sortera dem efter storlek med hjälp av Collections.sort(). Såg precis att AJXn skrev väldigt likt detta på slutet är nyvaken ..
Sen blir det nog snyggare om din scannar tar in en string istället för boolean vid frågan om man vill spela, så kör du en if sats med typ
( input.equalsIgnoreCase("ja") || input.equalsIngoreCase("j") ) lr nåt i den stilen snyggare än å behöva skriva true/false samt mindre risk för knasigheter.
En sidenote är väl att variabelnamn bör skrivas med en gemen som begynnelsebokstav. Sen är väl engelska att föredrar både i kod och kommentarer men om du är ung och inte känner dig helt hundra på det så är det nog okej iaf
Det blir mer för dig att lära dig om du börjar med att skapa nya klasser men tror att det är värt det, koden kommer bli lättare att förstå och bli snyggare, ju tidigare man börjar med att tänka objektorienterat ju bättre!
Oftast vill man heller inte ha så mycket kod i main() metoden heller, bara typ game.start(); lr menu.show() lr något liknande som bara sätter igång flödet, renare och snyggare.

Lycka till!

Sitter och leker är nog svaret Inget skolarbete kopplat, då jag går Natur. Men det blir kul med flera klasser, då jag inte arbetat med det förut.

Och apropå prompten, Satt i ett tag och provade olika metoder, och lyckades inte få till det, drog fram dummien och plockade en prompt därifrån. Men jag kommer ändra den prompten, samt sedan skriva om programmet för tex android eller nåt, iaf lägga till ett gui.

Sen är arrays också inget jag tittat på så jättemycket. Ska kolla in det nu, men jag tog just flera variabler i int, istället för en array, just för att jag kan det bättre.

Men nu mekar jag med en tärnings-klass och ska nog få till det nån gång