Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/222.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 创建;俯卧撑游戏;在android中_Java_Android - Fatal编程技术网

Java 创建;俯卧撑游戏;在android中

Java 创建;俯卧撑游戏;在android中,java,android,Java,Android,我正在尝试在android sdk中重新创建俯卧撑纸牌游戏。对于那些不熟悉伏地挺身的人来说,伏地挺身游戏是从一副普通的扑克牌中抽出一张牌,然后根据花色和等级,你必须进行一系列特定的伏地挺身。例如,画5个菱形需要你完成5个菱形俯卧撑(双手合十)。西服和相应的俯卧撑类型如下所示: 心脏正常 钻石-钻石 俱乐部-交错 宽臂铁锹 (你可以在这里阅读更多关于游戏的信息:) 我还没有实现扑克牌的图像,所以,现在,我只是试图让文本正确显示。基本上,一旦应用程序启动,我希望用户能够按下按钮生成一张新卡,然后在屏

我正在尝试在android sdk中重新创建俯卧撑纸牌游戏。对于那些不熟悉伏地挺身的人来说,伏地挺身游戏是从一副普通的扑克牌中抽出一张牌,然后根据花色和等级,你必须进行一系列特定的伏地挺身。例如,画5个菱形需要你完成5个菱形俯卧撑(双手合十)。西服和相应的俯卧撑类型如下所示: 心脏正常 钻石-钻石 俱乐部-交错 宽臂铁锹 (你可以在这里阅读更多关于游戏的信息:)

我还没有实现扑克牌的图像,所以,现在,我只是试图让文本正确显示。基本上,一旦应用程序启动,我希望用户能够按下按钮生成一张新卡,然后在屏幕上打印一条消息,说明用户要完成的俯卧撑的数量和类型

无论如何,以下是我迄今为止一直在编写的代码:

public class Card {

public enum Suit {
    HEARTS, DIAMONDS, CLUBS, SPADES
}
public enum Rank {
    ACE, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, JACK, QUEEN, KING
}
public enum PushUp {
    REGULAR, DIAMOND, STAGGERED, WIDEARMED
}

private Suit mSuit;
private Rank mRank;
private PushUp mPushUp;

public Card(Suit mSuit, Rank mRank, PushUp mPushUp) {
    this.mSuit = mSuit;
    this.mRank = mRank;
    this.mPushUp = mPushUp;
}

public Suit getSuit() {
    return mSuit;
}

public void setSuit(Suit suit) {
    mSuit = suit;
}

public void setRank(Rank rank) {
    mRank = rank;
}

public void setPushUp(PushUp pushUp) {
    mPushUp = pushUp;
}

public Rank getRank() {
    return mRank;
}

public PushUp getPushUpType() {
    return mPushUp;
}

@Override
public String toString() {
    return "Card:" + mRank.name() + "of" + mSuit.name() + "/n" +
            "Complete:" + mRank.name() + "of" + mPushUp.name() + "push ups.";
}
card类使用3种不同的枚举(suit、rank、push-up类型)来创建card对象。该类有一个toString方法将卡信息转换为字符串

public class Deck {
private Card[] deck;

public Deck() {
    this.deck = new Card[52];
    for (int i = 0; i < deck.length; i++)
        for (Card.Suit s : Card.Suit.values())
            for (Card.PushUp p : Card.PushUp.values())
                for (Card.Rank r : Card.Rank.values()) {
                    Card c = new Card(s, r, p);
                    this.deck[i] = c;
                }
}
public Card pickACard() {
    Random randomGenerator = new Random();
    int randomNumber = randomGenerator.nextInt(this.deck.length);
    Card card = this.deck[randomNumber];
    return card;

}
public String setText() {
    String text = pickACard().toString();
    return text;
}
}

主活动类是应用程序启动时弹出的主屏幕。它有一个按钮和一个文本视图。每次按下按钮时,应生成新卡和新字符串

当我尝试在emulator中运行应用程序时,出现以下错误:

大宗报价

致命异常:主 进程:com.example.aman.pushupgame,PID:3325 java.lang.NullPointerException:尝试在null>对象引用上调用virtual>方法“java.lang.String com.example.aman.pushupgame.Deck.setText()” 位于com.example.aman.pushupgame.MainActivity$1.onClick(MainActivity.java:29)


目前我最担心的是让代码运行,因为我不知道如何修复这个错误。我对java和android都是相当陌生的,我正在做这个项目,作为一种学习经验,以加强我迄今为止所学的概念。非常感谢您的帮助

在代码的第29行抛出了一个
NullPointerException
。在我看来你的线路(没有线路号)

这就是问题所在。您从未实例化它,因此它为null并抛出此错误

您需要在某个地方调用
mNewDeck=new Deck()
(比如onCreate()方法),然后才能从Deck类中使用setText()方法

public class MainActivity extends AppCompatActivity {
private Button mButton;
private TextView mTextView;
private Deck mNewDeck;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mTextView = (TextView) findViewById(R.id.textView);
    mButton = (Button) findViewById(R.id.button);

    View.OnClickListener listener = new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            String text = "";
            text = mNewDeck.setText();
            mTextView.setText(text);

        }
    };
    mButton.setOnClickListener(listener);
}
text = mNewDeck.setText();