2013-10-04 21 views
0

下面是帶有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

當程序「崩潰」時,在特定的代碼行中是否存在特定的異常?那可能會告訴你到底發生了什麼問題。 – David

回答

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

} 
+0

我瞭解x。但我對我應該用k做什麼感到困惑。當我將k放在getSource if語句的下面時,當我按下一個按鈕時出現錯誤。 – llamaCaraDara

+0

將更新我的答案 –

+0

我想出了它沒有使用arrayList,我只是設置一個雙變量,每次按下一個數字按鈕時,double將乘以10,然後將相應的數字添加到結尾。 – llamaCaraDara

相關問題