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

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

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

Здравствуйте! Я начал изучать Swing и решил написать свою первую программку - для решения СЛР. Работаю над ней уже больше часа и возник один вопрос. Вот весь исходный код:
Листинг программы
  1. import javax.swing.JFrame;
  2. import javax.swing.JLabel;
  3. import javax.swing.JPanel;
  4. import javax.swing.JTextField;
  5. import java.awt.BorderLayout;
  6. import java.awt.FlowLayout;
  7. import java.awt.GridLayout;
  8. import java.awt.event.ActionEvent;
  9. import java.awt.event.ActionListener;
  10. import javax.swing.JButton;
  11. public class Matrix extends JFrame {
  12. private JPanel mainPanel, jpp, jpp1, jpp2, jpp3, jp, jp1, jp2, jp3, jp4;
  13. private BorderLayout border;
  14. private GridLayout grid1, grid2, grid3;
  15. private FlowLayout f1, f2, f3, flow1, flow2, flow3, flow4;
  16. private JLabel label1, l1, l2, l3, l4, l5, l6, l7, l8, l9, label2, res1, res2, res3, res4;
  17. private JTextField txt1, txt2, txt3, txt4, txt5, txt6, txt7, txt8, txt9, t1, t2, t3, r1, r2, r3, r4, text;
  18. private JButton result, reset;
  19. private double x1, x2, x3, x4, x5, x6, x7, x8, x9, xx1, xx2, xx3, op, op1, op2, op3, resX1, resX2, resX3;
  20. JFrame jf;
  21. public String getTxt1() {
  22. return txt1.getText();
  23. }
  24. public void setTxt1(String val) {
  25. txt1.setText(val);
  26. }
  27. public String getTxt2() {
  28. return txt2.getText();
  29. }
  30. public void setTxt2(String val) {
  31. txt2.setText(val);
  32. }
  33. public String getTxt3() {
  34. return txt3.getText();
  35. }
  36. public void setTxt3(String val) {
  37. txt3.setText(val);
  38. }
  39. public String getTxt4() {
  40. return txt4.getText();
  41. }
  42. public void setTxt4(String val) {
  43. txt4.setText(val);
  44. }
  45. public String getTxt5() {
  46. return txt5.getText();
  47. }
  48. public void setTxt5(String val) {
  49. txt5.setText(val);
  50. }
  51. public String getTxt6() {
  52. return txt6.getText();
  53. }
  54. public void setTxt6(String val) {
  55. txt6.setText(val);
  56. }
  57. public String getTxt7() {
  58. return txt7.getText();
  59. }
  60. public void setTxt7(String val) {
  61. txt7.setText(val);
  62. }
  63. public String getTxt8() {
  64. return txt8.getText();
  65. }
  66. public void setTxt8(String val) {
  67. txt8.setText(val);
  68. }
  69. public String getTxt9() {
  70. return txt9.getText();
  71. }
  72. public void setTxt9(String val) {
  73. txt9.setText(val);
  74. }
  75. public String getr1() {
  76. return r1.getText();
  77. }
  78. public void setr1(String val) {
  79. r1.setText(val);
  80. }
  81.  
  82. public String getr2() {
  83. return r2.getText();
  84. }
  85. public void setr2(String val) {
  86. r2.setText(val);
  87. }
  88.  
  89. public String getr3() {
  90. return r3.getText();
  91. }
  92. public void setr3(String val) {
  93. r3.setText(val);
  94. }
  95.  
  96. public String getr4() {
  97. return r4.getText();
  98. }
  99. public void setr4(String val) {
  100. r4.setText(val);
  101. }
  102.  
  103. public String getText() {
  104. return text.getText();
  105. }
  106. public void setText(String val) {
  107. text.setText(val);
  108. }
  109. public String gett1() {
  110. return t1.getText();
  111. }
  112. public void sett1(String val) {
  113. t1.setText(val);
  114. }
  115. public String gett2() {
  116. return t2.getText();
  117. }
  118. public void sett2(String val) {
  119. t2.setText(val);
  120. }
  121. public String gett3() {
  122. return t3.getText();
  123. }
  124. public void sett3(String val) {
  125. t3.setText(val);
  126. }
  127.  
  128. public class MatrixEngine implements ActionListener{
  129. Matrix matrix;
  130. public MatrixEngine(Matrix matrix){
  131. this.matrix = matrix;
  132. }
  133. @Override
  134. public void actionPerformed(ActionEvent e) {
  135. if (e.getSource() == reset){
  136. setTxt1(null);
  137. setTxt2(null);
  138. setTxt3(null);
  139. setTxt4(null);
  140. setTxt5(null);
  141. setTxt6(null);
  142. setTxt7(null);
  143. setTxt8(null);
  144. setTxt9(null);
  145. setr1(null);
  146. setr2(null);
  147. setr3(null);
  148. setr4(null);
  149. sett1(null);
  150. sett2(null);
  151. sett3(null);
  152. setText("Поля очищены!");
  153. } else if(e.getSource() == result){
  154. x1 = getTxt1() == null ? 0 : Double.parseDouble(getTxt1());
  155. x2 = getTxt2() == null ? 0 : Double.parseDouble(getTxt2());
  156. x3 = getTxt3() == null ? 0 : Double.parseDouble(getTxt3());
  157. x4 = getTxt4() == null ? 0 : Double.parseDouble(getTxt4());
  158. x5 = getTxt5() == null ? 0 : Double.parseDouble(getTxt5());
  159. x6 = getTxt6() == null ? 0 : Double.parseDouble(getTxt6());
  160. x7 = getTxt7() == null ? 0 : Double.parseDouble(getTxt7());
  161. x8 = getTxt8() == null ? 0 : Double.parseDouble(getTxt8());
  162. x9 = getTxt9() == null ? 0 : Double.parseDouble(getTxt9());
  163. op = x1*x5*x9 + x2*x6*x7 + x3*x4*x8 - x3*x5*x7 - x2*x4*x9 - x1*x6*x8;
  164. xx1 = Double.parseDouble(gett1());
  165. xx2 = Double.parseDouble(gett2());
  166. xx3 = Double.parseDouble(gett3());
  167. op1 = xx1*x5*x9 + x2*x6*xx3 + x3*xx2*x8 - x3*x5*xx3 - x2*xx2*x9 - xx1*x6*x8;
  168. op2 = x1*xx2*x9 + xx1*x6*x7 + x3*x4*xx3 - x3*xx2*x7 - xx1*x4*x9 - x1*x6*xx3;
  169. op3 = x1*x5*xx3 + x2*xx2*x7 + xx1*x4*x8 - xx1*x5*x7 - x2*x4*xx3 - x1*xx2*x8;
  170. setr1(Double.toString(op));
  171. resX1 = op1/op;
  172. resX2 = op2/op;
  173. resX3 = op3/op;
  174. setr2(Double.toString(resX1));
  175. setr3(Double.toString(resX2));
  176. setr4(Double.toString(resX3));
  177. setText("Операция прошла успешно!");
  178. }
  179. }
  180. }
  181. public Matrix(){
  182. MatrixEngine me = new MatrixEngine(this);
  183. mainPanel = new JPanel();
  184. border = new BorderLayout();
  185. mainPanel.setLayout(border);
  186. label1 = new JLabel(" "
  187. + " "
  188. + " "
  189. + " "
  190. + "Введите Вашу систему линейных алгебраических уравнений: ");
  191. jpp = new JPanel();
  192. grid1 = new GridLayout(4,1);
  193. jpp.setLayout(grid1);
  194. jpp1 = new JPanel();
  195. f1 = new FlowLayout();
  196. jpp1.setLayout(f1);
  197. jpp2 = new JPanel();
  198. f2 = new FlowLayout();
  199. jpp2.setLayout(f2);
  200. jpp3 = new JPanel();
  201. f3 = new FlowLayout();
  202. jpp3.setLayout(f3);
  203. txt1 = new JTextField(5);
  204. l1 = new JLabel(" * x1 + ");
  205. txt2 = new JTextField(5);
  206. l2 = new JLabel(" * x2 + ");
  207. txt3 = new JTextField(5);
  208. l3 = new JLabel(" * x3 = ");
  209. t1 = new JTextField(5);
  210. jpp1.add(txt1);
  211. jpp1.add(l1);
  212. jpp1.add(txt2);
  213. jpp1.add(l2);
  214. jpp1.add(txt3);
  215. jpp1.add(l3);
  216. jpp1.add(t1);
  217. txt4 = new JTextField(5);
  218. l4 = new JLabel(" * x1 + ");
  219. txt5 = new JTextField(5);
  220. l5 = new JLabel(" * x2 + ");
  221. txt6 = new JTextField(5);
  222. l6 = new JLabel(" * x3 = ");
  223. t2 = new JTextField(5);
  224. jpp2.add(txt4);
  225. jpp2.add(l4);
  226. jpp2.add(txt5);
  227. jpp2.add(l5);
  228. jpp2.add(txt6);
  229. jpp2.add(l6);
  230. jpp2.add(t2);
  231. txt7 = new JTextField(5);
  232. l7 = new JLabel(" * x1 + ");
  233. txt8 = new JTextField(5);
  234. l8 = new JLabel(" * x2 + ");
  235. txt9 = new JTextField(5);
  236. l9 = new JLabel(" * x3 = ");
  237. t3 = new JTextField(5);
  238. jpp3.add(txt7);
  239. jpp3.add(l7);
  240. jpp3.add(txt8);
  241. jpp3.add(l8);
  242. jpp3.add(txt9);
  243. jpp3.add(l9);
  244. jpp3.add(t3);
  245. reset = new JButton("Очистить...");
  246. jpp.add(jpp1);
  247. jpp.add(jpp2);
  248. jpp.add(jpp3);
  249. jpp.add(reset);
  250. jp = new JPanel();
  251. grid2 = new GridLayout(5, 1);
  252. jp.setLayout(grid2);
  253. result = new JButton("Найти результат!");
  254. jp1 = new JPanel();
  255. flow1 = new FlowLayout();
  256. jp1.setLayout(flow1);
  257. res1 = new JLabel("Определитель det|A| = ");
  258. r1 = new JTextField(10);
  259. r1.setEditable(false);
  260. jp1.add(res1);
  261. jp1.add(r1);
  262. jp2 = new JPanel();
  263. flow2 = new FlowLayout();
  264. jp2.setLayout(flow2);
  265. res2 = new JLabel("x1 = ");
  266. r2 = new JTextField(20);
  267. r2.setEditable(false);
  268. jp2.add(res2);
  269. jp2.add(r2);
  270. jp3 = new JPanel();
  271. flow3 = new FlowLayout();
  272. jp3.setLayout(flow3);
  273. res3 = new JLabel("x2 = ");
  274. r3 = new JTextField(20);
  275. r3.setEditable(false);
  276. jp3.add(res3);
  277. jp3.add(r3);
  278. jp4 = new JPanel();
  279. flow4 = new FlowLayout();
  280. jp4.setLayout(flow4);
  281. res4 = new JLabel("x3 = ");
  282. r4 = new JTextField(20);
  283. r4.setEditable(false);
  284. jp4.add(res4);
  285. jp4.add(r4);
  286. jp.add(result);
  287. jp.add(jp1);
  288. jp.add(jp2);
  289. jp.add(jp3);
  290. jp.add(jp4);
  291. text = new JTextField(30);
  292. text.setEnabled(false);
  293. mainPanel.add("North", label1);
  294. mainPanel.add("West", jpp);
  295. mainPanel.add("Center", jp);
  296. mainPanel.add("South", text);
  297. result.addActionListener(me);
  298. reset.addActionListener(me);
  299. jf = new JFrame("Решебник системы линейных алгебраических уравнений");
  300. jf.setContentPane(mainPanel);
  301. jf.setVisible(true);
  302. jf.pack();
  303. jf.setResizable(false);
  304. jf.setLocationRelativeTo(rootPane);
  305. jf.setDefaultCloseOperation(EXIT_ON_CLOSE);
  306. }
  307. public static void main(String args[]){
  308. new Matrix();
  309. }
  310. }
