немного застрял в простой программе Блэк Джек - PullRequest
0 голосов
/ 30 января 2012

Так что я работаю над программой Блэк Джек, и я немного застрял.Я предупреждаю всех, что я действительно новичок в программировании, также я в середине проекта .... так что есть некоторые слабые стороны и неиспользуемые переменные, и некоторая ненужная логика (для тестирования), но вот что мне нужно помочьс.

1) Я использую Math.random, чтобы действовать как колода карт, и поначалу она работала нормально ... но после второго попадания становится ясно, что значение предыдущей картызаменяется текущим значением карты.если вы нарисовали 3,5,9 ... массив будет читать 9,9,9 вместо 3,5,9.

2) Eclipse указал, что переменные user_total (в методе user_hand),и dealer_total (в методе dealer_hand) не могут быть возвращены основному, поскольку они «не могут быть преобразованы в переменную».Я не понимаю, почему, насколько я могу судить, они обычные целые числа.

извините, если он странно отформатирован, stackoverflow жаловался на что-то ... вот мой код:

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);
}

}


}

Ответы [ 3 ]

2 голосов
/ 30 января 2012

dealer_total и user_total объявляются в цикле for и выходят из области видимости до того, как будут возвращены.Вот почему затмение жалуется.

1 голос
/ 30 января 2012

У вас есть проблема с областью видимости в вашем коде, как указано в моем Janvo. Взгляните на this

Все, что определено в фигурных скобках

{ }

видно только внутри него.

1 голос
/ 30 января 2012

user_total доступ только в пределах этого цикла. Вы возвращаете user_total вне цикла. Из-за этого Eclipse не может идентифицировать эту переменную. Потому что переменная выходит за рамки.

объявить таким образом,

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;

}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...