我必须创建3类(纸牌,卡座和测试仪)来玩纸牌游戏。规则很简单,只需从牌组中随机比较两张牌,然后取高者为准。它遍及整个甲板。 这是我的卡类(我不评论)
public class Card {
private int value;
private String suit;
public Card(){
value =1;
suit = "clubs";
}
public Card(int n, String s) {
n = value;
s = suit;
}
public int getValue() {
return value;
}
public void setValue(int n) {
if ((n >0) && (n<14)) {
n = value;
}
else {
return;
}
}
public String getSuit() {
return suit; // return the string
}
public void setSuit(String s) {
if ((s.equals("clubs") || (s.equals("hearts") || (s.equals("diamonds") || (s.equals("spades")))))){
s = suit;
}
else {
return;
}
}
public int rank() {
int rank=0;
int suitVal=0;
if (suit.equals("clubs")) {
suitVal =1;
}
else if(suit.equals("diamonds")) {
suitVal =2;
}
else if(suit.equals("hearts")) {
suitVal =3;
}
else if(suit.equals("spades")) {
suitVal =4;
}
rank= (4*(value-1)) + suitVal;
return rank;
}
}
甲板舱室:
import java.util.ArrayList;
public class Deck {
int[] value= {1,2,3,4,5,6,7,8,9,10,11,12,13};
String[] suit= {"clubs", "diamonds", "hearts", "spades"};
public ArrayList<Card> card = new ArrayList<Card>();
public Deck() { // make default constructor
for (int a=0; a< value.length; a++) {
for (int b=0; b< suit.length ; b++){
card.add(new Card(value[a], suit[b]));
}
}
}
public Card drawCard() {
int number = (int) Math.random()* (card.size());
Card temp = card.get(number);
card.remove(number);
return temp;
}
测试器:
公共类测试器{
public static void main(String[] args) {
Deck deck1 = new Deck();
Card x = deck1.drawCard();
Card y = deck1.drawCard();
int point1=0;
int point2=0;
int player=x.rank();
int comp=y.rank();
for (int i=0; i<52; i++) {
if (player > comp) {
point1++;
}
else {
point2++;
}
}
if (point1 > point2) {
System.out.println("Player is the winner");
}
if (point1 < point2) {
System.out.println("Computer is the winner");
}
}
当我运行它时,它说“空指针异常”并指向Card类的第42行和Tester类的第14行。请帮助
答案 0 :(得分:1)
在卡类中,在参数化构造函数中的分配是错误的,您具有参数n和s,并且应将该值分配给value和suite。但是你在做其他事情,
public Card(int n, String s) {
n = value;
s = suit;
}
相反,应该将参数的值分配给value和suit,类似这样。
public Card(int n, String s) {
value = n;
suit = s;
}
这就是为什么值和西服始终都是默认值,而您从未更改过的原因。
答案 1 :(得分:0)
你好,欢迎来到@Elvin。
如评论中所述,NPE会告诉您问题出在哪里。
如果(suit.equals(“ clubs”))为null,则您的“ suits”。
问题出在您的卡片构造方法中:
public Card(int n, String s) {
n = value;
s = suit;
}
您有相反的看法,这应该是因为您的属性既值又适合,所以您应该在其中“存储”新值:
public Card(int n, String s) {
value = n;
suit = s;
}
您似乎是新手,请尝试始终了解错误消息,并且当然要调试;)