whlgnb 2021-12-13 16:13 采纳率: 100%
浏览 45
已结题

java GUI界面计算输入数值的和以及平均值,结果总是0

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

public class GUI {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        EventQueue.invokeLater(()->{
            var frame=new myFrame();
            frame.setTitle("求和与平均");
            frame.setVisible(true);
            frame.setResizable(true);
            frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        });
    }
}

class myFrame extends JFrame{
    Toolkit toolkit=Toolkit.getDefaultToolkit();
    Dimension size=toolkit.getScreenSize();
    int width=size.width;
    int height=size.height;
    JPanel inputPanel=new JPanel();
    JPanel outputPanel=new JPanel();
    JPanel buttonPanel=new JPanel();
    JTextArea inputArea=new JTextArea(30,45);
    JTextField sumField=new JTextField();
    JTextField aveField=new JTextField();
    class calculateAction implements ActionListener{
        private int n=0;
        private double[] data=new double[100];
        String s1;
        String a;
        calculateAction(String s){
            char[] d=s.toCharArray();
            int i=0;
            double sum=0;
            int p=0;
            boolean ispositive=true;
            boolean isinteger=true;
            for(char da:d) {
                if(da=='-') {
                    ispositive=false;
                }else if(da=='.') {
                    isinteger=false;
                    p++;
                }else if(da==',') {
                    if(ispositive) {
                        data[i]=sum;
                    }else {
                        data[i]=sum*(-1);
                    }
                    sum=0;
                    p=0;
                    ispositive=true;
                    isinteger=true;
                    i++;
                }else if(Character.isDigit(da)) {
                    int data=da-'0';
                    if(isinteger) {
                        sum=sum*10+data;
                    }else {
                        sum=sum+data*Math.pow(0.1, p);
                    }
                    p++;
                }
            }
            n=i;
            double sum1=0;
            double ave;
            for(int i1=0;i1<n;i1++) {
                System.out.println(data[i1]);
                sum1=sum1+data[i1];
            }
            ave=sum1/n;
            s1=String.format("%.3f", sum1);
            a=String.format("%.3f",ave);
        }
        public void actionPerformed(ActionEvent event) {
            
            
            sumField.setText(s1);
            aveField.setText(a);
        
        }
        
        
    }
    myFrame(){
        setBounds(width/4,height/4,width/3,height/2);
        inputPanel.add(inputArea);
        add(inputPanel,BorderLayout.CENTER);
        var button=new JButton("计算");
        outputPanel.setLayout(new GridLayout(3,2));
        outputPanel.add(new JLabel("和值",SwingConstants.CENTER));
        outputPanel.add(sumField);
        outputPanel.add(new JLabel("平均值",SwingConstants.CENTER));
        outputPanel.add(aveField);
        buttonPanel.add(button);
        outputPanel.add(buttonPanel);
        add(outputPanel,BorderLayout.SOUTH);
        button.addActionListener(new calculateAction(inputArea.getText()));
    }
}

img

错误界面如上
初学Java,还望各位指点
  • 写回答

1条回答 默认 最新

  • CSDN专家-sinJack 2021-12-13 16:55
    关注

    触发事件中,打印一下组件中的数据。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月28日
  • 已采纳回答 12月20日
  • 创建了问题 12月13日

悬赏问题

  • ¥15 关于#matlab#的问题:在模糊控制器中选出线路信息,在simulink中根据线路信息生成速度时间目标曲线(初速度为20m/s,15秒后减为0的速度时间图像)我想问线路信息是什么
  • ¥15 banner广告展示设置多少时间不怎么会消耗用户价值
  • ¥16 mybatis的代理对象无法通过@Autowired装填
  • ¥15 可见光定位matlab仿真
  • ¥15 arduino 四自由度机械臂
  • ¥15 wordpress 产品图片 GIF 没法显示
  • ¥15 求三国群英传pl国战时间的修改方法
  • ¥15 matlab代码代写,需写出详细代码,代价私
  • ¥15 ROS系统搭建请教(跨境电商用途)
  • ¥15 AIC3204的示例代码有吗,想用AIC3204测量血氧,找不到相关的代码。