战争游戏(卡牌),空指针异常ERROR

时间:2018-12-10 21:30:58

标签: java nullpointerexception

我必须创建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行。请帮助

2 个答案:

答案 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;
}

您似乎是新手,请尝试始终了解错误消息,并且当然要调试;)