Reputation: 503
So I'm working on a Black jack program and I'm a little stuck. I'll warn everyone that I'm really new to programming, also, I'm mid-project....so there are some loose ends and unused variables, and some unnecessary logic (for testing) but here's whats I need help with.
1) I'm using Math.random to act as the deck of cards, and at first it seemed to work okay...but after the second hit, it's clear that the previous card value is replaced with the current card value. if you drew a 3,5,9...the array would read 9,9,9 instead of 3,5,9.
2) Eclipse has indicated that the variables user_total (in method user_hand), and dealer_total(in method dealer_hand), can not be returned to main because they "cannot be resolved to a variable". I don't understand why, they're normal int's as far as I can tell.
sorry if it's formatted weird, stackoverflow was complaining about something... here's my code:
public class blackJack
{
final static int DEALER_STAND_THRSH = 17;
final static int MAX_CARD_VALUE = 10;
static Random randomNumbers = new Random();
public static void main(String[] args)throws IOException
{
BufferedReader in;
in = new BufferedReader (new InputStreamReader (System.in));
int number_of_hits=0;
boolean still_playing=true;
while (still_playing)
{
//tracks number of hits----------------------------------
number_of_hits ++;
System.out.println("this is draw : " + number_of_hits);
System.out.println(" ");
// gets users
int user_total=user_hand(number_of_hits);
//get dealers card----------------------------------------
int dealer_total=dealer_hand(number_of_hits);
//ask user if they'd like to hit or stand
System.out.println("\nwould you like to hit or stand?\nenter:H to hit\nenter:S to stand");
char hit_or_stand=in.readLine().charAt(0);
char hit_or_stand_case = Character.toLowerCase(hit_or_stand);
if (hit_or_stand_case=='s')
{
//compare cards
who_wins(user_total,dealer_total );
}
// continue game prompt --------------------------------
System.out.println("are you still playing? enter 1 for yes. 2 for no.");
int still_playing_response = Integer.parseInt(in.readLine());
if(still_playing_response==1)
{
still_playing=true;
}
else
{
still_playing=true;
System.out.println("goodbye");
}
}//while end
}//main end
public static int generate_a_card()
{
Scanner input = new Scanner(System.in);
int card=randomNumbers.nextInt(MAX_CARD_VALUE) +1 ;
return card;
}
public static int user_hand(int number_of_hits)
{
int user_card=generate_a_card();
System.out.println( "you drew: " + user_card );
int user_current_hand [] = new int [number_of_hits];
for (int i=0; i<user_current_hand.length; i++)
{
user_current_hand [i]= user_card;
System.out.println( user_card + " has been stored in index " + i + " of user_current_hand array");
int user_total=0;
for(int j=0; j<user_current_hand.length; j++)
{
user_total+= user_current_hand[i];
if (user_total>21)
{
System.out.println("you have exeeded 21, you lose!");
}//if end
}//nested for loop
}//first for loop
return user_total;
}//end user_hand method
public static int dealer_hand(int number_of_hits )
{
System.out.println("-----------------------------------------\n");
System.out.println("now for the dealers draw");
System.out.println(" ");
int dealer_card=generate_a_card();
System.out.println( "the dealer drew: " + dealer_card);
int dealer_current_hand [] = new int [number_of_hits];
for (int i=0; i<dealer_current_hand.length; i++)
{
dealer_current_hand [i]= dealer_card;
System.out.println( dealer_card + " has been stored in index " + i + " dealer_current_hand array");
int dealer_total=0;
for(int j=0; j<dealer_current_hand.length; j++)
{
dealer_total+= dealer_current_hand[i];
if (dealer_total>21)
{
System.out.println("the dealer has exeeded 21, you win!");
}//if end
}//nested for loop
}//first for loop
return dealer_total;
}//end main
public static void who_wins(int user_total, int dealer_total )
{
if(user_total > dealer_total)
{
System.out.println("congradulations, you won!\nYour score: " + user_total + "\ncomputer's score: " + dealer_total);
}
else if(user_total < dealer_total)
{
System.out.println("Sorry, you lost.\nYour score: " + user_total + "\ncomputer's score: " + dealer_total);
}
else
{
System.out.println("this round was a tie!\nYour score: " + user_total + "\ncomputer's score: " + dealer_total);
}
}
}
Upvotes: 0
Views: 979
Reputation: 10695
user_total only access on within that loop. You return user_total on out side the loop. Because of that Eclipse can't identify that variable. Because variable is out of the scope.
declare this way,
public static int user_hand(int number_of_hits)
{
int user_total=0;
int user_card=generate_a_card();
System.out.println( "you drew: " + user_card );
int user_current_hand [] = new int [number_of_hits];
for (int i=0; i<user_current_hand.length; i++)
{
user_current_hand [i]= user_card;
System.out.println( user_card + " has been stored in index " + i + " of
user_current_hand array");
for(int j=0; j<user_current_hand.length; j++)
{
user_total+= user_current_hand[i];
if (user_total>21)
{
System.out.println("you have exeeded 21, you lose!");
}//if end
}//nested for loop
}//first for loop
return user_total;
}
Upvotes: 1
Reputation: 1218
You have a problem of scope in your code as pointed out my Janvo Take a look at this
Whatever is defined within a pair of curly braces
{ }
is visible just inside it.
Upvotes: 1
Reputation: 276
dealer_total and user_total are declared within the for loop and going out of scope prior to be being returned. That is why eclipse is complaining.
Upvotes: 2