Java 空异常错误,是OOP的新错误
我正在用java编写一个GoFish游戏,在我编写的take turn方法中,我收到一个空异常错误,我知道这意味着我有一个空对象 当浏览我的代码时,我不明白为什么会出现这种情况。当我向用户询问玩家的号码时,它会创建该号码。那么为什么我会得到一个空的错误呢Java 空异常错误,是OOP的新错误,java,oop,nullpointerexception,Java,Oop,Nullpointerexception,我正在用java编写一个GoFish游戏,在我编写的take turn方法中,我收到一个空异常错误,我知道这意味着我有一个空对象 当浏览我的代码时,我不明白为什么会出现这种情况。当我向用户询问玩家的号码时,它会创建该号码。那么为什么我会得到一个空的错误呢 if((P.cardsInHand[P.getnumCardsInHand()].getRank()) == rank){ return P; } private Pl
if((P.cardsInHand[P.getnumCardsInHand()].getRank()) == rank){
return P;
}
private Player[] numPlayers;
int playerName;
int requestedcard;
public void numPlayers(){
Scanner input = new Scanner(System.in);
System.out.println("How many players want to play");
numPlayer = input.nextInt();
if((numPlayer < 2) || (numPlayer > 6)){
System.out.println("How many players want to play");
numPlayer = input.nextInt();
}
numPlayers = new Player[numPlayer];
for (int i = 0; i < numPlayer; i++){
System.out.println("Player Number(Start with 0)");
playerName = input.nextInt();
numPlayers[i] = new Player(playerName);
}
requestedPlayer = numPlayers[0];
}
public Player taketurn(Player P){
previousPlayer = P;
System.out.println(P);
//set up scanner
Scanner input = new Scanner(System.in);
//declare variables
int player;
int rank;
int numMatches = 0;
System.out.println("Player " + previousPlayer.getnumplayerNumber() + " turn");
//Player P ask what player cars it want to sk for
System.out.println("what Player Do you want to ask");
player = input.nextInt();
if(player > numPlayer){
System.out.println("what Player Do you want to ask");
player = input.nextInt();
}
//data type of Player is set to the player that Play P requested
requestedPlayer = numPlayers[player];
//request card
System.out.println("What rank do you want(2-10 = the corresponding number rank on the card, 11 = jack, 12 = queen, 13 = king, 14 = ace)");
rank = input.nextInt();
for(int i = 1; i < (requestedPlayer.getnumCardsInHand()); i++){
if((requestedPlayer.cardsInHand[i].getRank()) == rank){
// if requested rank == to the player that was aksed for the card
//the card will be transfered and removed from hand
requestedPlayer.cardsInHand[i].test1();
System.out.println("Card of rank " + rank + " are being transfered");
//requestedPlayer.cardsInHand[i].test();
for(int j = 1; j < (requestedPlayer.getnumCardsInHand()); j++){
P.transfercard(i, requestedPlayer);
requestedPlayer.removeCard(i);
}
P.findBooks();
return P;
}else{
//place draw in paremters
System.out.println("Go Fish");
P.addCard(d.draw());
if((P.cardsInHand[P.getnumCardsInHand()].getRank()) == rank){
return P;
}else{
System.out.println("Requested Players turn");
return (requestedPlayer);
}
}
}
return requestedPlayer;
}
if((P.cardsInHand[P.getnumCardsInHand()].getRank())==rank){
返回P;
}
私人玩家[]个玩家;
int playerName;
int请求卡;
公众人士(){
扫描仪输入=新扫描仪(System.in);
System.out.println(“有多少玩家想要玩”);
numlayer=input.nextInt();
如果((numlayer<2)| |(numlayer>6)){
System.out.println(“有多少玩家想要玩”);
numlayer=input.nextInt();
}
numPlayers=新玩家[numPlayer];
对于(int i=0;i玩家){
System.out.println(“你想问哪个玩家”);
player=input.nextInt();
}
//播放器的数据类型设置为播放P请求的播放器
requestedPlayer=numPlayers[player];
//申请卡
System.out.println(“你想要什么等级(2-10=卡片上对应的数字等级,11=杰克,12=女王,13=国王,14=王牌)”);
rank=input.nextInt();
对于(int i=1;i<(requestedPlayer.getnumCardsInHand());i++){
if((requestedPlayer.cardsInHand[i].getRank())==rank){
//如果要求排名==给获得该卡的玩家
//该卡将被转移并从手中移除
requestedPlayer.cardsInHand[i].test1();
System.out.println(“等级卡”+等级卡+”正在被转移);
//requestedPlayer.cardsInHand[i].test();
对于(int j=1;j<(requestedPlayer.getnumCardsInHand());j++){
P.转让卡(i,请求的玩家);
请求的播放器。移除卡片(i);
}
P.findBooks();
返回P;
}否则{
//在paremters中放置draw
System.out.println(“钓鱼”);
P.addCard(d.draw());
if((P.cardsInHand[P.getnumCardsInHand()].getRank())==rank){
返回P;
}否则{
System.out.println(“请求的玩家回合”);
返回(requestedPlayer);
}
}
}
返回请求的播放器;
}
如果p.cardsInHand
是一个包含25个元素的数组,但只使用前5个元素,则元素p.cardsInHand[0]
,p.cardsInHand[1]
P.cardsInHand[4]
将具有值,但P.cardsInHand[5]
可能为null
。如果getnumCardsInHand()
返回5,则数组元素将为null
,这将导致NullPointerException
。使用P.getnumCardsInHand()-1
由于Java(以及C和许多其他语言)中的数组从0开始编制索引,这意味着如果要访问数组的最后一个元素(或者,在您的情况下,最后一个“使用”的元素),则需要从给出元素数的任何值中减去1(例如
a.length
对于数组,a.size()
用于阵列列表
,或者在您的情况下P.getnumCardsInHand()
)。请提供更多信息。类似于异常发生的那一行。如果((P.cardsInHand[P.getnumCardsInHand()].getRank())==rank){return P;}这是我用来编写代码的程序中的第88行,则会发生异常。你可以附加文档吗?如果我也可以附加player类,可能更容易解释。然后P
为null或P.cardsInHand[P.getnumCardsInHand()]
返回null。。或者P.getnumCardsInHand()
在引发异常时返回null,P.getnumCardsInHand()的值是多少?P.cardsInHand[]
中有多少元素?哪个方法调用taketurn方法?感谢它从现在起提供了更多。