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
Post a Comment