Решебник системы линейных алгебраических уравнений - 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)
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д