用Java做一个简单的计算器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用Java做一个简单的计算器相关的知识,希望对你有一定的参考价值。

在JFrame框架最上是输入数字的JTextField,怎么使得JTextField的宽度随框架的改变一起改变,而且是恰好在宽度上填充满框架

参考技术A

    窗体
    package Calc;

    import java.awt.*;
    import java.awt.event.*;

    import javax.swing.*;

    /**
    *
    * 计算器程序
    *
    */
    public class CalcFrame extends JFrame
    JButton[] buttons = new JButton[16];// 16个按钮

    StringBuffer sb = null;//

    JTextField text1 = null;// 计算器结果显示框

    String no1 = null;

    String sign = null;// 表示+-*/符号

    String[] s = "0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "+", "-",
      "*", "/", "=", "C" ;// 面板上的字符

    public CalcFrame()
     setTitle("计算器");
     setResizable(false);
     setBounds(200, 200, 300, 350);
     setLayout(null);

     sb = new StringBuffer();
     text1 = new JTextField();
     text1.setBounds(10, 10, 250, 30);// 设置位置
     text1.setFont(new Font("Arial", Font.PLAIN, 20));// 设置字体
     text1.setForeground(Color.RED);// 设置颜色
     add(text1);
     for (int i = 0; i < s.length; i++)

      buttons[i] = new JButton(s[i]);
      buttons[i].setFont(new Font("Serif", Font.BOLD, 18));
      add(buttons[i]);
     // 生成面板上的按钮.

     buttons[0].setBounds(10, 50, 50, 40);
     buttons[0].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(0);
       text1.setText(sb.toString());
     

     );
     buttons[1].setBounds(70, 50, 50, 40);
     buttons[1].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(1);
       text1.setText(sb.toString());
     

     );
     buttons[2].setBounds(130, 50, 50, 40);
     buttons[2].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(2);
       text1.setText(sb.toString());
     

     );
     buttons[3].setBounds(190, 50, 50, 40);
     buttons[3].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(3);
       text1.setText(sb.toString());
     

     );
     buttons[4].setBounds(10, 100, 50, 40);
     buttons[4].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(4);
       text1.setText(sb.toString());
     

     );
     buttons[5].setBounds(70, 100, 50, 40);
     buttons[5].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(5);
       text1.setText(sb.toString());
     

     );
     buttons[6].setBounds(130, 100, 50, 40);
     buttons[6].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(6);
       text1.setText(sb.toString());
     

     );
     buttons[7].setBounds(190, 100, 50, 40);
     buttons[7].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(7);
       text1.setText(sb.toString());
     

     );
     buttons[8].setBounds(10, 150, 50, 40);
     buttons[8].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(8);
       text1.setText(sb.toString());
     

     );
     buttons[9].setBounds(70, 150, 50, 40);
     buttons[9].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.append(9);
       text1.setText(sb.toString());
     

     );
     buttons[10].setBounds(130, 150, 50, 40);
     buttons[10].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sign = "+";
       no1 = text1.getText();
       sb.delete(0, sb.capacity());

     
     );
     buttons[11].setBounds(190, 150, 50, 40);
     buttons[11].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sign = "-";
       no1 = text1.getText();
       sb.delete(0, sb.capacity());

     
     );
     buttons[12].setBounds(10, 200, 50, 40);
     buttons[12].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sign = "*";
       no1 = text1.getText();
       sb.delete(0, sb.capacity());

     
     );
     buttons[13].setBounds(70, 200, 50, 40);
     buttons[13].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sign = "/";
       no1 = text1.getText();
       sb.delete(0, sb.capacity());

     
     );
     buttons[14].setForeground(Color.RED);
     buttons[14].setBounds(130, 200, 50, 40);
     buttons[14].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       int sum = 0;//最终结果
       if (sign.equals("+"))
        int no2 = Integer.parseInt(no1);//取得前一个数

        int no3 = Integer.parseInt(text1.getText());//取得现在的数

        sum = no2 + no3;//累加

        text1.setText(String.valueOf(sum));

       
       if (sign.equals("-"))
        int no2 = Integer.parseInt(no1);

        int no3 = Integer.parseInt(text1.getText());

        sum = no2 - no3;

        text1.setText(String.valueOf(sum));

       
       if (sign.equals("*"))
        int no2 = Integer.parseInt(no1);

        int no3 = Integer.parseInt(text1.getText());

        sum = no2 * no3;

        text1.setText(String.valueOf(sum));

       

       if (sign.equals("/"))
        int no2 = Integer.parseInt(no1);

        int no3 = Integer.parseInt(text1.getText());

        sum = no2 / no3;

        text1.setText(String.valueOf(sum));

       

     

     );
     buttons[15].setBounds(190, 200, 50, 40);
     buttons[15].addActionListener(new ActionListener()

      public void actionPerformed(ActionEvent e)
       sb.delete(0, sb.capacity());//清除sb的内容
       text1.setText("");//结果框设置为空
     
     );

     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//响应关闭窗口
     setVisible(true);//显示窗口



    2.主程序类
    package Calc;

    public class CalcTest

    public static void main(String[] args)
     CalcFrame f = new CalcFrame();





