Vinnaren i pepparkakshustävlingen!
  • 1
  • 2
2021-02-22, 10:34
  #1
Medlem
Hej gott folk. Nu har jag fastnat ordentligt och behöver verkligen hjälp. Vet någon hur man får fram antalet gissningar i det här programmet jag har gjort?




Kod:
import java.util.Scanner;

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

System.out.println("Welcom to HiLo!");
System.out.println("Difficulty");
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);
System.out.println("Guess a number between 0-10.");

} else if (choice == 2) {
playGame(100);
System.out.println("Guess a number between 0-100.");

} else if (choice == 3) {
playGame(1000);
System.out.println("Guess a number between 0-1000.");

}

}

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

System.out.println("Guess i number between 1 - " + maxNumber);


int guess = -1;

while (guess != number) {
guess = sc.nextInt();
giveResponse(guess, number);

}
return guess;

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

if (guess < answer) {
System.out.println("Too low, try agian!");
} else if (guess > answer) {
System.out.println("Too high, try agian!");
} else if (guess == answer) {
System.out.println("GOOD WORK.");
System.out.println("You guessed in" +----+ "attempts.");

}

}

}
__________________
Senast redigerad av Proton 2021-02-22 kl. 11:13.
Citera
2021-02-22, 10:44
  #2
Medlem
JohannesSnajdares avatar
Lägg in en variabel "int number_of_guesses = 0" innan din while-loop i playGame och inkrementera den med 1 efter varje gissning. Skicka sedan med den variabeln till giveResponse() och skriv ut den om man gissade rätt.

Och: använd code-taggar när du postar kod - det blir så mycket mer lättläst då

Kod:
int exempel = 0;
while(exempel < 1000) {
   exempel += 1;
}
Citera
2021-02-22, 11:15
  #3
Moderator
Protons avatar
Citat:
Ursprungligen postat av am.1897
Hej gott folk. Nu har jag fastnat ordentligt och behöver verkligen hjälp. Vet någon hur man får fram antalet gissningar i det här programmet jag har gjort?




Kod:
import java.util.Scanner;

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

System.out.println("Welcom to HiLo!");
System.out.println("Difficulty");
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);
System.out.println("Guess a number between 0-10.");

} else if (choice == 2) {
playGame(100);
System.out.println("Guess a number between 0-100.");

} else if (choice == 3) {
playGame(1000);
System.out.println("Guess a number between 0-1000.");

}

}

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

System.out.println("Guess i number between 1 - " + maxNumber);


int guess = -1;

while (guess != number) {
guess = sc.nextInt();
giveResponse(guess, number);

}
return guess;

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

if (guess < answer) {
System.out.println("Too low, try agian!");
} else if (guess > answer) {
System.out.println("Too high, try agian!");
} else if (guess == answer) {
System.out.println("GOOD WORK.");
System.out.println("You guessed in" +----+ "attempts.");

}

}

}
Tills nästa gång vore det även trevligt med lite indenteringar i din kod så den går att läsa med.
Citera
2021-02-22, 11:27
  #4
Medlem
Citat:
Ursprungligen postat av Proton
Tills nästa gång vore det även trevligt med lite indenteringar i din kod så den går att läsa med.
Sorry jag är ganska ny på FB, jag ska göra mitt bästa till nästa gång:
Citera
2021-02-22, 11:31
  #5
Medlem
Citat:
Ursprungligen postat av JohannesSnajdare
Lägg in en variabel "int number_of_guesses = 0" innan din while-loop i playGame och inkrementera den med 1 efter varje gissning. Skicka sedan med den variabeln till giveResponse() och skriv ut den om man gissade rätt.

Och: använd code-taggar när du postar kod - det blir så mycket mer lättläst då

Kod:
int exempel = 0;
while(exempel < 1000) {
   exempel += 1;
}


Sorry jag är ganska ny här på FB, jag ska göra mitt bästa till nästa gg.
men den koden som du nämnde gav mig error längst ner på +nrOfGuesses+ mellan

