Решебник системы линейных алгебраических уравнений - Java
Формулировка задачи:
Здравствуйте! Я начал изучать Swing и решил написать свою первую программку - для решения СЛР. Работаю над ней уже больше часа и возник один вопрос. Вот весь исходный код:
А собственно вопрос касается следующих строк кода:
Здесь по логике должно происходить следующее - человек вводит в текстовое поле число, и оно запоминается в виде double-переменной. Если же он решил оставить поле пустым, то в переменную автоматически заносится значение 0. Но по факту оно так не происходит: компайлер все-равно выдает ошибку при попытке оставить текстовое поле пустым. Как решить эту проблему?
Вот интерфейс программки:
Хотелось бы также услышать предложения по улучшению кода. И так как я сам в программировании полный нуб, прошу строго не судить..
Листинг программы
- 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());
Решение задачи: «Решебник системы линейных алгебраических уравнений»
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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д