Решебник системы линейных алгебраических уравнений - Java

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

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

Здравствуйте! Я начал изучать Swing и решил написать свою первую программку - для решения СЛР. Работаю над ней уже больше часа и возник один вопрос. Вот весь исходный код:
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
 
import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
 
import javax.swing.JButton;
 
public class Matrix extends JFrame {
    private JPanel mainPanel, jpp, jpp1, jpp2, jpp3, jp, jp1, jp2, jp3, jp4;
    private BorderLayout border;
    private GridLayout grid1, grid2, grid3;
    private FlowLayout f1, f2, f3, flow1, flow2, flow3, flow4;
    private JLabel label1, l1, l2, l3, l4, l5, l6, l7, l8, l9, label2, res1, res2, res3, res4;
    private JTextField txt1, txt2, txt3, txt4, txt5, txt6, txt7, txt8, txt9, t1, t2, t3, r1, r2, r3, r4, text;
    private JButton result, reset;
    private double x1, x2, x3, x4, x5, x6, x7, x8, x9, xx1, xx2, xx3, op, op1, op2, op3, resX1, resX2, resX3;
    
    JFrame jf;
    
    public String getTxt1() {
        return txt1.getText();
    }
 
    public void setTxt1(String val) {
        txt1.setText(val);
    }
 
    public String getTxt2() {
        return txt2.getText();
    }
 
    public void setTxt2(String val) {
        txt2.setText(val);
    }
 
    public String getTxt3() {
        return txt3.getText();
    }
 
    public void setTxt3(String val) {
        txt3.setText(val);
    }
 
    public String getTxt4() {
        return txt4.getText();
    }
 
    public void setTxt4(String val) {
        txt4.setText(val);
    }
 
    public String getTxt5() {
        return txt5.getText();
    }
 
    public void setTxt5(String val) {
        txt5.setText(val);
    }
 
    public String getTxt6() {
        return txt6.getText();
    }
 
    public void setTxt6(String val) {
        txt6.setText(val);
    }
 
    public String getTxt7() {
        return txt7.getText();
    }
 
    public void setTxt7(String val) {
        txt7.setText(val);
    }
 
    public String getTxt8() {
        return txt8.getText();
    }
 
    public void setTxt8(String val) {
        txt8.setText(val);
    }
 
    public String getTxt9() {
        return txt9.getText();
    }
 
    public void setTxt9(String val) {
        txt9.setText(val);
    }
    
    public String getr1() {
        return r1.getText();
    }
 
    public void setr1(String val) {
        r1.setText(val);
    }

    public String getr2() {
        return r2.getText();
    }
 
    public void setr2(String val) {
        r2.setText(val);
    }

    public String getr3() {
        return r3.getText();
    }
 
    public void setr3(String val) {
        r3.setText(val);
    }

    public String getr4() {
        return r4.getText();
    }
 
    public void setr4(String val) {
        r4.setText(val);
    }

    public String getText() {
        return text.getText();
    }
 
    public void setText(String val) {
        text.setText(val);
    }
    
    public String gett1() {
        return t1.getText();
    }
 
    public void sett1(String val) {
        t1.setText(val);
    }
    
    public String gett2() {
        return t2.getText();
    }
 
    public void sett2(String val) {
        t2.setText(val);
    }
    
    public String gett3() {
        return t3.getText();
    }
 
    public void sett3(String val) {
        t3.setText(val);
    }

    public class MatrixEngine implements ActionListener{
        
        Matrix matrix;
        
        public MatrixEngine(Matrix matrix){
            this.matrix = matrix;
        }
 