学习Java就到IT学习联盟

本回答被提问者和网友采纳
参考技术B

简单统计 - 用于计算平均值、标准差等的 Java 包 [关闭]

【中文标题】简单统计 - 用于计算平均值、标准差等的 Java 包 [关闭]【英文标题】:Simple statistics - Java packages for calculating mean, standard deviation, etc [closed] 【发布时间】:2010-12-16 16:35:45 【问题描述】:

您能否推荐一些简单的 Java 统计数据包?

我不一定需要任何高级的东西。我很惊讶java.lang.Math 包中似乎没有计算平均值的函数...

你们用什么来做这个的?


编辑

关于:

写一个简单的类有多难 计算均值和标准的 偏差?

嗯,不难。我只是在手工编码后才问这个问题。但是,当我需要这些最简单的功能时,手头没有这些功能,这只会增加我的 Java 挫败感。我不记得用心计算标准差的公式了:)

【问题讨论】:

您不必记住它。任何称职的语言都应该使访问基本描述性统计数据变得简单。看到有人问“写一个标准差有多难”函数很有趣…… 【参考方案1】:

Apache Commons Math,特别是DescriptiveStatistics 和SummaryStatistics。

【讨论】:

谢谢。我认为没有真正的理由进一步寻找。您对 Apache Commons 感到满意,还是只是一般、足够好、可能会更好? 刚发现这个库,正好用来计算平均值、标准差。很容易拿起。 +1 API 使用double 而不是intlong,因此整数溢出不是问题。但是,它们无法处理超过 Integer.MAX_VALUE 双精度值的值集。 @MasterPeter - 但我敢肯定你记得 Wikipedia 的 URL :-) :-) 只是为了节省人们的点击次数:DescriptiveStatistics 将您发送的所有值保存在内存中,而 SummaryStatistics 不会将它们保存在内存中。【参考方案2】:

只回答这部分问题:

我很惊讶有 似乎不是一个函数 计算平均值 java.lang.Math 包...

我不认为我对此感到惊讶。 Java 类库没有实现许多“有用的算法”。他们没有实现一切。而且在这一点上,它们与其他编程语言没有什么不同。

实际上,如果 Sun 确实尝试在 J2SE 中实现太多,那将是一件坏事:

    这将花费更多设计师/开发人员/技术文档人员的时间......没有明确的“投资回报”。

    这会增加 Java 占用空间;例如“rt.jar”的大小。 (或者,如果他们试图缓解这种情况,则会导致平台更加复杂......)

    对于数学领域的事物,您通常需要以不同的方式(使用不同的 API)实现算法以满足不同的需求。

    对于复杂的事情,Sun 最好不要尝试“标准化”API,而是让其他感兴趣/技术熟练的团队来做;例如Apache 的人。

【讨论】:

【参考方案3】:

我认为java中没有直接的方法和类。我们必须为自己建造它。对于您的要求,此代码将为您提供帮助。 Calculate Standard Deviation in java

【讨论】:

在 John Paulett 回答两年后回答。显然有图书馆可以做到这一点。除非出于教育目的,否则我不会实施您自己的。【参考方案4】:
import java.util.*;
public class stdevClass 
    public static void main(String[] args)
        int [] list = 1,-2,4,-4,9,-6,16,-8,25,-10;
        double stdev_Result = stdev(list);
        System.out.println(stdev(list));
    

    public static double stdev(int[] list)
        double sum = 0.0;
        double mean = 0.0;
        double num=0.0;
        double numi = 0.0;
        double deno = 0.0;

        for (int i : list) 
            sum+=i;
        
        mean = sum/list.length;

        for (int i : list) 
            numi = Math.pow((double) i - mean), 2);
            num+=numi;
        

        return Math.sqrt(num/list.length);
    

【讨论】:

【参考方案5】:

自 Java SE 8 以来,平台中添加了许多类:

java.util.DoubleSummaryStatistics java.util.IntSummaryStatistics java.util.LongSummaryStatistics

【讨论】:

不错,但它不提供 getStd() 很糟糕 我不明白为什么计算偏差的方法没有添加到 IntSummaryStatistics。

以上是关于用Java做一个简单的计算器的主要内容,如果未能解决你的问题,请参考以下文章

用JavaScript做一个简易的计算器

用java语言做一个简单的小学生算数测试器

用VB做一个简单的加减乘除的计算器,代码是啥?

如何用java做一个计算器,请各位伸出援助之手,小女子感激不尽。

跪求高手用java做一个简易微博系统设计

求一个用java编程的计算器,要包括四则运算