Permalänk
Medlem

hjälp med java problem.

hej jag jobbar med ett program om tärningskast där man ska be användaren om ett val av hur många tärningar som skall kastas och ta emot den informationen när den trycks in. Minst 1 och max 5 tärningar skall väljas av användaren.
• Programmet slumpar resultat för varje enskild tärning, en i taget, och skriver ut detta på skärmen tillsammans med summan av slagna tärningar hittills.

• Om någon tärning får resultatet 6 så adderas detta inte till summan, utan två nya tärningar slås. Detta ska framgå av text på skärmen när/om det sker. Så länge någon tärning får resultatet 6 upprepas denna procedur.
• När alla tärningar är slagna skrivs totalsumman samt antal tärningsslag ut på skärmen.
• Spelaren får alternativ att börja om eller avsluta programmet.
programmet funkar bra o jag får bra resultat förutom när programmet frågar om användaren vill slå en gång till y/N?
då hittar jag inte satsen till det fast jag provade med massa olika sätt men nu har jag blackout så nån kan hjälpa med det sista är jag tacksam. här kommer min code:

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class DiceRolls1{
public static void main(String[] args){

Scanner sc = new Scanner(System.in);

System.out.println("Hur många tärningar vill du slå? Välj minst 1, max 5");

int choice = sc.nextInt();
int nrOfRolls;
nrOfRolls = 0;

int result;
result = 0;
boolean y = true;
boolean n = false;

List<Integer> dies = new ArrayList<Integer>(choice);
int i = 0;

while (i < choice) {

int diceValue = (int)(Math.random() * 6 + 1);

dies.add(diceValue);
nrOfRolls ++;

result = result + diceValue;
i++;

if (diceValue == 6){
i--;
choice++;

System.out.println("Du fick: " + dies.toString());
System.out.println("6or är ogilitiga, två nya tärningar slås");

int diceValue2 = (int)(Math.random() * 6 + 1);
dies.add(diceValue2);

nrOfRolls ++;
result = result + diceValue2;
i++;

} else {
}

}

System.out.println("Du fick: " + dies.toString());
System.out.println("Total poäng: " + result);
System.out.println("Antal kast: " + nrOfRolls);

System.out.println("Vill du slå nya tärningar? (Y/N)");

}
}

Permalänk
Medlem

En do-while-loop skulle nog passa här.
Efter din sista println så läser du in y eller n.
pseudo :