        @Override
        public void actionPerformed(ActionEvent e) {
            
            if (e.getSource() == reset){
                setTxt1(null);
                setTxt2(null);
                setTxt3(null);
                setTxt4(null);
                setTxt5(null);
                setTxt6(null);
                setTxt7(null);
                setTxt8(null);
                setTxt9(null);
                setr1(null);
                setr2(null);
                setr3(null);
                setr4(null);
                sett1(null);
                sett2(null);
                sett3(null);
                setText("Поля очищены!");
            } else if(e.getSource() == result){
                x1 = getTxt1() == null ? 0 : Double.parseDouble(getTxt1());
                x2 = getTxt2() == null ? 0 : Double.parseDouble(getTxt2());
                x3 = getTxt3() == null ? 0 : Double.parseDouble(getTxt3());
                x4 = getTxt4() == null ? 0 : Double.parseDouble(getTxt4());
                x5 = getTxt5() == null ? 0 : Double.parseDouble(getTxt5());
                x6 = getTxt6() == null ? 0 : Double.parseDouble(getTxt6());
                x7 = getTxt7() == null ? 0 : Double.parseDouble(getTxt7());
                x8 = getTxt8() == null ? 0 : Double.parseDouble(getTxt8());
                x9 = getTxt9() == null ? 0 : Double.parseDouble(getTxt9());
                
                op = x1*x5*x9 + x2*x6*x7 + x3*x4*x8 - x3*x5*x7 - x2*x4*x9 - x1*x6*x8;
                
                xx1 = Double.parseDouble(gett1());
                xx2 = Double.parseDouble(gett2());
                xx3 = Double.parseDouble(gett3());
                
                op1 = xx1*x5*x9 + x2*x6*xx3 + x3*xx2*x8 - x3*x5*xx3 - x2*xx2*x9 - xx1*x6*x8;
                
                op2 = x1*xx2*x9 + xx1*x6*x7 + x3*x4*xx3 - x3*xx2*x7 - xx1*x4*x9 - x1*x6*xx3;
                
                op3 = x1*x5*xx3 + x2*xx2*x7 + xx1*x4*x8 - xx1*x5*x7 - x2*x4*xx3 - x1*xx2*x8;
                
                setr1(Double.toString(op));
                
                resX1 = op1/op;
                resX2 = op2/op;
                resX3 = op3/op;
                
                setr2(Double.toString(resX1));
                setr3(Double.toString(resX2));
                setr4(Double.toString(resX3));
                
                setText("Операция прошла успешно!");
                
            }
            
        }
        
    }
    
    public Matrix(){
        
        MatrixEngine me = new MatrixEngine(this);
        
        mainPanel = new JPanel();
        border  = new BorderLayout();
        mainPanel.setLayout(border);
        
        label1 = new JLabel("               "
                           + "              "
                           + "              "
                           + "              "
                + "Введите Вашу систему линейных алгебраических уравнений: ");
 
        jpp = new JPanel();
        grid1 = new GridLayout(4,1);
        jpp.setLayout(grid1);
        jpp1 = new JPanel();
        f1 = new FlowLayout();
        jpp1.setLayout(f1);
        jpp2 = new JPanel();
        f2 = new FlowLayout();
        jpp2.setLayout(f2);
        jpp3 = new JPanel();
        f3 = new FlowLayout();
        jpp3.setLayout(f3);
        
        txt1 = new JTextField(5);
        l1 = new JLabel(" * x1 + ");
        txt2 = new JTextField(5);
        l2 = new JLabel(" * x2 + ");
        txt3 = new JTextField(5);
        l3 = new JLabel(" * x3 = ");
        t1 = new JTextField(5);
        
        jpp1.add(txt1);
        jpp1.add(l1);
        jpp1.add(txt2);
        jpp1.add(l2);
        jpp1.add(txt3);
        jpp1.add(l3);
        jpp1.add(t1);
        
        txt4 = new JTextField(5);
        l4 = new JLabel(" * x1 + ");
        txt5 = new JTextField(5);
        l5 = new JLabel(" * x2 + ");
        txt6 = new JTextField(5);
        l6 = new JLabel(" * x3 = ");
        t2 = new JTextField(5);
        
        jpp2.add(txt4);
        jpp2.add(l4);
        jpp2.add(txt5);
        jpp2.add(l5);
        jpp2.add(txt6);
        jpp2.add(l6);
        jpp2.add(t2);
        
        txt7 = new JTextField(5);
        l7 = new JLabel(" * x1 + ");
        txt8 = new JTextField(5);
        l8 = new JLabel(" * x2 + ");
        txt9 = new JTextField(5);
        l9 = new JLabel(" * x3 = ");
        t3 = new JTextField(5);
        
        jpp3.add(txt7);
        jpp3.add(l7);
        jpp3.add(txt8);
        jpp3.add(l8);
        jpp3.add(txt9);
        jpp3.add(l9);
        jpp3.add(t3);
        
        reset = new JButton("Очистить...");
        
        jpp.add(jpp1);
        jpp.add(jpp2);
        jpp.add(jpp3);
        jpp.add(reset);
        
        jp = new JPanel();
        grid2 = new GridLayout(5, 1);
        jp.setLayout(grid2);
        
        result = new JButton("Найти результат!");
        
        jp1 = new JPanel();
        flow1 = new FlowLayout();
        jp1.setLayout(flow1);
        
        res1 = new JLabel("Определитель det|A| = ");
        r1 = new JTextField(10);
        r1.setEditable(false);
        
        jp1.add(res1);
        jp1.add(r1);
        
        jp2 = new JPanel();
        flow2 = new FlowLayout();
        jp2.setLayout(flow2);
        
        res2 = new JLabel("x1 = ");
        r2 = new JTextField(20);
        r2.setEditable(false);
        
        jp2.add(res2);
        jp2.add(r2);
        
        jp3 = new JPanel();
        flow3 = new FlowLayout();
        jp3.setLayout(flow3);
        
        res3 = new JLabel("x2 = ");
        r3 = new JTextField(20);
        r3.setEditable(false);
        
        jp3.add(res3);
        jp3.add(r3);
        
        jp4 = new JPanel();
        flow4 = new FlowLayout();
        jp4.setLayout(flow4);
        
        res4 = new JLabel("x3 = ");
        r4 = new JTextField(20);
        r4.setEditable(false);
        
        jp4.add(res4);
        jp4.add(r4);
        
        jp.add(result);
        jp.add(jp1);
        jp.add(jp2);
        jp.add(jp3);
        jp.add(jp4);
        
        text = new JTextField(30);
        text.setEnabled(false);
        
        mainPanel.add("North", label1);
        mainPanel.add("West", jpp);
        mainPanel.add("Center", jp);
        mainPanel.add("South", text);
        
        result.addActionListener(me);
        reset.addActionListener(me);
        
        jf = new JFrame("Решебник системы линейных алгебраических уравнений");
        jf.setContentPane(mainPanel);
        jf.setVisible(true);
        jf.pack();
        jf.setResizable(false);
        jf.setLocationRelativeTo(rootPane);
        jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
    }
    
