【问题标题】:how to getting numbers from calculator text area(without operators)?如何从计算器文本区域获取数字(没有运算符)?
【发布时间】:2017-12-04 18:09:55
【问题描述】:

在我之前的问题中,我没有得到有用的答案,我希望我能得到一些东西:)

这是我的代码:

import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

class Calculator extends JFrame
{
  public Calculator()
{
    JFrame jf = new JFrame("Calculator");
    jf.setLocation(500,200);
    jf.setSize(600,400);
    jf.setDefaultCloseOperation(jf.EXIT_ON_CLOSE);


    /*=======================Add panel==============================
    ================================================================*/
    JPanel jp = new JPanel();
    jp.setLayout(null);
    jp.setBackground(Color.cyan);
    jf.add(jp);

    /*========================Add Textarea========================
    ================================================================*/

    JTextArea jta = new JTextArea("");
    jta.setBounds(100,25,290,50);
    jp.add(jta);

    /*========================Creating Font========================
    ===============================================================*/

    Font labels = new Font("Lucida Console",Font.PLAIN, 20);
    Font nums = new Font("Lucida Console",Font.PLAIN, 9);

    /*========================Add Labels============================
    ================================================================*/

    /*  for H align: ,SwingConstants.CENTER */
    JLabel jlbl = new JLabel("=");
    jlbl.setFont(labels);   //  MAKING FONT BIGGER
    jlbl.setBounds(400,30,50,40);
    jp.add(jlbl);


    JLabel jlbl_result = new JLabel();
    String temp = jta.getText();
    jlbl_result.setText(temp);

    /*=========================Adding button============================
    ====================================================================*/

    JButton jbtn1 = new JButton("1");
    jbtn1.setBounds(120,100,50,40);
    jbtn1.setBackground(Color.green);
    jp.add(jbtn1);

    JButton jbtn2 = new JButton("2");
    jbtn2.setBounds(180,100,50,40);
    jbtn2.setBackground(Color.green);
    jp.add(jbtn2);

    JButton jbtn3 = new JButton("3");
    jbtn3.setBounds(240,100,50,40);
    jbtn3.setBackground(Color.green);
    jp.add(jbtn3);

    JButton jbtn4 = new JButton("4");
    jbtn4.setBounds(120,155,50,40);
    jbtn4.setBackground(Color.green);
    jp.add(jbtn4);

    JButton jbtn5 = new JButton("5");
    jbtn5.setBounds(180,155,50,40);
    jbtn5.setBackground(Color.green);
    jp.add(jbtn5);

    JButton jbtn6 = new JButton("6");
    jbtn6.setBounds(240,155,50,40);
    jbtn6.setBackground(Color.green);
    jp.add(jbtn6);

    JButton jbtn7 = new JButton("7");
    jbtn7.setBounds(120,210,50,40);
    jbtn7.setBackground(Color.green);
    jp.add(jbtn7);

    JButton jbtn8 = new JButton("8");
    jbtn8.setBounds(180,210,50,40);
    jbtn8.setBackground(Color.green);
    jp.add(jbtn8);

    JButton jbtn9 = new JButton("9");
    jbtn9.setBounds(240,210,50,40);
    jbtn9.setBackground(Color.green);
    jp.add(jbtn9);

    JButton jbtn0 = new JButton("0");
    jbtn0.setBounds(180,265,50,40);
    jbtn0.setBackground(Color.green);
    jp.add(jbtn0);

    JButton jbtn_sum = new JButton("+");
    jbtn_sum.setBounds(380,100,40,40);
    jbtn_sum.setFont(nums);
    jbtn_sum.setBackground(Color.gray);
    jp.add(jbtn_sum);

    JButton jbtn_sub = new JButton("-");
    jbtn_sub.setBounds(380,100,40,40);
    jbtn_sub.setFont(nums);
    jbtn_sub.setBackground(Color.gray);
    jp.add(jbtn_sub);

    JButton jbtn_equal = new JButton("-");
    jbtn_equal.setBounds(380,155,40,40);
    jbtn_equal.setFont(nums);
    jp.add(jbtn_equal);


    jf.setVisible(true);

            jbtn1.addActionListener(e->jta.append("1"));
            jbtn2.addActionListener(e->jta.append("2"));
            jbtn3.addActionListener(e->jta.append("3"));
            jbtn4.addActionListener(e->jta.append("4"));
            jbtn5.addActionListener(e->jta.append("5"));
            jbtn6.addActionListener(e->jta.append("6"));
            jbtn7.addActionListener(e->jta.append("7"));
            jbtn8.addActionListener(e->jta.append("8"));
            jbtn9.addActionListener(e->jta.append("9"));
            jbtn0.addActionListener(e->jta.append("0"));
            jbtn_equal.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent evt2)
                {

                }
            });
            //jbtn_sub.addActionListener(e->jta.append("-"));
            jbtn_sum.addActionListener(new ActionListener()
            {
                public void actionPerformed(ActionEvent evt)
                {

                }
            });
}
public static void main(String...ser)
{
    new Calculator();
}
}