do { // Det du vill upprepa ex från raden "System.out.println("Hur många tärningar vill du slå? Välj minst 1, max 5");" till raden "System.out.println("Vill du slå nya tärningar? (Y/N)");". answer = läs_in_tecken(); } while (answer == "y");

Permalänk
Medlem
Skrivet av iXam:

En do-while-loop skulle nog passa här.
Efter din sista println så läser du in y eller n.
pseudo :

do { // Det du vill upprepa ex från raden "System.out.println("Hur många tärningar vill du slå? Välj minst 1, max 5");" till raden "System.out.println("Vill du slå nya tärningar? (Y/N)");". answer = läs_in_tecken(); } while (answer == "y");

Java kan inte == strängar då de är objekt. Man måste ha answer.equals("y")

Edit: jag såg att det vara inte var riktig kod, bara så ingen blir förvirrad.

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk
Medlem
Skrivet av iXam:

En do-while-loop skulle nog passa här.
Efter din sista println så läser du in y eller n.
pseudo :

do { // Det du vill upprepa ex från raden "System.out.println("Hur många tärningar vill du slå? Välj minst 1, max 5");" till raden "System.out.println("Vill du slå nya tärningar? (Y/N)");". answer = läs_in_tecken(); } while (answer == "y");

Menar du att jag ska påbörja en ny do-while loop på slutet av min kod efter sista println?

Permalänk
Medlem

@iXam: hej igen jag förstår inte vad satsen : (answer = läs_in_tecken();) betyder kan du snälla förklara mer om du har tid?
och sen menar du att jag ska påbörja en ny do-while loop på slutet av min kod efter sista println?

Permalänk
Medlem
Skrivet av FadiAb:

@iXam: hej igen jag förstår inte vad satsen : (answer = läs_in_tecken();) betyder kan du snälla förklara mer om du har tid?
och sen menar du att jag ska påbörja en ny do-while loop på slutet av min kod efter sista println?

answer = läs_in_tecken är där du fångar användarens svar (y eller n) och lagrar det i en variabel. Så någon form av scanner.nextLine() eller något sådant.

Visa signatur

i5-7600k . GTX 1080 . 16 GB

Permalänk

Nog enklare om du bara flyttar all tärningskod till en separat metod och lämnar main något i stil med:

main(){

int choice = sc.nextInt();
int nrOfRolls;

String ans;

do {
nrOfRolls = rollDies(); <---- __ny metod__
System.out.println("Du fick: " + dies.toString());
System.out.println("Total poäng: " + result);
System.out.println("Antal kast: " + nrOfRolls);

System.out.println("Vill du slå nya tärningar? (Y/N)");
nrOfRolls = 0;
ans = sc.nextLine();
} while(ans.equals("y");
}

edit: bra vana att inte ha "business logic" i main.

Permalänk
Medlem

Tack ska ni ha, ni är alla duktiga
Jag vill bara säga att jag är nybörjare på java eller programmering överhuvudtaget o jag har precis klarat programmering 1 kursen o försöker programera så mycket jag kan så om jag frågar dumma frågor ibland det för att jag vill lära mig o jag är tacksam för all era hjälp

Permalänk
Medlem

@iXam: jag får error hela tidenDiceRolls1.java:65: error: cannot find symbol
} while(ans.equals("Y"));
^
symbol: variable ans
location: class DiceRolls1
1 error

det här är koden:

import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class DiceRolls1{
public static void main(String[] args){

Scanner sc = new Scanner(System.in);

do {
System.out.println("Fadi Abdallah (DiceRolls) 1 juni 2020");
System.out.println("Hur många tärningar vill du slå? Välj minst 1, max 5");

int choice = sc.nextInt();
int nrOfRolls;
nrOfRolls = 0;

int result;
result = 0;

List<Integer> dies = new ArrayList<Integer>(choice);
int i = 0;

if (i < choice) {

int diceValue = (int)(Math.random() * 6 + 1);

dies.add(diceValue);
nrOfRolls ++;

result = result + diceValue;
i++;

if (diceValue == 6){
i--;
choice++;

System.out.println("Du fick: " + dies.toString());
System.out.println("6or är ogilitiga, två nya tärningar slås");

int diceValue2 = (int)(Math.random() * 6 + 1);
dies.add(diceValue2);

nrOfRolls ++;
result = result + diceValue2;
i++;

} else {
}
}

System.out.println("Du fick: " + dies.toString());
System.out.println("Total poäng: " + result);
System.out.println("Antal kast: " + nrOfRolls);

System.out.println("Vill du slå nya tärningar? (Y/N)");
String ans;
ans = sc.nextLine();
} while(ans.equals("Y"));
}
}

Permalänk
Medlem

@FadiAb: vad har jag missat?

Permalänk
Medlem

@FadiAb: Du har deklarerat ans inne i do-while-loopen, så du kan inte komma åt den utanför. D.v.s.:

do { // <- Nytt block String ans; } // <- Slut på block, alla variabler deklarerade i blocket försvinner. while (ans.equals("Y"));

Du måste med andra ord deklarera alla variabler du vill använda i while-villkoret före hela loopen.

Och använd gärna code-taggar när du postar kod, det blir så svårt att läsa annars eftersom forumet äter upp indenteringen. D.v.s.:
[code]
Kod här
[/code]

Permalänk
Medlem

@perost: nu funkar allt igen och man frågar om anv vill fortsätta att slå tärningar Y/N men det händer men sen avslutas programmet
och det är bara en tärning som slås
import java.util.Scanner;
import java.util.List;
import java.util.ArrayList;

public class DiceRolls1{
public static void main(String[] args){

Scanner sc = new Scanner(System.in);
String ans;
int nrOfRolls;
int result;

do {

System.out.println("Hur många tärningar vill du slå? Välj minst 1, max 5");

int choice = sc.nextInt();

nrOfRolls = 0;
result = 0;
List<Integer> dies = new ArrayList<Integer>(choice);
int i = 0;

if (i < choice) {

int diceValue = (int)(Math.random() * 6 + 1);

dies.add(diceValue);
nrOfRolls ++;

result = result + diceValue;
i++;

if (diceValue == 6){
i--;
choice++;

System.out.println("Du fick: " + dies.toString());
System.out.println("6or är ogilitiga, två nya tärningar slås");

int diceValue2 = (int)(Math.random() * 6 + 1);
dies.add(diceValue2);

nrOfRolls ++;
result = result + diceValue2;
i++;

} else {
}

}

System.out.println("Du fick: " + dies.toString());
System.out.println("Total poäng: " + result);
System.out.println("Antal kast: " + nrOfRolls);

System.out.println("Vill du slå nya tärningar? (Y/N)");

ans = sc.nextLine();
} while(ans.equals("Y"));
}

}

(hur gör man för att infoga länk?)

Permalänk
Medlem

@Caprisonne: vad menar du med ny method? kan du utveckla det lite?

Permalänk
Medlem

För det första så fick det här mig intresserad av programmering, för det andra så tycker jag att diceValue verkar betyda olika på olika rader, men du har antagligen gjort rätt och jag är nyfiken på varför jag har fel. För det tredje så antar jag att det sista betyder börja om från början eller något liknande och då kanske det skulle hjälpa att byta while till if i sista raden, alternativt vilket jag tycker låter mer rätt, men antagligen är fel för att jag inte förstår hur programmering funkar; byt ut scan next line mot scan previous line. Förlåt om jag bara babblar på utan att hjälpa, jag är mest nyfiken på vart min logik brister och varför jag har fel.

Visa signatur

Moderkort: ASRock H61M- DGS, Processor: Intel i3 3225, Grafik: GTX 460SE, RAM 2x4 GB 1600MHz ddr3 , 1TB HDD Seagate Barracuda, 450W Antec VP450P PSU och en stor svart jävla låda.

Permalänk
Medlem
Skrivet av qwzxqwzx:

För det första så fick det här mig intresserad av programmering, för det andra så tycker jag att diceValue verkar betyda olika på olika rader, men du har antagligen gjort rätt och jag är nyfiken på varför jag har fel. För det tredje så antar jag att det sista betyder börja om från början eller något liknande och då kanske det skulle hjälpa att byta while till if i sista raden, alternativt vilket jag tycker låter mer rätt, men antagligen är fel för att jag inte förstår hur programmering funkar; byt ut scan next line mot scan previous line. Förlåt om jag bara babblar på utan att hjälpa, jag är mest nyfiken på vart min logik brister och varför jag har fel.

Du har rätt jag löste det med if sats på slutet så att man frågar användaren om hen vill fortsätta?så det blev em while loop inte en do-while. Sorry för sent svar (kan ej svara på jobbet)😁

Permalänk
Medlem

Tack alla som hjälpte med det programmet jag värdesätter alla instruktioner ni har gett det kommer att hjälpa mig i annat också