nrOfGuesses är namnet på variabeln
Citera
2021-02-22, 12:00
  #6
Moderator
Protons avatar
Citat:
Ursprungligen postat av am.1897
Sorry jag är ganska ny på FB, jag ska göra mitt bästa till nästa gång:
Det är för din egen skull med du indenterar så du kan läsa din egen kod.
Citat:
Ursprungligen postat av am.1897
Sorry jag är ganska ny här på FB, jag ska göra mitt bästa till nästa gg.
men den koden som du nämnde gav mig error längst ner på +nrOfGuesses+ mellan

nrOfGuesses är namnet på variabeln
Det man försöker säga är att du behöver en räknare på hur många försök man har gjort.

Att skriva att "det fungerar inte" eller "jag får ett fel" är en helt oanvändbar upplysning i sammanhanget. Kompilatorn talar om för dig VAD för fel du har i din kod, klistra in den så blir det enklare att förstå.

Den säger ju inte direkt heller "det fungerar inte" om du har kompileringsfel i din kod, right?
Citera
2021-02-22, 12:17
  #7
Medlem
Citat:
Ursprungligen postat av Proton
Det är för din egen skull med du indenterar så du kan läsa din egen kod.

Det man försöker säga är att du behöver en räknare på hur många försök man har gjort.

Att skriva att "det fungerar inte" eller "jag får ett fel" är en helt oanvändbar upplysning i sammanhanget. Kompilatorn talar om för dig VAD för fel du har i din kod, klistra in den så blir det enklare att förstå.

Den säger ju inte direkt heller "det fungerar inte" om du har kompileringsfel i din kod, right?


Kod:
Citat:
import java.util.Scanner; public class nextwork1 { public static void main(String[] args) { System.out.println("Welcom to HiLo!"); System.out.println("Difficulty"); 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); System.out.println("Guess a number between 0-10."); } else if (choice == 2) { playGame(100); System.out.println("Guess a number between 0-100."); } else if (choice == 3) { playGame(1000); System.out.println("Guess a number between 0-1000."); } } public static int playGame(int maxNumber) { Scanner sc = new Scanner(System.in); int number = (int)(Math.random() * maxNumber) + 1; System.out.println("Guess i number between 1 - " + maxNumber); int guess = -1; int nrOfGuesses = 0; while (guess != number) { guess = sc.nextInt(); giveResponse(guess, number); } while(nrOfGuesses < 1000) { nrOfGuesses += 1; } return guess; } public static void giveResponse(int guess, int answer) { if (guess < answer) { System.out.println("Too low, try agian!"); } else if (guess > answer) { System.out.println("Too high, try agian!"); } else if (guess == answer) { System.out.println("GOOD WORK."); System.out.println("You guessed in "+nrOfGuesses+" attempts."); } } }

Kod:
Citat:
nextwork1.java:63: error: cannot find symbol System.out.println("You guessed in "+nrOfGuesses+" attempts."); ^ symbol: variable nrOfGuesses location: class nextwork1 1 error

Detta fick jag efter jag gjorde om den
Citera
2021-02-22, 13:11
  #8
Medlem
Citat:
Ursprungligen postat av am.1897
[code]
Detta fick jag efter jag gjorde om den
Variablen nrOfGuesses existerar inte i den metod där du försöker skriva ut dess värde. Du måste skicka med den i anropet.
Citera
2021-02-22, 13:41
  #9
Medlem
Citat:
Ursprungligen postat av erkki17
Variablen nrOfGuesses existerar inte i den metod där du försöker skriva ut dess värde. Du måste skicka med den i anropet.


Jag hänger inte med kan du förklara bättre? eller visa?
Citera
2021-02-22, 14:09
  #10
Medlem
Citat:
Ursprungligen postat av am.1897
Jag hänger inte med kan du förklara bättre? eller visa?
Variabeln är definierad i playGame och du försöker använda den i giveResponse. Du behöver skicka med variabeln i anropet till giveResponse.
Citera
2021-02-22, 15:58
  #11
Medlem
Citat:


Kod:
import java.util.Scanner;

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

         System.out.println("Welcom to HiLo!");
         System.out.println("Difficulty");
         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);
            System.out.println("Guess a number between 0-10.");

         } else if (choice == 2) {
            playGame(100);
            System.out.println("Guess a number between 0-100.");

         } else if (choice == 3) {
            playGame(1000);
            System.out.println("Guess a number between 0-1000.");

        }

    }

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

        System.out.println("Guess i number between 1 - " + maxNumber); 
        
        
        int guess = -1;
        int nrOfGuesses = 0; // Deklarerad, här börjar 'nrOfGuesses' leva

        while (guess != number) { 
            guess = sc.nextInt(); 
            giveResponse(guess, number); 

        } 
        while(nrOfGuesses < 1000) {
             nrOfGuesses += 1;
        }
        return guess; 
        // Här slutar 'nrOfGuesses' leva
    } 

    public static void giveResponse(int guess, int answer) {

        if (guess < answer) {
            System.out.println("Too low, try agian!");
        } else if (guess > answer) {
            System.out.println("Too high, try agian!");
        } else if (guess == answer) {
            System.out.println("GOOD WORK.");
            System.out.println("You guessed in "+nrOfGuesses+" attempts.");
            
        }

    }

}


Du försöker skriva ut en variabel där den inte "lever". Som många andra skrivit så måste du låta giveResponse acceptera en till variabel och ta med 'nrOfGuesses' i anropet:

Citat:
public static void giveResponse(int guess, int answer, int nrOfGuesses)

Då kan du kalla 'giveResponse' (från din metod 'playGame') som:

Citat:
Kod:
 
while (guess != number) { 
            guess = sc.nextInt(); 
            giveResponse(guess, number, nrOfGuesses); 
        }
Citera
2021-02-22, 21:00
  #12
Moderator
Protons avatar
Citat:
Ursprungligen postat av am.1897
Jag hänger inte med kan du förklara bättre? eller visa?
Som nybörjare är det enklast att anta att dina variabler har ett block-scope, de kommer inte finnas utanför detta block. Variabler som deklareras utanför blocket kommer dock vara åtkomliga i sub-block, men det gäller inte över metodgränser.

Block definieras i ditt fall enklast som det som omsluts av måsvingar, exempelvis if-satser, metoder, loopar etc.

Beakta denna koodsnutt (kommer inte kompilera men bra för att visa på effekterna)

Kod:
public void a(){
int v1 = 0;
b();
System.out.println(v1);
}

public void b(){
int v1 = 1;
System.out.println(v1);
}

Koden kommer skriva ut
1
0

Varför?

I metoden a är v1 deklarerad som en lokal variabel, den "tar slut" i slutet på metoden, detsamma gäller variabeln i metod b.

Du initierar lokala variabeln v1 i a till 0, sedan exekverar du metod b där en till variabel initieras till 1 och denna skrivs ut.
Exekveringen fortsätter sedan i a när b kört klart (och dess lokala variabel försvunnit) med att skriva ut det som lades i den lokala variabeln i a, dvs 0.

Detsamma gäller iffar, variabler som deklareras inne i en if kommer försvinna ur scope när måsvingarna tar slut

Kod:
if(someCondition){
int a = 0;
//mer kod
}
System.out.println(a); //KOMPILERAR EJ, a är inte tillgängligt då den försvunnit ur scope med iffen

Däremot kompilerar följande
Kod:
int a = 0;
if(condition){
a = 1;
}
System.out.println(a); //OK, a är deklarerad i ett scope som fortfarande finns här.

är väl enklaste sättet att förklara det på just nu.
Citera
  • 1
  • 2

Stöd Flashback

Flashback finansieras genom donationer från våra medlemmar och besökare. Det är med hjälp av dig vi kan fortsätta erbjuda en fri samhällsdebatt. Tack för ditt stöd!

Stöd Flashback