我知道!有很多代码,我想将输入的数字放入 JTextArea 变量中,如何获取数字(只是没有运算符的数字) 并将其分配给变量?

并且...需要多少个变量?(如果我有超过 5 个变量)

还有很多问题……我这里写不出来

谢谢你的帮助(原谅我语法不好)

【问题讨论】:

  • “还有很多问题......,我不能在这里写下来”:如果你想回答这些问题,你需要写下来。

标签: java variables operators calculator


【解决方案1】:

您从 JTextArea 下载文本并将其保存到新字符串。如果只下载数字,只需使用 parseInt () 函数将 String 转换为 int。 如果您输入带有运算符的操作,例如 2 + 2,那么您可以使用模式来捕获数字,您可以使用 split () 函数将字符串中的 2 个数字用一些符号分隔,可能性很多;)

如果这不是您的想法,请撰写问题,我会尽力提供帮助。

【讨论】:

  • 我想我明白了!但是如何从输入的公式中删除运算符?如果你能告诉我,如何设置数学规则?对于 .e.g->('*' 是在 '+' 或 '-' 之前工作)?谢谢!
【解决方案2】:

从 JTextArea 中获取文本,然后将其按非数字字符拆分为字符串数组,如下所示:

String[] numbers = jta.getText().split("\\D+");

例如,如果您使用此正则表达式拆分字符串“1+23-5”,您将得到以下数组:{"1","23","5"}。

如果要将数字存储为 int,请使用 for-each 循环将 String 数组复制到 int 数组中:

int[] ints = new int[numbers.length]
for( int i = 0; i < numbers.length; i++){
    ints[i] = Integer.parseInt(numbers[i]);
}

然后,不要将每个数字放在单独的变量中,只需将它们保存在数组中,并在需要时通过索引访问它们。

【讨论】:

  • 谢谢!有效!!我仍然必须考虑如何使用数字?,请另一个问题!当我有不同的运营商时,这些代码是否有效? (-,/,*,...)
  • 是的,它会起作用的。正则表达式将字符串拆分为任何不是数字的字符。
  • @mhamadarsalan 如果此答案对您有帮助,请考虑将其选为已接受的答案。
  • 抱歉,我暂时跳过了那个项目,谢谢,但我注意到了一些事情!首先它不是(for-each)循环,我猜它是一个常规(for)循环,第二件事是你的 RegEx 忽略了数字!它需要没有数字的所有内容,并且没有使用场景,我使用了This Website,它对我有一点帮助,顺便说一句,谢谢你的回答
  • 不客气。你的问题最终得到回答了吗?如果没有,那么您可能应该问一个新问题。我真的不明白你忽略数字或关于循环的意思。但我希望你能弄清楚。
猜你喜欢
  • 2012-12-14
  • 2021-07-11
  • 1970-01-01
  • 1970-01-01
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多