【问题标题】:Follow up (merging single digit ints into one number)跟进(将一位整数合并为一个数字)
【发布时间】:2013-10-04 18:08:09
【问题描述】:

这是带有 GUI 的代码和我之前创建的 for 循环的修订版。每次用户按下一个按钮时,我都希望文本字段反映该按钮已被按下。

如果用户按下 1 按钮一次:1 被推到场上。 如果用户按两次 1 按钮:11 被推到场上。 ...等等。

相反,程序在第二次按下按钮时崩溃。谁能告诉我出了什么问题?

 import javax.swing.JFrame;
 import javax.swing.JPanel;
 import javax.swing.JButton;
 import javax.swing.JTextField;

 import java.awt.event.ActionListener;
 import java.awt.event.ActionEvent;

 import java.util.Arrays;
 import java.util.ArrayList;
 import java.lang.Math;

 public class poopy
 {
     public static void main(String[] args)
     {
        //frame width and height
       final int FRAME_WIDTH = 290;
       final int FRAME_HEIGHT = 210;

       //created frame and panel. Panel layout is taken away from the flow layout.
       JFrame myFrame = new JFrame();
       myFrame.setTitle("Simple Calculator");
       myFrame.setSize(FRAME_WIDTH,FRAME_HEIGHT);
       JPanel myPanel = new JPanel();
       myPanel.setLayout(null);

       //TextField on Simple Calculator
       final JTextField myText = new JTextField();
       myText.setSize(250,30);
       myText.setLocation(10,10);

       final JButton oneButton = new JButton("1");
       oneButton.setSize(50,50);
       oneButton.setLocation(10,102);

       //makes panel visible and close when the 'x' is hit
       myFrame.add(myPanel);
       myFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
       myFrame.setVisible(true);

       myPanel.add(oneButton);
       myPanel.add(myText);

       class CalculatorListener implements ActionListener
       {
           ArrayList<Integer> num = new ArrayList<Integer>();
           double x=0;
           int k = 0;

           public void actionPerformed(ActionEvent e)
           {

               if(e.getSource() == oneButton)
               {
                   num.add(1);

                   for(int i = num.size() -1; i>=0; i--)
                   {
                       x = num.get(k) * Math.pow(10,i);
                       k=k+1;
                   }

                   myText.setText(" " + String.valueOf(x));

               }
           }
       }

       //buttons are given life
       CalculatorListener myListener = new CalculatorListener();
       oneButton.addActionListener(myListener);
   }

}

【问题讨论】:

  • 程序“崩溃”时是否在特定代码行抛出特定异常?这可能会告诉你到底出了什么问题。

标签: java arraylist jbutton actionlistener jtextfield


【解决方案1】:

k 永远不会被重置为零,因此第二次通过循环时,您会从超出num 范围的索引开始。此外,x 每次通过循环都会被重置,而不是我假设你的意图是 - 添加到x 每次通过for 循环(然后需要在按钮被重置时重置再次按下)

试试这个:

if(e.getSource() == oneButton)
{
  num.add(1);
  k = 0;

  for(int i = num.size() -1; i>=0; i--)
  {
    x = num.get(k) * Math.pow(10,i);
    k=k+1;
  }

  myText.setText(" " + String.valueOf(x));

}

【讨论】:

  • 我了解 x。但我对我应该如何处理 k 感到困惑。当我将 k 放在 getSource if 语句下方时,按一次按钮时出现错误。
  • 我没有使用 arrayList 就知道了,我只是设置了一个 double 变量,每次按下数字按钮时,double 都会乘以 10,然后将适当的数字添加到末尾。
猜你喜欢
  • 1970-01-01
  • 2021-07-05
  • 1970-01-01
  • 2013-09-09
  • 1970-01-01
  • 2012-10-26
  • 2016-06-01
  • 2015-10-24
  • 1970-01-01
相关资源
最近更新 更多