包括玩家手中的一堆牌和两个动作:TAKE和DISCARD。当玩家从经销商那里收到一张牌时,TAKE会将牌放在牌手的牌头上。当玩家在游戏中与其他玩家对战时,DISCARD会从玩家的牌堆顶部移除一张牌。每个玩家从经销商那里收到16张牌 比赛开始........
我尝试了这样的代码,它没有给我任何东西
public class play {
int noOfCards = 16;
static void TAKE(Stack st, int a) {
st.push(new Integer(a));
}
static void DISCARD(Stack st) {
Integer a = (Integer) st.pop();
}
public static void main(String args[]) {
for(int i=0; i<=16; i++) {
Stack st = new Stack();
st.take();
st.discard();
}
}
}
我是这个概念的新手......给我一条解决这个问题的途径
答案 0 :(得分:0)
不确定你想要它做什么。你只是想实现TAKE和DISCARD吗?尽管不确切知道您要做什么,但您的代码存在很多问题。
一个直接的问题是你的Stack初始化在你的for循环中,这意味着每次执行该循环时,你都会创建一个全新的Stack,它将是空的。所以,基本上,你的主要方法是这样做的:
另一个问题是Java区分大小写,因此调用st.take()并不与TAKE()匹配。
另一个问题是,st.take()就像在说&#34;呼叫&#39; take()&#39;我的Stack&#34;实例上的方法。 Stack没有定义一个名为take()的方法 - 它有像push()和pop()这样的方法(看这里:http://docs.oracle.com/javase/7/docs/api/java/util/Stack.html)。你的摄取和丢弃方法都在Play类上,所以你想要像这样调用它们:
Play.TAKE(st, 3);
Play.DISCARD(st);
另一个问题:当您尝试调用keep或discard时,您不会发送任何参数,但您已经定义了这些方法来获取参数。见上文。
丢弃是否应该返回被丢弃的卡的值?您检索该值并将其存储到本地变量&#34; a&#34;然后你就什么都不做了。如果你不打算退货,你就不需要创建&#34; a&#34;。如果你要退货,你的退货类型不应该是无效的。
答案 1 :(得分:0)
对不起,我还没有完全理解你要做的整个过程。但我仍然试了一下。
public class Play
{
private static int noOfCards = 16;
private static Stack<Integer> player1 = new Stack<Integer>();
private static Stack<Integer> player2 = new Stack<Integer>();
static void takeCard(Stack<Integer> st,int cardValue){
st.push(cardValue);
}
static int discardCard(Stack<Integer> st){
return st.pop();
}
static int getRandomValue(int min, int max){
Random r = new Random();
return r.nextInt((max - min) + 1) + min;
}
//Filled card pile with random values from 1-13
public static void main(String[] args)
{
for(int i = 0 ; i < noOfCards; i++){
takeCard(player1,getRandomValue(1,13));
takeCard(player2,getRandomValue(1,13));
}
//player 1 takes a card!
//Size of player1's pile before and after taking card
System.out.println("Before:" + player1.size());
takeCard(player1, getRandomValue(1, 13));
System.out.println("After" + player1.size());
//player 2 discards a card and outputs the card's value
System.out.println("Player 2 discards: " + discardCard(player2));
}
}