А собственно вопрос касается следующих строк кода:
Листинг программы
  1. x1 = getTxt1() == null ? 0 : Double.parseDouble(getTxt1());
  2. x2 = getTxt2() == null ? 0 : Double.parseDouble(getTxt2());
  3. x3 = getTxt3() == null ? 0 : Double.parseDouble(getTxt3());
  4. x4 = getTxt4() == null ? 0 : Double.parseDouble(getTxt4());
  5. x5 = getTxt5() == null ? 0 : Double.parseDouble(getTxt5());
  6. x6 = getTxt6() == null ? 0 : Double.parseDouble(getTxt6());
  7. x7 = getTxt7() == null ? 0 : Double.parseDouble(getTxt7());
  8. x8 = getTxt8() == null ? 0 : Double.parseDouble(getTxt8());
  9. x9 = getTxt9() == null ? 0 : Double.parseDouble(getTxt9());
Здесь по логике должно происходить следующее - человек вводит в текстовое поле число, и оно запоминается в виде double-переменной. Если же он решил оставить поле пустым, то в переменную автоматически заносится значение 0. Но по факту оно так не происходит: компайлер все-равно выдает ошибку при попытке оставить текстовое поле пустым. Как решить эту проблему? Вот интерфейс программки: Хотелось бы также услышать предложения по улучшению кода. И так как я сам в программировании полный нуб, прошу строго не судить..

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

