Trädvy Permalänk
Medlem
Registrerad
Maj 2019

Java programmering HiLo

Jag är nybörjare inom programmering och försöker göra ett HiLo spel, det har gått bra hittills och jag sitter nu bara med två problem innan programmet är klart.
1) Texten : "Välj ett tal mellan 1- maxNumber" printas även efter att man har gissat rätt och "Grattis du har klarat det" skrivs ut. Är det för att det är en Do while loop som "Välj ett tal..." ligger i? Hur får jag den att stoppas så att det inte skrivs ut efter rätt gissning?

2) Jag vill att antalet gissningar skrivs ut på slutet men jag lyckas inte klura ut hur man gör det, handlar det om att man ska ha det inskrivet i Main och sen return i sista metoden? När jag skriver in:
("Antal gissningar:" + nrOfGuesses+); så får jag error om att värdet inte kan hittas, måste jag kanske skriva in värdet i den metoden? Eller kan det hämtas från tidigare metoder på något sätt/måste den skrivas i mainmetoden?

import java.util.Scanner;

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

Scanner sc = new Scanner(System.in);

System.out.println("Välkommen till HiLo!");
System.out.println("Vilken svårighetsgrad väljer du?");
System.out.println("1) Lätt: 0-10");
System.out.println("2) Mellan: 0-100");
System.out.println("3) Svår: 0-1000");

int choice = sc.nextInt();

if(choice == 1) {
playGame(10);
System.out.println("Gissa på ett tal mellan 0 och 10.");

} else if(choice == 2) {
playGame(100);
System.out.println("Gissa på ett tal mellan 0 och 100.");

} else if(choice == 3) {
playGame(1000);
System.out.println("Gissa på ett tal mellan 0 och 1000.");

}

}

public static int playGame(int maxNumber){
Scanner sc = new Scanner(System.in);
int number = (int)(Math.random() * maxNumber) +1;

int guess;
int nrOfGuesses = 0;

do{
System.out.println("Gissa på ett nummer mellan 1-"+ maxNumber); //Denna rad printas även när användaren gissat rätt
nrOfGuesses = nrOfGuesses + 1;
guess = sc.nextInt();

if (guess < number) {
giveResponce(number,guess);

} else if (guess > number) {
giveResponce(number,guess);

} else if (guess == number) {
giveResponce(number,guess);

}

} while (guess != number);
return nrOfGuesses;

}
public static void giveResponce(int answer, int guess) {

if (guess < answer) {
System.out.println("För lågt");
} else if (guess > answer) {
System.out.println("För högt");
} else if (guess == answer) {
System.out.println("Grattis, du har gissat rätt!");
//Hur får jag fram antalet gissningar?
}

}

}

All hjälp uppskattas!

Trädvy Permalänk
Medlem
Plats
Falun
Registrerad
Dec 2003

@LdyUx:

Välkommen till forumet!

I fortsättningen kan du skriva in din kod mellan två speciella taggar så blir det enklare för oss att läsa.

[code]
//Din kod här
[/code]

Då ser det ut på detta vis istället:

import java.util.Scanner; public class HiLo { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("Välkommen till HiLo!"); System.out.println("Vilken svårighetsgrad väljer du?"); System.out.println("1) Lätt: 0-10"); System.out.println("2) Mellan: 0-100"); System.out.println("3) Svår: 0-1000"); int choice = sc.nextInt(); if (choice == 1) { playGame(10); System.out.println("Gissa på ett tal mellan 0 och 10."); } else if (choice == 2) { playGame(100); System.out.println("Gissa på ett tal mellan 0 och 100."); } else if (choice == 3) { playGame(1000); System.out.println("Gissa på ett tal mellan 0 och 1000."); } } public static int playGame(int maxNumber) { Scanner sc = new Scanner(System.in); int number = (int)(Math.random() * maxNumber) + 1; int guess; int nrOfGuesses = 0; do { System.out.println("Gissa på ett nummer mellan 1-" + maxNumber); //Denna rad printas även när användaren gissat rätt nrOfGuesses = nrOfGuesses + 1; guess = sc.nextInt(); if (guess < number) { giveResponce(number, guess); } else if (guess > number) { giveResponce(number, guess); } else if (guess == number) { giveResponce(number, guess); } } while (guess != number); return nrOfGuesses; } public static void giveResponce(int answer, int guess) { if (guess < answer) { System.out.println("För lågt"); } else if (guess > answer) { System.out.println("För högt"); } else if (guess == answer) { System.out.println("Grattis, du har gissat rätt!"); //Hur får jag fram antalet gissningar? } } }

1. Det är inget direkt fel med loopen. Spelet ser ut att fungera som önskat. Spelet stoppas ju när korrekt gissning har skrivits in. Du har en hel del kod som skrivs två gånger. Du gör samma if-satser två gånger. Du kan ta bort if-satserna i playGame() och enbart kalla på giveResponse(). Alternativt, ta bort giveResponse() och skriva ut all information direkt i playGame().

2. Gör så att giveResponse() tar in ett extra argument vilket är antalet gissningar.

Övriga kommentarer:
Ta bort så att din playGame() inte returnerar något. Det bör vara en void eftersom du ändå inte använder resultatet från metoden till något.

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

Trädvy Permalänk
Medlem
Plats
Stockholm
Registrerad
Okt 2008
Skrivet av LdyUx:

1) Texten : "Välj ett tal mellan 1- maxNumber" printas även efter att man har gissat rätt och "Grattis du har klarat det" skrivs ut. Är det för att det är en Do while loop som "Välj ett tal..." ligger i? Hur får jag den att stoppas så att det inte skrivs ut efter rätt gissning?

2) Jag vill att antalet gissningar skrivs ut på slutet men jag lyckas inte klura ut hur man gör det, handlar det om att man ska ha det inskrivet i Main och sen return i sista metoden? När jag skriver in:
("Antal gissningar:" + nrOfGuesses+); så får jag error om att värdet inte kan hittas, måste jag kanske skriva in värdet i den metoden? Eller kan det hämtas från tidigare metoder på något sätt/måste den skrivas i mainmetoden?

1)
Du gör utskriften dubbelt, först medan du spelar spelar och sen en gång till efter.
Se över den här biten specifikt:

f (choice == 1) { playGame(10); System.out.println("Gissa på ett tal mellan 0 och 10."); } else if (choice == 2) { playGame(100); System.out.println("Gissa på ett tal mellan 0 och 100."); } else if (choice == 3) { playGame(1000); System.out.println("Gissa på ett tal mellan 0 och 1000."); }

2) Metoden du försöker göra utskriften i har ingen vetskap om variabeln.

Du behöver deklarera det du försöker ut och hämta det på ett okej vis.
t.ex.:

public static void printNumber() { getNumber(); System.out.print(number); <--- Vad är number? } public static int getNumber() { int number = 1; return number; }

Du kan däremot göra såhär:

public static void printNumber() { int number = getNumber(); System.out.print(number); <--- Nu skriver den ut number } public static int getNumber() { int number = 1; return number; }

alternativt:

public static void printNumber() { System.out.print(getNumber()); <--- Nu skriver den ut number } public static int getNumber() { int number = 1; return number; }

Dator 1: i7 5820k | Asus X99-S | 16GB DDR4 | GTX 1080ti SLI | NZXT H440
Dator 2: i7 5820k | Asrock X99M | 32GB DDR4 | GTX 970 | SC-512N1-L Capture Card | Fractal Design Node 804
Dator 3: i5 2500 | Asus P8Z77-M | 8GB DDR3 | Fractal Design r3
Dator 4: Macbook Pro 2017 | i5 7360U | 8GB DDR3

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@Leedow: Stort tack för inputen, det var till stor hjälp och mitt spel är nu klart!

Trädvy Permalänk
Medlem
Registrerad
Maj 2019

@MaxieTheHatter: Stort tack! Ändrade en del i koden och nu fungerar det felfritt!