跟进(将单个数字的int合并为一个数字)

时间:2013-10-04 18:08:10

标签: java arraylist jbutton actionlistener jtextfield

这是带有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);
   }

}

1 个答案:

答案 0 :(得分:0)

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));

}