java - Why is an integer resetting to 100 when it should update to something different -


the wall of code below should change value of "lowestguess" , "highestguess" time loop runs through. ideally, it's meant lower highest guess 100 , raise lowest guess 1 program can't guess lower or higher number has guessed (reducing amount of loops takes complete program.

however, each time runs "takestab" function, lowestguess , highest guess reset defaults, 1 , 100 respectively. no idea what's going on here seeing i'm not getting errors.

is possible because methods here private, don't update variables outside of respective scopes?

import java.util.scanner;  public class aiguessing {     public static void main(string[]args)      {         //declarations*         scanner inputreader = new scanner(system.in);         int number;         int guess;         int guesses = 0;         int lowestguess = 1;         int highestguess = 100;          //code         system.out.println("welcome!");         system.out.println("please enter number ai guess");         number = inputreader.nextint();          //computer tries guess number                 {             guesses++;             guess = takestab(lowestguess, highestguess, number);             system.out.println("\"i guess " +guess+ ".\"");         }while(guess != number);          if(guess == number)         {             system.out.println("woo! got it!");         }          if(guesses >= 1 && guesses ==2)         {             system.out.println(guesses + " guesses? i..am...god!!!!");         }         else if(guesses >= 3 && guesses <= 5)         {             system.out.println(guesses + " guesses? hooray! i'm average gravy!!!");         }         else if(guesses >= 6 && guesses <= 8)         {             system.out.println(guesses + " guesses? guess when i'm drunk");         }         else if(guesses >= 9)         {             system.out.println(guesses + " guesses? bugger me... turn me scrap");         }         //end code     }      public static int takestab(integer lowestguess, integer highestguess, integer number)     {            int estimate;         estimate = estimate(lowestguess, highestguess);         system.out.println("estimate is: "+estimate+".");          if(estimate < number && estimate > lowestguess)         {             lowestguess = estimate;             barkchange(lowestguess, highestguess, estimate);         }         else if(estimate > number && estimate < highestguess)         {             highestguess = estimate;             barkchange(lowestguess, highestguess, estimate);         }                 return estimate;     }      //function generate , return random number     public static int estimate(int low, int high)     {         int comguess;         comguess = (low + (int)(math.random() * ((high - low) + low)));         return comguess;     }      //function 'bark' changes of lowest , highest guesses     public static void barkchange(integer lowestguess, integer highestguess, integer guess)     {         system.out.println("current guess is: "+guess+".");         system.out.println("lowest guess is: "+lowestguess+".");         system.out.println("highest guess is: "+highestguess+".\n");     } } 

integer immutable object.

lowestguess = estimate; 

at line(and 1 highestguess), you're changing local copy of lowestguess , not 1 passed it.

the simple solution in case, declare lowestguess , highestguess "globally" (static).

above main put

static int highestguess = 100; static int lowestguess = 1; 

then, can remove parameters method, , don't have pass them in anymore. can reference static ones directly.

an aside nitpickers: used "globally" here because there's no oo here. static variable in context intents , purposes global variable.


Comments

Popular posts from this blog

c# - How Configure Devart dotConnect for SQLite Code First? -

java - Copying object fields -

c++ - Clear the memory after returning a vector in a function -