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
答案 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循环只执行一次,因为你的循环将清空该堆栈。不确定这是不是你想要做的。