作者xtimer ()
看板java
标题[问题] 一个关於发牌的问题
时间Tue Dec 8 15:37:18 2009
因作业遇到困难 想上来请教一下各位大大
题目是一个21点的游戏
(暂不考虑初始发两张牌 & 发出的牌重复问题)
先贴一下目前code进度
==============================================================================
public class a1{
public static void main(String[] args) throws java.io.IOException
{
char key;
int r;
int player = 0;
int bank = 0;
do{
r = (int)(Math.random() * (13-1) + 1);
player += r;
System.out.print("玩家点数:" + r + "点\t玩家累计:" + player + "点\t");
if (player > 21)
{
System.out.println();
System.out.println("哇!玩家爆了!庄家赢");
}else if (player == 21)
{
System.out.println();
System.out.println("玩家21点!玩家赢");
}else
{
System.out.println("是否成要牌(y/n)\t");
key = (char)System.in.read();
System.in.read(); System.in.read();
}
}
while (key == 'y');
}
}
==============================================================================
错在黄色那一行
想请问是否while判断式里面 不能用来判断字元呢?
如果是这样的话 要怎麽修改~"~
感谢各位大大
补上错误讯息
==============================================================================
a1.java:35: variable key might not have been initialized
while (key == 'y');
^
1 error
==============================================================================
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 218.172.2.245
1F:→ adrianshum:.... 你凭什麽觉得while不能判断字元?.... 12/08 15:58
回a大
我没有凭什麽
只是对do while的条件式不理解 没有书本可以参考
网路上倒是没找到用来判断字元的
所以想上来问问看
2F:→ superlubu:「错」是错什麽?Exception? Compilation Error? 12/08 15:59
※ 编辑: xtimer 来自: 218.172.2.245 (12/08 16:09)
3F:推 snowlike:while只能判断boolean值,不过让字元的比较回传T/F就可以 12/08 16:17
4F:→ tkcn:楼上,原 po 的 source 在这个部份没有问题 12/08 16:21
5F:→ ken915007:variable key might not have been initialized...这个 12/08 16:31
6F:→ neversay:char key = ''; 12/08 16:33
7F:→ ken915007:错误讯息写得很清楚罗!! 12/08 16:34
8F:→ xtimer:小弟看的一头雾水...囧rz.. 12/08 16:36
9F:→ ken915007:哇勒...断掉了= = 12/08 16:37
10F:推 snowlike:恩正想要怎说;t大回覆得详细,判断时知道key是什麽就可 12/08 16:42
11F:→ xtimer:大概懂了t大的意似 现在的key对程式来说不是个char... 12/08 16:45
12F:→ xtimer:还是不会转....囧rz.. 12/08 17:06
13F:→ adrianshum:不是 '不是个char', 而是未初始化.... 12/08 17:08
14F:→ xtimer:key可以直接拿来输出会显示y 但不能放进判断式里.. 12/08 17:41
15F:→ snowlike:那只有在else的情况,它不是'一定'会被赋值 12/08 18:08
16F:→ xtimer:完成了...结果最後判断式是直接给两个一样的值做无限回圈 12/08 18:59
17F:→ xtimer:直接在里面判断 条件不成立的话就直接跳出do-while 12/08 19:04
18F:→ xtimer:最後还是不懂字元在判断式里该怎麽使用..~"~ 谢谢各位大大 12/08 19:05
=============================================================================
import java.io.*;
public class Number21{
public static void main(String[] args) throws java.io.IOException
{
int r, rf;
int player = 0;
int bank = 0;
char key;
String card;
String jqk;
do{
card = ""; //初始花色
jqk = ""; //初始人头点数
rf = (int)(Math.random() * (4-1) + 1); //决定牌花色start
switch(rf)
{
case 1:
card += ((char)6);
break;
case 2:
card += ((char)3);
break;
case 3:
card += ((char)4);
break;
case 4:
card += ((char)5);
break; //决定牌花色end
}
r = (int)(Math.random() * (13-1) + 1); //发一张牌
if (r <= 10)
{
player += r;
System.out.print
("玩家点数:" + card + r + "\t玩家累计:" + player + "点\t");
}
else
{
if (r == 11)
jqk += "J";
if (r == 12)
jqk += "Q";
if (r == 13)
jqk += "K";
r = 10;
player += r;
System.out.print
("玩家点数:" + card + jqk + "\t玩家累计:" + player + "点\t");
}
if(player > 21)
{
System.out.println("\n哇!玩家爆了!庄家赢");
break; //爆了,跳出回圈
}else if (player == 21)
{
System.out.println("\n玩家21点!玩家赢");
break; //赢了,跳出回圈
}else
{
System.out.print("是否补牌(y/n)\t");
key = (char)System.in.read();
System.in.read(); System.in.read();
int i = key;
if (i != 121) //判断输入值不等於'y'
break; //就跳出回圈
}
}
while (1 == 1); //直接作成无穷回圈
if(player < 21) //玩家没爆,也没21点
{ //才换庄家补牌
do{
card = ""; //初始花色
jqk = ""; //初始人头
rf = (int)(Math.random() * (4-1) + 1); //决定牌花色start
switch(rf)
{
case 1:
card += ((char)6);
break;
case 2:
card += ((char)3);
break;
case 3:
card += ((char)4);
break;
case 4:
card += ((char)5);
break; //决定牌花色end
}
r = (int)(Math.random() * (13-1) + 1);
if (r <= 10)
{
bank += r;
System.out.print
("庄家点数:" + card + r + "\t庄家累计:" + bank + "点\t");
}
else
{
if (r == 11)
jqk += "J";
if (r == 12)
jqk += "Q";
if (r == 13)
jqk += "K";
r = 10;
bank += r;
System.out.print
("庄家点数:" + card + jqk + "\t庄家累计:" + bank + "点\t");
}
if (bank > 21)
{
System.out.println("\n哇!庄家爆了!玩家赢");
break;
}
else if(bank == 21)
{
System.out.println("\n哇!庄家21点!庄家赢");
break;
}
else
{
if (bank < player)
System.out.println("庄家再补一张牌");
else if (bank > player)
{
System.out.println
("\n庄家" + bank + "点,玩家" + player + "点,庄家赢!");
break;
}
else
{
System.out.println
("\n庄家及玩家都" + bank + "点,平手!");
break;
}
}
}
while (1 == 1);
}
}
}
==============================================================================
※ 编辑: xtimer 来自: 218.172.2.245 (12/08 19:10)