添加Stack.pop()

时间:2015-06-25 13:24:17

标签: java

import java.util.Random;
import java.util.Stack;

public class Blackjack {
  public static void main(String[] args) {
    int cardValue; /* card value is from 2 to 11 */
    Stack Player1 = new Stack();
    Stack Addition = new Stack();

    Random r = new Random();
    int i = 2 + r.nextInt(11);

    System.out.println("Welcome to Mitchell's blackjack program!");

    for (int a = 1; a <= 2; a++) { /* Start's the game by assigning 2 cards each, to the players */
      Player1.push(i);
    }

    while (!Player1.empty()) {
      System.out.print("You get a " + Player1.pop());
      System.out.print("and");

      int sum = 0;

      for (int n = 0; n < Player1.size(); n++) {
        sum = sum + Player1.pop();
        System.out.print("Your total is " + sum);
      }
    }
  }
}

所以我刚刚开始学习java而我正在尝试完成这个BlackJack project但是,当我尝试使用javac进行编译时,输出是二元运算符'+'的错误操作数类型,用于'sum = sum + Player1.pop();'

我在上面编码中使用的解决方案来自here

5 个答案:

答案 0 :(得分:1)

Player1.pop()会返回Object,因为您在未提供类型的情况下使用了Stack。你无法做int + Object。如果您需要在堆栈中存储int,只需使用泛型并执行

Stack<Integer> Player1 = new Stac<Integer>k();
Stack<Integer> Addition = new Stack<Integer>();

和你的

System.out.print("Your total is " + sum);

应该在for之外,否则你将得到一笔临时款项

答案 1 :(得分:0)

Stack更改为Stack<Integer>

默认情况下,您会获得一堆(未知)Object,并且无法将Object添加到int

答案 2 :(得分:0)

Stack采用通用参数来确定Stack将存储的Object类型。这又定义了pop()返回的Object类型。在您的情况下,您可以使用数字类型,例如

Stack Player1 = new Stack<Integer>();

不提供类型参数将导致返回Object并且未定义int + Object,因此您的错误。

答案 3 :(得分:0)

其他人已经使用Java泛型解释了这一点,这是一种新的Stack()方法,它告诉编译器只允许你将Integers放入Stack中,并自动取出Integers。

在泛型之前,您只需将从堆栈中带出的任何内容转换为整数。正如人们所说,问题是你的代码不知道它从堆栈中回来了什么,所以它假设是Object,并且不知道如何添加它们。铸造看起来像:

sum = sum + (Integer)Player1.pop();

答案 4 :(得分:0)

虽然使用Stack会解决这个问题。但我想你使用循环的方式存在问题。

你的while循环只执行一次,因为你的循环将清空该堆栈。不确定这是不是你想要做的。