Permalänk

Java hjälp. (guessing game)

Hej, jag vill försöka mig på att göra ett så kallat guessing game. jag har kollat runt lite på internet för att se hur andra har gjort och efter det så har jag försökt själv, jag förstår konceptet och vad koden skall göra men jag får inte riktigt ihopp det ändå. Jag upskattar all hjälp/tips & feedback jag kan få

import java.util.Scanner; public class guessinggame { public static int playGame(int max) { int number = (int)(Math.random() * max) +1; } public static void main(String[] args) { System.out.println("Välkommen HiLo"); System.out.println("Välj vilken svårighetsgrad"); System.out.println("1. Lätt 1-10"); System.out.println("2. medel 1-100"); System.out.println("3. svår 1-1000"); Scanner sc = new Scanner(System.in); int num1 = sc.nextInt(); if(num1 == 1) { System.out.println("Gissa på ett tal mellan 1 & 10"); } else if (num1 == 2) { System.out.println("Gissa på ett tal mellan 1 & 100"); } else if (num1 == 3) { System.out.println("Gissa på ett tal mellan 1 & 1000"); } playGame(); { Scanner sc = new Scanner(System.in); int gissning; int tal; int antal = 0; do { System.out.print("Gissa ett tal: "); int gissning = sc.nextInt(); antal++; // Räkna upp antalet gissningar // Är gissningen större än talet? if (gissning > tal) { System.out.println("För högt!"); } // Är gissningen mindre än talet? else if (gissning < tal) { System.out.println("För lågt!"); } // Om gissningen varken är större eller mindre så måste den vara rätt! else { System.out.println("Rätt!!"); } // Fortsätt tills dess att man gissat rätt. // Hur kan man göra om man bara vill tillåta tre gissningar? } while (gissning != tal); System.out.println("Du behövde " + tal + " gissningar."); } }

La till CODE-taggar och förtydligade rubriken
Permalänk
Keeper of Traditions

Använd code-taggar så blir det lättare att läsa koden.
Sen ser jag ingen fråga? Vad är det som inte fungerar?

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Medlem
Skrivet av Dunder:

Använd code-taggar så blir det lättare att läsa koden.
Sen ser jag ingen fråga? Vad är det som inte fungerar?

Ta och kompilera koden kanske? Det blir en del fel...

Till ts: Jag har en bra version av denna på datorerna i skolan men jag har lov just nu så jag kan tyvärr inte kolla den och det var alldeles för längesen jag gjorde något själv för att komma ihåg tillräckligt...

Visa signatur

En gammal cpu från AMD. Ett par äldre grafikkort i Cross-Fire. En del minne. Gamla slö-diskar. Antik nätdel. En ok kylare. Ett nedsuttet chassi. En del fungerande tillbehör.
Ett moderkort som brann upp. Ytterligare CPU och GPU från AMD. Mer minne. En SSD och ett par hårddiskar. En nyare PSU.

Permalänk
Hedersmedlem

Jag la till CODE-taggar åt dig och förtydligade rubriken, så det blir lättare för andra att hitta tråden. Försök vara så beskrivande som möjligt när du väljer rubrik, det gör det lättare för dig att få hjälp, och för andra med liknande frågor att i framtiden hitta tråden.

Permalänk
Medlem
Visa signatur

NAS: DS918+
Laptop: Macbook Pro M1 Max 16", 1TB, 32 GB

Permalänk
Keeper of Traditions
Skrivet av Laccy:

Ta och kompilera koden kanske? Det blir en del fel...

Till ts: Jag har en bra version av denna på datorerna i skolan men jag har lov just nu så jag kan tyvärr inte kolla den och det var alldeles för längesen jag gjorde något själv för att komma ihåg tillräckligt...

Nej, TS kan ställa en riktig fråga från början. Just nu känns det bara som om personen vill ha någon som gör uppgiften åt honom. Tar man sig inte tid att ställa en fråga, varför ska andra ta sig tid att ge svar?

Visa signatur

|| Intel 8700K || Asus RTX 4070 TI Super TUF || Samsung 750 EVO 500GB & Kingston A2000 1TB & Samsung 960 EVO 250GB || Corsair RM 850x || Antec P183 || Asus G-Sync RoG Swift PG279Q || Dell XPS 15 || Thinkpad X220

The Force is like Duct Tape, it has a light side, a dark side, and holds the universe together.

Permalänk
Entusiast

Här är massor med skumheter. Jag ska försöka kommentera på det mesta.

Först och främst, försök att få rätt på konventioner, indentering, och sånt. Det blir mycket lättare att läsa koden då.
En konvention är att alltid stava klassnamn med stor bokstav, en annan är att kapitalisera alla nya ord i namnet som följer. Så din klass skulle bli GuessingGame, inte guessinggame.
Sen ska man gärna hålla alla variabel- och metodnamn på engelska. Så slipper då åka på bekymmer med åäö.

Använder du Eclipse så markera hela koden och tryck ctrl+i, det kommer fixa indenteringen åt dig.

Sen till felen:

  • Din "public static int playGame(int max)" metod överst returnerar ingenting. Det jag har markerat med fetstil betyder att den ska returnera ett heltal (int).

  • Du stänger aldrig någon av dina Scanners "sc.close()". Det är dumt att låta dem lyssna för alltid.

  • Sen vetefan vad du menar med raden: "playGame(); {". Är det att du ska skapa en ny metod? Eller försöker du kalla på playGame(int) som du skapade tidigare?

  • Du deklarerar "int gissning" två gånger.

  • Du använder aldrig variabeln antal, men jag antar att du hade tänkt använda den i sista utskriften, där du har skrivit tal.

  • Sen saknar du en slutklammer "}", men jag lyckas inte lista ut vad den ska stänga. Gissningsvis main metoden där precis innan "playGame(); {", om det är ett försök till att skapa en ny metod dvs.

Och det bör väl nämnas att dina if-satser som kollar vilken svårighetsgrad man valde aldrig gör något med det man skriver in, utöver att berätta inom vilka tal man ska gissa. Resten av spelet får inte reda på det.

Permalänk
Skrivet av Dunder:

Använd code-taggar så blir det lättare att läsa koden.
Sen ser jag ingen fråga? Vad är det som inte fungerar?

Förlåt om jag va oklar i mitt inlägg, Jag söker hjälp & tips för min kodning och har ingen mer direkt fråga förutom vad det är jag gör för fel i koden (vilket det uppenbarligen är)

Skrivet av Laccy:

Ta och kompilera koden kanske? Det blir en del fel...

Till ts: Jag har en bra version av denna på datorerna i skolan men jag har lov just nu så jag kan tyvärr inte kolla den och det var alldeles för längesen jag gjorde något själv för att komma ihåg tillräckligt...

akej typiskt

Skrivet av Palmie:

Jag la till CODE-taggar åt dig och förtydligade rubriken, så det blir lättare för andra att hitta tråden. Försök vara så beskrivande som möjligt när du väljer rubrik, det gör det lättare för dig att få hjälp, och för andra med liknande frågor att i framtiden hitta tråden.

tack

Will do!

Skrivet av Blargmode:

Här är massor med skumheter. Jag ska försöka kommentera på det mesta.

Först och främst, försök att få rätt på konventioner, indentering, och sånt. Det blir mycket lättare att läsa koden då.
En konvention är att alltid stava klassnamn med stor bokstav, en annan är att kapitalisera alla nya ord i namnet som följer. Så din klass skulle bli GuessingGame, inte guessinggame.
Sen ska man gärna hålla alla variabel- och metodnamn på engelska. Så slipper då åka på bekymmer med åäö.

Använder du Eclipse så markera hela koden och tryck ctrl+i, det kommer fixa indenteringen åt dig.

Sen till felen:

  • Din "public static int playGame(int max)" metod överst returnerar ingenting. Det jag har markerat med fetstil betyder att den ska returnera ett heltal (int).

  • Du stänger aldrig någon av dina Scanners "sc.close()". Det är dumt att låta dem lyssna för alltid.

  • Sen vetefan vad du menar med raden: "playGame(); {". Är det att du ska skapa en ny metod? Eller försöker du kalla på playGame(int) som du skapade tidigare?

  • Du deklarerar "int gissning" två gånger.

  • Du använder aldrig variabeln antal, men jag antar att du hade tänkt använda den i sista utskriften, där du har skrivit tal.

  • Sen saknar du en slutklammer "}", men jag lyckas inte lista ut vad den ska stänga. Gissningsvis main metoden där precis innan "playGame(); {", om det är ett försök till att skapa en ny metod dvs.

Och det bör väl nämnas att dina if-satser som kollar vilken svårighetsgrad man valde aldrig gör något med det man skriver in, utöver att berätta inom vilka tal man ska gissa. Resten av spelet får inte reda på det.

Tack för så utförligt svar
*hitils har jag inte lärt mig att jag skall stänga av mina scanners men tack!
*Aa jag vill skapa en ny metod som heter playGame & i den så är de meningen att själva spelet skall ta plats.
*ojdå.
*aa det var där jag tänkte använda den.
*Ja jag försökte att skapa en till metod.
okej tack!
jag upskattar verkligen all hjälp jag fått av alla hitils även om jag inte har varit så klar med vad jag vill ha hjälp med eller hur inlägget var.

Permalänk
Medlem

Blargmode tog absolut upp det allra mesta men kan tillägga en sak.

Som nämnt tidigare har du med variablen antal men använder den inte. Om det är så att du vill använda denna variabel för att visa antal gissningar ska du se till att öka den efter varje försök.

Denna variabel kan sedan användas i din do-while för att se till så det bara blir max 3 gissningar genom att kolla så du går ur do-while loopen om variabeln blir större än 3 till exempel.

Om denna variabeln används till annat kan du lägga till en annan. Poängen var att ha en variabel som du använder för att kolla hur många gissningar som gjorts som sedan kan kollas för att se om användaren ska hoppa ur while loopen.

Permalänk
Medlem

Lånar tråden! :-)

Hejsan!

Lånar tråden då jag håller på med samma "spel", ett gissnings spel där man ska gissa på en siffra som datorn har slumpat fram.

Problemet jag har är att jag inte lyckas returnera antalet gissningar man gjort för att hitta rätt nummer. Det som ska returneras är en int från metoden playgame. Är det nån som kan se vad jag har gjort för fel?

import java.util.Scanner;

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

System.out.println("Welcome to HiLo");
System.out.println("Enter which level you want to play:");
System.out.println("1. Easy 1-10");
System.out.println("2. Medium 1-100");
System.out.println("3. Hard 1-1000");

Scanner sc = new Scanner(System.in);
int choice = sc.nextInt();
if (choice == 1) {
playGame(10);
} else if (choice == 2) {
playGame(100);
} else if (choice == 3) {
playGame(1000);
} else {
System.out.println("Wrong input");
}
System.out.println(nrOfGuesses);

}

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("Guess a number between 1-"+maxNumber);
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("Your guess is to low");
} else if (guess > answer) {
System.out.println("Your guess is to high");
} else if (guess == answer) {
System.out.println("Great, you guessed the right number");
}
}
}

Permalänk
Inaktiv

@ripelipi du deklarerar nrOfGuesses i metoden och returnerar den, men du använder aldrig det returnerade värdet i din main metod.

Du borde ha något i stil med guesses = playGame(10); i dina if-else satser