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

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 vs2022无法联网
  • ¥15 TCP的客户端和服务器的互联
  • ¥15 VB.NET操作免驱摄像头
  • ¥15 笔记本上移动热点开关状态查询
  • ¥85 类鸟群Boids——仿真鸟群避障的相关问题
  • ¥15 CFEDEM自带算例错误,如何解决?
  • ¥15 有没有会使用flac3d软件的家人
  • ¥20 360摄像头无法解绑使用,请教解绑当前账号绑定问题,
  • ¥15 docker实践项目
  • ¥15 利用pthon计算薄膜结构的光导纳