宿題のコイン プログラムについて質問があります。
コインを裏返し、現在のお金を表示できる小さな GUI プログラムを作成する必要があります。
私はほとんどすべてを書きましたが、2つのJLabel
ステータスを更新するのにまだ問題があり、2つのベットボタンとボタンのリセットはうまく機能しているようですSystem.out.println
。ボタン。
coin.java
、player.java
、coinpanel.java
およびの 4 つのクラスを含むコードを次に示しますcoinPanelMain.java
。
player.java:
パブリッククラスプレーヤー{
/** * @param ownMoney is currently the player own money * @param coin is new Coin object; */ private int currMoney; private Coin coin; /** * no-args parameter * default constructor */ public Player(){ currMoney = 10; coin = new Coin(); } /** * a bet method that takes in a bet and the side of coin * it will filp the coin and change the player's money * depend on whether the player won or lost the bet */ public void bet(){ coin.flip(); System.out.println("filp over"); if(coin.getFace().equals ("Heads")){ currMoney ++; } else if(coin.getFace().equals("Tails")){ currMoney --; } System.out.println("filp over2"); } /** * a getter for getting current money * @return currMoney */ public int getCurrMon(){ System.out.println("money is" + currMoney); return currMoney; } /** * a reset method make current money return to 10; * @return currMoney to 10 */ public void reset(){ currMoney = 10; }
}
コインパネル.java
javax.swing をインポートします。; java.awt.event をインポートします。; java.awt をインポートします。; / *
- コイン パネル クラスは、コイン ゲームの結果を表示します。
- 3つのボタン、現在のお金、現在のフリップが含まれています
- ユーザーがリセットボタンをクリックすると、現在のお金は 10 に戻ります。 * * */
public class CoinPanel は JPanel を拡張します {
private Player player = new Player();
private Coin coin = new Coin();
private JLabel label3 = new JLabel("Enter a bet");
private JTextField text;
private int value = 0;
public int getVal(){
return value;
}
public CoinPanel(){
JLabel label= new JLabel("Current Money:"+player.getCurrMon());
JLabel label2 = new JLabel("Current Flip:" + coin.getFace());
JLabel label4 = new JLabel("");
text = new JTextField(30);
//JTextField text = new JTextField(30);
//String betNum = text.getText();
//int betNumber = Integer.parseInt(betNum);
JButton headsBt = new JButton("Bet Heads");
JButton tailsBt = new JButton("Bet Tails");
JButton reset = new JButton("Reset");
setLayout(new GridLayout(5,1,10,10));
add(label);
add(label2);
add(headsBt);
add(tailsBt);
add(text);
add(reset);
add(label3);
headsBt.addActionListener(new BetButtonListener());
tailsBt.addActionListener(new BetButtonListener());
reset.addActionListener(new RESETButtonListener());
}
public class RESETButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
player.reset();
System.out.println("reset button");
}
}
public class BetButtonListener implements ActionListener{
public void actionPerformed(ActionEvent e){
//value = Integer.parseInt(text.getText());
player.bet();
int value = Integer.parseInt(text.getText());
//catch (NumberFormatException e){
if(value > player.getCurrMon()){
label3.setText("You are out of money");
repaint();
}
}
}
}
どうもありがとうございます。私はあなたの助けに本当に感謝しています!
コードを再編集した後、 ここに指示が続くと、次のようなエラーが表示され、アプリケーションを実行できませんでした。理由はわかりません。エラーは次のとおりです。
"
money is10
face isTails
Exception in thread "main" java.lang.NullPointerException
at java.awt.Container.addImpl(Unknown Source)
at java.awt.Container.add(Unknown Source)
at CoinPanel.<init>(CoinPanel.java:48)
at CoinPanelMain.main(CoinPanelMain.java:17)
" 上記の質問は解決しました。クラスで label3 を初期化するのを忘れていました..
質問が多すぎて申し訳ありません...ユーザーがテキストフィールドに入力したもの(つまり数字)に関係なく、現在のお金のラベルは常に2を増やしたり2を減らしたりします。ユーザー入力として変更されると思いますか?