为什么Java方法返回null?

时间:2012-06-10 21:39:41

标签: java methods arraylist bluej

我正在尝试调试我的Java方法返回null的原因。以下是详细信息。

我们正在制作一个简单的卡片“游戏”,我在外部方法调用和创建一个新对象时遇到了麻烦。它是一副卡片。卡片为1类,卡片为1类,卡片为1类游戏

这是我的课程代码进入

 public class Game
 {
  private InputReader reader;
  private Deck deck;
  private ArrayList<Card> listCard;

/**
 * Constructor for objects of class Game
 */
public Game()
{
    deck = new Deck();
    reader = new InputReader()
    listCard = new ArrayList<Card>();
}

/**
 *
 */
public void dealCard()
{
   listCard.add(deck.takeCard());
}

}// End of Game class

这是我将从

中获取方法的甲板类
 import java.util.ArrayList;
 /**
  * Write a description of class Deck here.
  * 
  * @author  
  * @version 2012.05.31
  */
 public class Deck
{
private ArrayList<Card> redblue;

/**
 * Main constructor for objects of class Deck
 */
public Deck()
{
    redblue = new ArrayList<Card>();
}


   public Card takeCard()
{
      **return redblue.remove(0);**  /// this is the Index.pointer.exception
}



}
}// End of class

所以我的问题是我试图将第一张牌从牌组中拉出来并将其添加到我的“手牌”..所以我试图调用dealCard()调用takeCard().. takeCard()工作正常但是当我尝试调用,如果通过dealCard()它返回null和错误,因为我不能将null添加到arrayList .. 我认为我的问题可能是外部方法调用没有加强正确的变量,我不知道

提前致谢

***编辑。删除了不相关的方法和类..

4 个答案:

答案 0 :(得分:2)

看看Deck的构造函数:

public Deck()
{
    redblue = new ArrayList<Card>();
}

在构造函数运行之后,redBlue ArrayList中有多少张卡?

如果您尝试从该ArrayList中删除卡片,您认为会发生什么?

答案 1 :(得分:1)

我认为您需要从主(游戏类)发布更多代码,向我们展示您的套牌和卡类的用法。现在只引起我注意的是:

public Card takeCard()
{
      **return redblue.remove(0);**  /// this is the Index.pointer.exception
}

根据this,如果出现以下情况,则可以抛出异常:

IndexOutOfBoundsException - if index out of range (index < 0 || index >= size()).

你确定你的牌组里装满了牌吗?您可以在方法中添加一个检查。如果您的卡片列表为空,则为0 =它的大小。

public void dealCard()
{
   Card card = deal.takeCard();

   if (card != null)
      listCard.add(deck.takeCard());
}

public Card takeCard()
{
    if ( !this.redblue.isEmpty() )
        return redblue.remove(0);

    return null;        
} 

答案 2 :(得分:0)

以某种方式

的第一个元素
redblue

为空。 ArrayList中允许为空。

我的猜测是,有更多代码可以填写卡片组,并且您第一次将null添加到ArrayList

检查ArrayList specification here.

答案 3 :(得分:0)

在我看来,redblue实际上并没有任何东西!当你像这样初始化它时:

redblue = new ArrayList<Card>();

你只是为卡片创建一个空容器,而不是实际放入卡片。 您可能想要做的是创建一个函数来为redblue生成卡片......比如..

public ArrayList<Card> createInitialDeck(){ 
  //Create an empty ArrayList
  //Do some code here to create new cards..
       //you might want to consider nested for loops if you're creating 13 cards of 4 different suits for example
       //while inside those for loop add each new card object to your array list

   //return arrayList;
}

然后代替redblue = new ArrayList<Card>(); redblue = createInitialDeck();