所以我正在制作一个黑杰克计划,我有点卡住了。我会警告每个人我是编程的新手,同样,我是项目中期....所以有一些松散的结束和未使用的变量,以及一些不必要的逻辑(用于测试)但是这里有什么我需要帮助用。
1)我正在使用Math.random充当卡片组,起初它似乎工作正常......但是在第二次击中之后,显然先前的卡片值被当前的卡片取代了值。如果你画了一个3,5,9 ...数组会读9,9,9而不是3,5,9。
2)Eclipse已经指出变量user_total(在方法user_hand中)和dealer_total(在方法dealer_hand中)不能返回到main,因为它们“无法解析为变量”。我不明白为什么,就我所知,它们是正常的。
抱歉,如果它的格式很奇怪,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);
}
}
}
答案 0 :(得分:2)
dealer_total和user_total在for循环中声明,并在返回之前超出范围。这就是eclipse抱怨的原因。
答案 1 :(得分:1)
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;
}
答案 2 :(得分:1)