shaokel 2018-12-20 15:27 采纳率: 95.2%
浏览 551
已采纳

刚学完Java,做了一个简易计算器,但是不明白String =""; 是什么意思,希望大佬能帮帮我

package calc;

import javax.swing.*;

import java.util.ArrayList;

import java.util.List;

import java.util.regex.*;

import java.awt.*;

import java.awt.event.*;

public class calc extends JFrame implements ActionListener {

JPanel p1 = new JPanel();
JPanel p2 = new JPanel();
JButton button[]=new JButton[18];
TextField field = new TextField(10);// 文本框
private calc() {
    p1.setLayout(new GridLayout(4,4));
    field.setFont(new Font("Arial",Font.BOLD,22));
    field.setEditable(false);//文本框不可编辑
    p2.add(field);
    char ch[][]= {{'7','8','9','/'},{'4','5','6','*'},{'1','2','3','-'},{'0','.','+','='}};
    for(int i=0;i<4;i++) {
        for(int j=0;j<4;j++) {
            button[i*4+j]=new JButton(""+ch[i][j]);
            button[i*4+j].addActionListener(this);
            p1.add(button[i*4+j]);
        }
    }
    button[16]=new JButton("<——");
    button[17]=new JButton("清空");
    button[16].addActionListener(this);
    button[17].addActionListener(this);
    p2.add(button[16]);
    p2.add(button[17]);
    this.setTitle("计算器");
    this.setVisible(true);
    this.setResizable(false);//窗口不可拉伸
    this.add(p1,BorderLayout.SOUTH);
    this.add(p2,BorderLayout.CENTER);
    Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();//获取屏幕尺寸
    int Width = (int) screenSize.getWidth();
    int Height = (int) screenSize.getHeight();
    this.setBounds((Width-225)/2,(Height-323)/2,300,250);//计算器大小
    this.setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
}
String ch="";
public void actionPerformed(ActionEvent e) {// 单击按钮事件处理
    if(e.getSource()==button[16]||e.getSource()==button[17]){
        if(e.getSource()==button[16]) {
            if(!ch.isEmpty()) {//判断是否为空
                ch=ch.substring(0,ch.length()-1);//后退一格
            }
        }
        else ch="";
    }
    else {
        if(e.getSource()==button[15]) {//等号
            Double dd=Calculation(ch.trim());//trim去掉字符串两端的空格
            if(dd==Double.MAX_VALUE) {
                field.setText("error!");
                validate();
                return ;
            }
            else ch=dd.toString();
        }
        else {
            ch+=e.getActionCommand().toString().trim();
        }
    }
    if(ch.isEmpty())  field.setText("0");
     else field.setText(ch);
    validate();
}
private double Calculation(String ch){
    //从字符串中提取运算符
    Pattern patt = Pattern.compile("\\+|\\-|\\*|\\/");//正则表达式
    Matcher matc = patt.matcher(ch);//匹配器
    List<String> lis = new ArrayList<>();//泛型
    while(matc.find()) {//find()对任意字符串进行匹配
        lis.add(matc.group());//group()从头到尾整个匹配符合的字符串
    }
    String str[]=lis.toArray(new String[0]); //将泛型转换为数组,提取运算符
    //从字符串中提取数字
    Pattern pattern=Pattern.compile("\\.\\d|\\d+(\\.\\d+)?");
    Matcher matcher=pattern.matcher(ch);
    List<String> list=new ArrayList<>();
    while(matcher.find()) {
        list.add(matcher.group());
    }
    String st[]=list.toArray(new String[0]);
    double sum=Double.parseDouble(st[0]);//提取第一个数字
    System.out.println(sum);
    for(int i=0;i<str.length;i++) {
        switch(str[i].charAt(0)) {//charAt(0)表示提取第一个字符
            case '+':sum+=Double.parseDouble(st[i+1]);break;//提取第二个数字,并运算
            case '-':sum-=Double.parseDouble(st[i+1]);break;
            case '*':sum*=Double.parseDouble(st[i+1]);break;
            case '/':{
                Double d=Double.parseDouble(st[i+1]);
                if(d.equals(0))
                    return Double.MAX_VALUE;
                break;
            }
            default:System.out.println("错误!");break;
        }
    }
    return sum;
}
public static void main(String[] args) {
    new calc();
}

}


  • 写回答

3条回答 默认 最新

  • 孤独不是寂寞 2018-12-20 07:31
    关注

    你是说String ch="";这个嘛;不是String ="";这个吧。String本身是java的一种数据类型,String ch="";这个便是定义了一个String类型的字符串变量ch,并给它赋了一个“”空值,相当于初始化

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

问题事件

  • 已采纳回答 10月9日

悬赏问题

  • ¥15 有没有整苹果智能分拣线上图像数据
  • ¥20 有没有人会这个东西的
  • ¥15 cfx考虑调整“enforce system memory limit”参数的设置
  • ¥30 航迹分离,航迹增强,误差分析
  • ¥15 Chrome Manifest扩展引用Ajax-hook库拦截请求失败
  • ¥15 用Ros中的Topic通讯方式控制小乌龟的速度,走矩形;编写订阅器代码
  • ¥15 LLM accuracy检测
  • ¥15 pycharm添加远程解释器报错
  • ¥15 如何让子窗口鼠标滚动独立,不要传递消息给主窗口
  • ¥15 如何能达到用ping0.cc检测成这样?如图