Решебник системы линейных алгебраических уравнений - 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)