    public static void main(String args[]){
        new Matrix();
    }
}
А собственно вопрос касается следующих строк кода:
                x1 = getTxt1() == null ? 0 : Double.parseDouble(getTxt1());
                x2 = getTxt2() == null ? 0 : Double.parseDouble(getTxt2());
                x3 = getTxt3() == null ? 0 : Double.parseDouble(getTxt3());
                x4 = getTxt4() == null ? 0 : Double.parseDouble(getTxt4());
                x5 = getTxt5() == null ? 0 : Double.parseDouble(getTxt5());
                x6 = getTxt6() == null ? 0 : Double.parseDouble(getTxt6());
                x7 = getTxt7() == null ? 0 : Double.parseDouble(getTxt7());
                x8 = getTxt8() == null ? 0 : Double.parseDouble(getTxt8());
                x9 = getTxt9() == null ? 0 : Double.parseDouble(getTxt9());
Здесь по логике должно происходить следующее - человек вводит в текстовое поле число, и оно запоминается в виде double-переменной. Если же он решил оставить поле пустым, то в переменную автоматически заносится значение 0. Но по факту оно так не происходит: компайлер все-равно выдает ошибку при попытке оставить текстовое поле пустым. Как решить эту проблему? Вот интерфейс программки: Хотелось бы также услышать предложения по улучшению кода. И так как я сам в программировании полный нуб, прошу строго не судить..

Решение задачи: «Решебник системы линейных алгебраических уравнений»

textual
Листинг программы
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
    at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
    at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
    at java.lang.Double.parseDouble(Double.java:538)
    at Matrix$MatrixEngine.actionPerformed(Matrix.java:204)
    at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
    at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
    at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
    at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
    at java.awt.Component.processMouseEvent(Component.java:6525)
    at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
    at java.awt.Component.processEvent(Component.java:6290)
    at java.awt.Container.processEvent(Container.java:2234)
    at java.awt.Component.dispatchEventImpl(Component.java:4881)
    at java.awt.Container.dispatchEventImpl(Container.java:2292)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
    at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
    at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
    at java.awt.Container.dispatchEventImpl(Container.java:2278)
    at java.awt.Window.dispatchEventImpl(Window.java:2750)
    at java.awt.Component.dispatchEvent(Component.java:4703)
    at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
    at java.awt.EventQueue.access$500(EventQueue.java:97)
    at java.awt.EventQueue$3.run(EventQueue.java:702)
    at java.awt.EventQueue$3.run(EventQueue.java:696)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
    at java.awt.EventQueue$4.run(EventQueue.java:724)
    at java.awt.EventQueue$4.run(EventQueue.java:722)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
    at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
    at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
    at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
    at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

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


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

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

7   голосов , оценка 4 из 5