textual
Листинг программы
  1. Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: empty String
  2.     at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1842)
  3.     at sun.misc.FloatingDecimal.parseDouble(FloatingDecimal.java:110)
  4.     at java.lang.Double.parseDouble(Double.java:538)
  5.     at Matrix$MatrixEngine.actionPerformed(Matrix.java:204)
  6.     at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
  7.     at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2346)
  8.     at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
  9.     at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
  10.     at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:252)
  11.     at java.awt.Component.processMouseEvent(Component.java:6525)
  12.     at javax.swing.JComponent.processMouseEvent(JComponent.java:3324)
  13.     at java.awt.Component.processEvent(Component.java:6290)
  14.     at java.awt.Container.processEvent(Container.java:2234)
  15.     at java.awt.Component.dispatchEventImpl(Component.java:4881)
  16.     at java.awt.Container.dispatchEventImpl(Container.java:2292)
  17.     at java.awt.Component.dispatchEvent(Component.java:4703)
  18.     at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4898)
  19.     at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4533)
  20.     at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4462)
  21.     at java.awt.Container.dispatchEventImpl(Container.java:2278)
  22.     at java.awt.Window.dispatchEventImpl(Window.java:2750)
  23.     at java.awt.Component.dispatchEvent(Component.java:4703)
  24.     at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:751)
  25.     at java.awt.EventQueue.access$500(EventQueue.java:97)
  26.     at java.awt.EventQueue$3.run(EventQueue.java:702)
  27.     at java.awt.EventQueue$3.run(EventQueue.java:696)
  28.     at java.security.AccessController.doPrivileged(Native Method)
  29.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
  30.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:86)
  31.     at java.awt.EventQueue$4.run(EventQueue.java:724)
  32.     at java.awt.EventQueue$4.run(EventQueue.java:722)
  33.     at java.security.AccessController.doPrivileged(Native Method)
  34.     at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
  35.     at java.awt.EventQueue.dispatchEvent(EventQueue.java:721)
  36.     at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
  37.     at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
  38.     at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
  39.     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
  40.     at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
  41.     at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

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


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

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

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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут