2018-02-15, 16:37
  #1
Medlem
försöker skapa ett HiLo program här och skiten verkar inte fungera. Har stopp i huvudet atm med så det blir inte bättre. Här är koden:



HTML-kod:
import java.util.Scanner;

public class HiLo { 
   public static int maxNumber;
   public static int counter;
   // public static int playGame(int maxNumber);

   public static void main(String [] args) {

   Scanner s = new Scanner(System.in);

   int choice[] = {10, 100, 1000};
   counter=1;

   System.out.println("Välkommen till HiLo!");
   System.out.println("Välj din svårighetsgrad!");
   System.out.println("1. Lätt (1-10)");
   System.out.println("2. Mellan (1-100)");
   System.out.println("3. Svårt (1-1000)");

      int player = s.nextInt();

      if(player == 1) {
      playGame(choice[0]);

}
      else if(player == 2) {
      playGame(choice[1]);

}
      else if(player == 3) {
      playGame(choice[2]);

}

      else {
      System.out.println("Välj ett tal mellan 1 och 3 nästa gång");

}
         s.close();
}

         static int playGame(int maxNumber)
{

         Scanner s = new Scanner(System.in);

           int answer = (int)(Math.random() * maxNumber) +1; {

            System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
           
            int guess;

            do {
             guess = s.nextInt();
             giveResponse(guess, answer);
             counter ++;

}           while(guess != answer);

            return guess;
}
}

                static void giveResponse(int guess, int answer){

                   if (guess < 1) {
                   System.out.println("För lågt värde"); 
}

                   else if (guess > maxNumber){
                       System.out.println("För högt värde"); 
}

              else if (guess < answer) {

               System.out.println("Gissningen var för låg!");
               System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
}

               else if (guess > answer) {

                System.out.println("Gissningen var för hög!");
                System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
}

                  else if (guess == answer) {

                  System.out.println("Helt rätt!");
                  System.out.println("Du lyckades på "+counter+" försök");

}
}

}

startar programmet, väljer 1, Gissar jag på t. ex 5 står det ibland för högt värde, gissa på allt ända ner till 0, när jag kommer till 0 står det "för lågt" och så testar ja typ 9 så är det rätt. Men Reten av koderna körs inte? ...
Citera
2018-02-15, 16:55
  #2
Moderator
Protons avatar
Citat:
Ursprungligen postat av XX1
försöker skapa ett HiLo program här och skiten verkar inte fungera. Har stopp i huvudet atm med så det blir inte bättre. Här är koden:



HTML-kod:
import java.util.Scanner;

public class HiLo { 
   public static int maxNumber;
   public static int counter;
   // public static int playGame(int maxNumber);

   public static void main(String [] args) {

   Scanner s = new Scanner(System.in);

   int choice[] = {10, 100, 1000};
   counter=1;

   System.out.println("Välkommen till HiLo!");
   System.out.println("Välj din svårighetsgrad!");
   System.out.println("1. Lätt (1-10)");
   System.out.println("2. Mellan (1-100)");
   System.out.println("3. Svårt (1-1000)");

      int player = s.nextInt();

      if(player == 1) {
      playGame(choice[0]);

}
      else if(player == 2) {
      playGame(choice[1]);

}
      else if(player == 3) {
      playGame(choice[2]);

}

      else {
      System.out.println("Välj ett tal mellan 1 och 3 nästa gång");

}
         s.close();
}

         static int playGame(int maxNumber)
{

         Scanner s = new Scanner(System.in);

           int answer = (int)(Math.random() * maxNumber) +1; {

            System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
           
            int guess;

            do {
             guess = s.nextInt();
             giveResponse(guess, answer);
             counter ++;

}           while(guess != answer);

            return guess;
}
}

                static void giveResponse(int guess, int answer){

                   if (guess < 1) {
                   System.out.println("För lågt värde"); 
}

                   else if (guess > maxNumber){
                       System.out.println("För högt värde"); 
}

              else if (guess < answer) {

               System.out.println("Gissningen var för låg!");
               System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
}

               else if (guess > answer) {

                System.out.println("Gissningen var för hög!");
                System.out.println("Gissa på ett tal mellan 1 och "+maxNumber);
}

                  else if (guess == answer) {

                  System.out.println("Helt rätt!");
                  System.out.println("Du lyckades på "+counter+" försök");

}
}

}

startar programmet, väljer 1, Gissar jag på t. ex 5 står det ibland för högt värde, gissa på allt ända ner till 0, när jag kommer till 0 står det "för lågt" och så testar ja typ 9 så är det rätt. Men Reten av koderna körs inte? ...
Vad gör måsvingen på raden
Kod:
int answer = (int)(Math.random() * maxNumber) +1; {
för något?

Förstår inte dina indenteringar, koden blir ju i det närmaste oläslig i nuvarande skick dessutom.

Vad betyder resten av koden?

Vad är det du vill ska hända egentligen? Verkar ju som om den gör rätt i nån bemärkelse eftersom du får ut "för högt" och "för lågt"?
Citera
2018-02-15, 17:02
  #3
Medlem
Citat:
Ursprungligen postat av Proton
Vad gör måsvingen på raden
Kod:
int answer = (int)(Math.random() * maxNumber) +1; {
för något?

Förstår inte dina indenteringar, koden blir ju i det närmaste oläslig i nuvarande skick dessutom.

Vad betyder resten av koden?

Vad är det du vill ska hända egentligen? Verkar ju som om den gör rätt i nån bemärkelse eftersom du får ut "för högt" och "för lågt"?


Du ska välja en svårighetsgrad, sedan ska du gissa på en siffra. Vi säger att du väljer enkel svårighets grad (mellan 1-10). Du gissar på siffran 5 säger vi, då kommer datorn säga att det antingen är för högt eller för lågt, sedan gissar du på 4 säger vi och det är rätt svar. Då kommer det skrivas ut "helt rätt!" , du klarade det på x antal försök, i detta fall blir det 2 försök. Joo detta är programmering A (grundkurs) så det är svårt, så fort jag får det att fungera ska jag försöka göra det lite mer läsligt, men jag beklagar om det är för hemskt, du ska se mig skriva i verkligheten, det är ännu värre
Citera
2018-02-15, 18:19
  #4
Medlem
Okej har testat att skriva om skiten, problemet är att nu är mitt problem att jag måste trycka in första gissningen två gånger innan datorn registrerar det och säger att det antingen är för högt eller lågt. Vart är problemet? Någon som kan? Klistrar in koden


HTML-kod:
import java.util.Scanner;
   public class HiLo { 
      public static int counter;
      
   
   public static void main(String [] args) {
         
         Scanner s = new Scanner(System.in);
         
         int choice[] = {10, 100, 1000};
         counter=1;
         
         System.out.println("Välkommen till HiLo!");
         System.out.println("Välj svårighetsgrad!");
         System.out.println("Lätt (1-10)");
         System.out.println("Mellan (1-100)");
         System.out.println("Svår (1-1000)");

         
         int player = s.nextInt();
         
         
         if(player == 1) {
         playGame(choice[0]);

      }
         else if(player == 2) {
         playGame(choice[1]);

      }
         else if(player == 3) {
         playGame(choice[2]);

      }
      }
         static int playGame(int maxNumber) {
         Scanner s = new Scanner(System.in);

         int answer = (int)(Math.random() * maxNumber) +1;

         System.out.println("Gissa på ett tal mellan 1 - "+maxNumber);
         int guess = s.nextInt();
         

         while(guess !=answer){
         guess = s.nextInt();
         giveResponse(guess, answer);
         counter ++;
     }
         return guess;
         
      }
         static void giveResponse(int guess, int answer){
         
         
         if (guess < answer) {
         
         System.out.println("Gissningen är för låg!");
      }else if (guess > answer) {
         
         System.out.println("Gissningen är för hög!");
      }else if (guess == answer) {
         
         System.out.println("Helt rätt!");
         System.out.println("Du lyckades på "+counter+" försök!.");  

}
} 
}
Citera
2018-02-15, 19:10
  #5
Medlem
Citat:
Ursprungligen postat av XX1
Okej har testat att skriva om skiten, problemet är att nu är mitt problem att jag måste trycka in första gissningen två gånger innan datorn registrerar det och säger att det antingen är för högt eller lågt. Vart är problemet? Någon som kan? Klistrar in koden


HTML-kod:
import java.util.Scanner;
   public class HiLo { 
      public static int counter;
      
   
   public static void main(String [] args) {
         
         Scanner s = new Scanner(System.in);
         
         int choice[] = {10, 100, 1000};
         counter=1;
         
         System.out.println("Välkommen till HiLo!");
         System.out.println("Välj svårighetsgrad!");
         System.out.println("Lätt (1-10)");
         System.out.println("Mellan (1-100)");
         System.out.println("Svår (1-1000)");

         
         int player = s.nextInt();
         
         
         if(player == 1) {
         playGame(choice[0]);

      }
         else if(player == 2) {
         playGame(choice[1]);

      }
         else if(player == 3) {
         playGame(choice[2]);

      }
      }
         static int playGame(int maxNumber) {
         Scanner s = new Scanner(System.in);

         int answer = (int)(Math.random() * maxNumber) +1;

         System.out.println("Gissa på ett tal mellan 1 - "+maxNumber);
         int guess = s.nextInt();
         

         while(guess !=answer){
         guess = s.nextInt();
         giveResponse(guess, answer);
         counter ++;
     }
         return guess;
         
      }
         static void giveResponse(int guess, int answer){
         
         
         if (guess < answer) {
         
         System.out.println("Gissningen är för låg!");
      }else if (guess > answer) {
         
         System.out.println("Gissningen är för hög!");
      }else if (guess == answer) {
         
         System.out.println("Helt rätt!");
         System.out.println("Du lyckades på "+counter+" försök!.");  

}
} 
}
Här är en bättre indentering
Kod:
import java.util.Scanner;

public class 
HiLo {
    public static 
int counter;

    public static 
void main(String[] args) {

        
Scanner s = new Scanner(System.in);

        
int choice[] = { 101001000 };
        
counter 1;

        
System.out.println("Välkommen till HiLo!");
        
System.out.println("Välj svårighetsgrad!");
        
System.out.println("Lätt (1-10)");
        
System.out.println("Mellan (1-100)");
        
System.out.println("Svår (1-1000)");

        
int player s.nextInt();

        if (
player == 1) {
            
playGame(choice[0]);
        } else if (
player == 2) {
            
playGame(choice[1]);
        } else if (
player == 3) {
            
playGame(choice[2]);
        }
    }

    static 
int playGame(int maxNumber) {
        
Scanner s = new Scanner(System.in);

        
int answer = (int) (Math.random() * maxNumber) + 1;

        
System.out.println("Gissa på ett tal mellan 1 - " maxNumber);
        
int guess s.nextInt();

        while (
guess != answer) {
            
guess s.nextInt();
            
giveResponse(guessanswer);
            
counter++;
        }
        return 
guess;

    }

    static 
void giveResponse(int guessint answer) {

        if (
guess answer) {
            
System.out.println("Gissningen är för låg!");
        } else if (
guess answer) {
            
System.out.println("Gissningen är för hög!");
        } else if (
guess == answer) {
            
System.out.println("Helt rätt!");
            
System.out.println("Du lyckades på " counter " försök!.");
        }
    }

Först skriver programmet ut:
Välj svårighetsgrad!
Lätt (1-10)
Mellan (1-100)
Svår (1-1000)

Sen läser du in vilken player (1, 2 eller 3) som ska spela. Antagligen så borde det stå:
Välj svårighetsgrad! Skriv 1, 2 eller 3:
1. Lätt (1-10)
2. Mellan (1-100)
3. Svår (1-1000)

När spelet startar så läser du först in ett tal och kollar om det är rätt svar utan att skriva ut något. Sen i while-loopen så läser du i nästa tal och validerar det. Om du hade skrivit in rätt tal första gången så hade inget alls skrivits ut eftersom du inte går in i loopen. Programmet hade bara terminerat.
Skippa första inläsningen och initiera guess till -1 så fungerar det.
__________________
Senast redigerad av e7andy 2018-02-15 kl. 19:13.
Citera
2018-02-15, 19:35
  #6
Medlem
Citat:
Ursprungligen postat av e7andy
Här är en bättre indentering
Kod:
import java.util.Scanner;

public class 
HiLo {
    public static 
int counter;

    public static 
void main(String[] args) {

        
Scanner s = new Scanner(System.in);

        
int choice[] = { 101001000 };
        
counter 1;

        
System.out.println("Välkommen till HiLo!");
        
System.out.println("Välj svårighetsgrad!");
        
System.out.println("Lätt (1-10)");
        
System.out.println("Mellan (1-100)");
        
System.out.println("Svår (1-1000)");

        
int player s.nextInt();

        if (
player == 1) {
            
playGame(choice[0]);
        } else if (
player == 2) {
            
playGame(choice[1]);
        } else if (
player == 3) {
            
playGame(choice[2]);
        }
    }

    static 
int playGame(int maxNumber) {
        
Scanner s = new Scanner(System.in);

        
int answer = (int) (Math.random() * maxNumber) + 1;

        
System.out.println("Gissa på ett tal mellan 1 - " maxNumber);
        
int guess s.nextInt();

        while (
guess != answer) {
            
guess s.nextInt();
            
giveResponse(guessanswer);
            
counter++;
        }
        return 
guess;

    }

    static 
void giveResponse(int guessint answer) {

        if (
guess answer) {
            
System.out.println("Gissningen är för låg!");
        } else if (
guess answer) {
            
System.out.println("Gissningen är för hög!");
        } else if (
guess == answer) {
            
System.out.println("Helt rätt!");
            
System.out.println("Du lyckades på " counter " försök!.");
        }
    }

Först skriver programmet ut:
Välj svårighetsgrad!
Lätt (1-10)
Mellan (1-100)
Svår (1-1000)

Sen läser du in vilken player (1, 2 eller 3) som ska spela. Antagligen så borde det stå:
Välj svårighetsgrad! Skriv 1, 2 eller 3:
1. Lätt (1-10)
2. Mellan (1-100)
3. Svår (1-1000)

När spelet startar så läser du först in ett tal och kollar om det är rätt svar utan att skriva ut något. Sen i while-loopen så läser du i nästa tal och validerar det. Om du hade skrivit in rätt tal första gången så hade inget alls skrivits ut eftersom du inte går in i loopen. Programmet hade bara terminerat.
Skippa första inläsningen och initiera guess till -1 så fungerar det.

Problemet är att jag måste ha den inläsningen eller det måste vara så. Dock undrar jag, Vart är det som jag ska initiera guess till -1? Blev lite förvirrad nu...
Citera
2018-02-15, 22:35
  #7
Medlem
Någon??
Citera
2018-02-15, 22:49
  #8
Medlem
Citat:
Ursprungligen postat av XX1
Problemet är att jag måste ha den inläsningen eller det måste vara så. Dock undrar jag, Vart är det som jag ska initiera guess till -1? Blev lite förvirrad nu...
Varför måste det vara så?

Det här fungerar ju:
Kod:
static int playGame(int maxNumber) { 
        
Scanner s = new Scanner(System.in); 

        
int answer = (int) (Math.random() * maxNumber) + 1

        
System.out.println("Gissa på ett tal mellan 1 - " maxNumber); 
        
int guess = -1;

        while (
guess != answer) { 
            
guess s.nextInt(); 
            
giveResponse(guessanswer); 
            
counter++; 
        } 
        return 
guess

Där initerar jag guess till -1 och så fungerar allt perfekt.
Citera
2018-02-15, 23:43
  #9
Medlem
Citat:
Ursprungligen postat av e7andy
Varför måste det vara så?

Det här fungerar ju:
Kod:
static int playGame(int maxNumber) { 
        
Scanner s = new Scanner(System.in); 

        
int answer = (int) (Math.random() * maxNumber) + 1

        
System.out.println("Gissa på ett tal mellan 1 - " maxNumber); 
        
int guess = -1;

        while (
guess != answer) { 
            
guess s.nextInt(); 
            
giveResponse(guessanswer); 
            
counter++; 
        } 
        return 
guess

Där initerar jag guess till -1 och så fungerar allt perfekt.

WOW TACK SOM FAN ALLTSÅ!!!!! Du är så grym!! Men snälla kan du förklara varför det fungerade med -1 och varför inte s.nextint(); ? Vad är det som gjorde att det inte fungerade eller vad gjorde -1?
Citera
2018-02-15, 23:46
  #10
Medlem
Jag testade även nu att sätta det lika med 0 istället för -1, vad är skillnaden? Hmm!
Citera
2018-02-16, 07:02
  #11
Medlem
Citat:
Ursprungligen postat av XX1
WOW TACK SOM FAN ALLTSÅ!!!!! Du är så grym!! Men snälla kan du förklara varför det fungerade med -1 och varför inte s.nextint(); ? Vad är det som gjorde att det inte fungerade eller vad gjorde -1?
Med s.nextint() så läser du in ett tal och sen i loopen läser du in ett nytt tal och validerar det. Det är därför du måste skriva in talet två gånger för att det skulle fungera.
Jag valde -1 som initialt värde för det ligger utanför intervallet för answer, dvs. det guess kan då aldrig bli lika med answer.

Citat:
Ursprungligen postat av XX1
Jag testade även nu att sätta det lika med 0 istället för -1, vad är skillnaden? Hmm!
0 fungerar också eftersom int answer = (int) (Math.random() * maxNumber) + 1; aldrig kan bli 0. Det fungerar med alla tal som är mindre än 1 och större än 1000.
Citera
2018-02-16, 11:23
  #12
Medlem
Citat:
Ursprungligen postat av e7andy
Med s.nextint() så läser du in ett tal och sen i loopen läser du in ett nytt tal och validerar det. Det är därför du måste skriva in talet två gånger för att det skulle fungera.
Jag valde -1 som initialt värde för det ligger utanför intervallet för answer, dvs. det guess kan då aldrig bli lika med answer.


0 fungerar också eftersom int answer = (int) (Math.random() * maxNumber) + 1; aldrig kan bli 0. Det fungerar med alla tal som är mindre än 1 och större än 1000.

Tackar, e7andy, hjälten jag behövde men inte förtjänade.
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in