Premiär! Fyndchans i SweClockers Månadens Drop
Permalänk
Medlem

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!

Permalänk
Medlem

@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.

Visa signatur

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

Permalänk
Medlem
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; }

Visa signatur

Stationär: Core i9 13900k | Asus X790 ROG Strix Gaming-F | 32GB DDR5 | RX 7900 XT | Lian Li PC-O11 dynamic evo
Laptop: Macbook Air | Apple M1

Permalänk
Medlem

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

Permalänk
Medlem

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

Permalänk
Medlem
Skrivet av LdyUx:

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

Hej, jag sitter med en liknande uppgift. Spelet fungerar men det är någonstans det brister. Vore tacksam om du har möjligheten att lägga ut din slutgiltiga spel

Permalänk
Medlem
Skrivet av Daniella:

Hej, jag sitter med en liknande uppgift. Spelet fungerar men det är någonstans det brister. Vore tacksam om du har möjligheten att lägga ut din slutgiltiga spel

Eller så postar du DIN kod, berättar vad som brister och sen kan "vi" kanske hjälpa dig.