如果有人可以向正确的方向推动我,那将是很棒的。

或告诉我是否需要重做一些内容。

这是掷骰子的程序。我正在尝试在eDieField中显示每个“卷”。

这是课程:

import java.util.Random;

public class dice
{
  private int times;
  private int roll;
  private int side;
  public int[] each;
  Random roller = new Random();

  public void setTimes(int rolls)
  {
    times = rolls;
  }

  public void setSides(int die)
  {
    side = die;
  }

  public int getRoll()
  {
    int[] each = new int[times];
    int total = 0;
    int c = 0;
    int i = 0;
    while (c < times)
    {
      c = c + 1;
      roll = roller.nextInt(side);
      roll = roll + 1;
      each[i] = roll;
      total = total + roll;
      System.out.print(each[i] + " ");
      i = i + 1;
    }
    return total;
  }

  public int getEach()
  {
    return each[/*each number in the array*/];
  }
}


这是GUIWindow:

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;

public class GUIWindow extends JFrame
{
   private dice dices = new dice();

   private JLabel dice = new JLabel("# of Dice");
   private JLabel sides = new JLabel("# of Sides");
   private JLabel total = new JLabel("Total:");
   private JTextField diceField = new JTextField("");
   private JTextField sideField = new JTextField("");
   private JTextField totField = new JTextField("");
   private JButton button = new JButton ("Roll!");
   private JTextField eDieField = new JTextField("");
   private JLabel empt = new JLabel("Here is each roll");

   // Constructor
   public GUIWindow()
   {
      JPanel dataPanel = new JPanel(new GridLayout(2, 2, 12, 6));
      dataPanel.add(dice);
      dataPanel.add(sides);
      dataPanel.add(diceField);
      dataPanel.add(sideField);
      JPanel rPanel = new JPanel(new GridLayout(1, 3, 12, 6));
      rPanel.add(button);
      rPanel.add(total);
      rPanel.add(totField);
      JPanel eDiePan = new JPanel(new GridLayout(2, 1, 12, 6));
      eDiePan.add(empt);
      eDiePan.add(eDieField);
      Container container = getContentPane();
      container.add(dataPanel, BorderLayout.WEST);
      container.add(rPanel, BorderLayout.EAST);
      container.add(eDiePan, BorderLayout.SOUTH);
      button.addActionListener(new dieListener());
   }

   // >>>>>>> The controller <<<<<<<<




   private class dieListener implements ActionListener
   {
      public void actionPerformed(ActionEvent e)
      {
        try
        {
          String input = diceField.getText();
          int die = Integer.parseInt(input);
          dices.setTimes(die);
          String inputa = sideField.getText();
          int side = Integer.parseInt(inputa);
          dices.setSides(side);
          int tot = dices.getRoll();
          totField.setText("" + tot);
        }
        catch(Exception ex)
         {
          JOptionPane.showMessageDialog(GUIWindow.this,
                                         "Sorry,\nyou can do that with dice.",
                                         "Dice Fail",
                                         JOptionPane.ERROR_MESSAGE);
         }

        int eachd = dices.getEach();
        eDieField.setText("" + eachd);
      }
   }
}


主要:

import javax.swing.*;

public class diceRoller
{
   public static void main(String[] args)
   {
      GUIWindow theGUI = new GUIWindow();
      theGUI.setTitle("Dice Roller");
      theGUI.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
      theGUI.pack();
      theGUI.setVisible(true);
   }
}


我希望这不是坏行为,也不是什么,我只是不知道该怎么办。 (而我那愚蠢的教科书是没有用的),假设您输入4个骰子,每个骰子的4个面,并且用手滚动将出现的数字是2、4、3、4。加上的数字为13。“ totField”中有13个数字和2 4 3 4进入“ eDieField”。我不能让它工作。我一直在获取nullPointerException,并且我不知道如何保持数组each [],所以我可以获取eDieField的数字(或诸如列表之类的东西)。

最佳答案

您的方法存在一些问题,但是导致您的主要问题的是:

public int getRoll()
  {
    int[] each = new int[times];


您创建了一个名为“ each”的局部变量,但是您实际上并未实例化dice类中的局部变量。一旦函数离开作用域,本地“每个”将丢失,从而导致空指针错误。您认为自己在设置类变量时没有设置。

摆脱每个变量的本地定义(int []部分)。

下一部分是您的getEach函数。我知道您要尝试执行的操作,但这不是代码要执行的操作。尝试这样的事情(尽管您可能想将名称更改为类似getRollList()的名字):

  public String getEach()
   {
     StringBuffer sb = new StringBuffer();

     for (int i : each) {
       sb.append(i).append(",");
     }

     return sb.toString();
   }


并将GUIWindow类dieListener actionEvent更改为:

String eachd = dices.getEach();


(是的,我留给您找出最后一个逗号,呵呵,您可以只使用空格而不是逗号)。我能够让您的代码使用这些更改。

您应该更改的其他内容。命名Java类的常规约定是将类名称的第一个字符大写。 “骰子”类应更改为“骰子”。

关于java - 我真的很难弄清楚如何使我的GUI窗口显示数组中的值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4904340/

10-12 02:01