Из jTextField пример присвоить переменной - Java

Узнай цену своей работы

Формулировка задачи:

Добрый день. Предположим у нас есть переменная, в которой производим вычисления:
double rez = 0; rez = 5+3-8/2^2;
Ответ выводим в jLabel9 jLabel9.setText(jLabel9.getText()+rez+""); // Ответ: 6
На форме имеется текстовое поле (jTextField1), куда вводим пример (типа 5+3-8/2^2). Как нам извлечь из этого поля пример (для его вычисления) и результат записать в jLabel1?
Срочно надо. Спасибо заранее.

Решение задачи: «Из jTextField пример присвоить переменной»

textual
Листинг программы
package org.***;
 
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
 
/**
 * Created by ****.
 */
public class MainFrame extends JFrame {
    JLabel label;
    JTextArea textArea;
    JButton button;
    public MainFrame()  {
        super ("Экран");
        setBounds(500,500,300,300);
        setVisible(true);
        setDefaultCloseOperation(WindowConstants.EXIT_ON_CLOSE);
        setLayout(new BorderLayout());
        label = new JLabel("Введите формулу");
        textArea = new JTextArea();
        button = new JButton("BUTTON");
        add(label, BorderLayout.NORTH);
        add(textArea, BorderLayout.CENTER);
        add(button, BorderLayout.SOUTH);
 
        button.addActionListener(new ActionListener() {
            @Override
            public void actionPerformed(ActionEvent e) {
                //тут храним строку, взятую из JTextArea
                String s = textArea.getText();
                //здесь храним "отпарсенную" строку поэлементно
                java.util.List equation = new ArrayList<>();
                //строковая переменная состояния
                String state = "START";
                //временная переменная для записи чисел
                double current = 42;
                //начинаем парсить строку
                for (int i = 0; i < s.length(); i++){
                    switch (state){
                        case "START":
                            //если текущий элемент строки - число то записываем его во временную перемнную
                            if ((s.substring(i, i+1).equals("0"))||(s.substring(i, i+1).equals("1"))||(s.substring(i, i+1).equals("2"))||
                            (s.substring(i, i+1).equals("3"))||(s.substring(i, i+1).equals("4"))||(s.substring(i, i+1).equals("5"))||
                            (s.substring(i, i+1).equals("6"))||(s.substring(i, i+1).equals("7"))||(s.substring(i, i+1).equals("8"))||
                            (s.substring(i, i+1).equals("9"))){
                                current = Double.parseDouble(s.substring(i, i+1));
                                state = "NUMBER";
                            }
                            //иначе если элемент + - * /, то сразу пишем его в equation
                            else if ((s.substring(i, i+1).equals("+"))||(s.substring(i, i+1).equals("-"))||
                                    (s.substring(i, i+1).equals("*"))||(s.substring(i, i+1).equals("/"))){
                                equation.add(s.substring(i, i+1));
 
                            }
                            break;
 
                        case "NUMBER":
                            //в случае, если мы в состоянии "NUMBER", то мы либо продолжаем парсить число в current
                            //если опять пришло число
                            if ((s.substring(i, i+1).equals("0"))||(s.substring(i, i+1).equals("1"))||(s.substring(i, i+1).equals("2"))||
                                    (s.substring(i, i+1).equals("3"))||(s.substring(i, i+1).equals("4"))||(s.substring(i, i+1).equals("5"))||
                                    (s.substring(i, i+1).equals("6"))||(s.substring(i, i+1).equals("7"))||(s.substring(i, i+1).equals("8"))||
                                    (s.substring(i, i+1).equals("9"))){
                                current = current * 10 + Double.parseDouble(s.substring(i, i+1));
                            }
                            //иначе если элемент + - * /, то записываем в equation и число и знак
                            else if ((s.substring(i, i+1).equals("+"))||(s.substring(i, i+1).equals("-"))||
                                    (s.substring(i, i+1).equals("*"))||(s.substring(i, i+1).equals("/"))){
                                equation.add(current);
                                equation.add(s.substring(i, i+1));
                                state = "START";
                            }
                            break;
                    }
                }
                //для записи последнего элемента
                if (state.equals("NUMBER")) {
                    equation.add(current);
                }
 
                /*распарсили строку, теперь начинаем расчет
                сначала ищем все умножения и деления, потом сложения и вычитания*/
                //анализ "*"; "/"
                for (int i = 0; i < equation.size(); i++){
                    if (equation.get(i).equals("*")){
                        //упростили ( элементы массива a1; "*"; b1; = a2; null, null, где a2 = a1 * b1)
                        equation.set(i-1, (Double)equation.get(i-1)*(Double)equation.get(i+1));
                        //удаляем лишнее и сдвигаем последующие элементы
                        for (int j = i; j < equation.size()-2; j++){
                            equation.set(j, equation.get(j+2));
                        }
                        equation.remove(equation.size()-1);
                        equation.remove(equation.size()-1);
                        i--;
                    }
                    if (equation.get(i).equals("/")){
 
                        equation.set(i-1, (Double)equation.get(i-1)/(Double)equation.get(i+1));
                        //удаляем лишнее и сдвигаем последующие элементы
                        for (int j = i; j < equation.size()-2; j++){
                            equation.set(j, equation.get(j+2));
                        }
                        equation.remove(equation.size()-1);
                        equation.remove(equation.size()-1);
                        i--;
                    }
                }
 
                //теперь операции с меньшим приоритетом: "+"; "-"
 
                for (int i = 0; i < equation.size(); i++){
                    if (equation.get(i).equals("+")){
 
                        equation.set(i-1, (Double)equation.get(i-1)+(Double)equation.get(i+1));
                        //удаляем лишнее и сдвигаем последующие элементы
                        for (int j = i; j < equation.size()-2; j++){
                            equation.set(j, equation.get(j+2));
                        }
                        equation.remove(equation.size()-1);
                        equation.remove(equation.size()-1);
                        i--;
                    }
                    if (equation.get(i).equals("-")){
 
                        equation.set(i-1, (Double)equation.get(i-1)-(Double)equation.get(i+1));
                        //удаляем лишнее и сдвигаем последующие элементы
                        for (int j = i; j < equation.size()-2; j++){
                            equation.set(j, equation.get(j+2));
                        }
                        equation.remove(equation.size()-1);
                        equation.remove(equation.size()-1);
                        i--;
                    }
                }
 
                        label.setText(equation.get(0).toString());
            }
        });
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

7   голосов , оценка 3.571 из 5
Похожие ответы