-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFactorization.java
More file actions
165 lines (134 loc) · 5.23 KB
/
Factorization.java
File metadata and controls
165 lines (134 loc) · 5.23 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
import javax.swing.*;
import java.awt.*;
// Model________________________________________________________
class valueModel {
private int value_A;
private int value_B;
private int value_C;
// Setter methods
public void setValue_A(int value_A) {
this.value_A = value_A;
}
public void setValue_B(int value_B) {
this.value_B = value_B;
}
public void setValue_C(int value_C) {
this.value_C = value_C;
}
// Getter methods
public int getValue_A() {
return value_A;
}
public int getValue_B() {
return value_B;
}
public int getValue_C() {
return value_C;
}
}
// View_______________________________________________________
class valueView extends JFrame {
JTextField value_A_Field = new JTextField(3);
JTextField value_B_Field = new JTextField(3);
JTextField value_C_Field = new JTextField(3);
JButton factorizeButton = new JButton("factorize");
// ✅ label สำหรับแสดงผล
JLabel resultLabel = new JLabel("", SwingConstants.CENTER);
public valueView() {
setTitle("Value Factorization");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLayout(new BorderLayout(10, 10)); // เพิ่มระยะห่างระหว่างส่วนต่างๆ
// แถวกรอกค่า
JPanel panel = new JPanel();
panel.setBackground(new Color(220, 230, 250));
panel.setLayout(new FlowLayout(FlowLayout.CENTER, 10, 20));
JLabel label_A = new JLabel("x² + ");
JLabel label_B = new JLabel(" x + ");
JLabel label_C = new JLabel(" ");
panel.add(value_A_Field);
panel.add(label_A);
panel.add(value_B_Field);
panel.add(label_B);
panel.add(value_C_Field);
panel.add(label_C);
add(panel, BorderLayout.NORTH); // ✅ เอาช่องกรอกไว้บน
// ✅ เอา label แสดงผลไว้กลางจอ
resultLabel.setFont(new Font("Arial", Font.BOLD, 16));
add(resultLabel, BorderLayout.CENTER);
// ปุ่มอยู่ข้างล่าง
JPanel buttonPanel = new JPanel();
buttonPanel.setBackground(new Color(220, 230, 250));
buttonPanel.add(factorizeButton);
buttonPanel.setPreferredSize(new Dimension(600, 40));
add(buttonPanel, BorderLayout.SOUTH);
setLocationRelativeTo(null);
setSize(600, 400);
setVisible(true);
}
public int getValue_A() {
return Integer.parseInt(value_A_Field.getText().trim());
}
public int getValue_B() {
return Integer.parseInt(value_B_Field.getText().trim());
}
public int getValue_C() {
return Integer.parseInt(value_C_Field.getText().trim());
}
// ✅ method สำหรับ set ข้อความผลลัพธ์
public void setResult(String message) {
resultLabel.setText(message);
}
}
// Controller________________________________________________________
class valueController {
private valueModel model;
private valueView view;
public valueController(valueModel model, valueView view) {
this.model = model;
this.view = view;
this.view.factorizeButton.addActionListener(e -> onFactorizeButtonClick());
}
private void onFactorizeButtonClick() {
try {
model.setValue_A(view.getValue_A());
model.setValue_B(view.getValue_B());
model.setValue_C(view.getValue_C());
double[] factors = factorize();
showfactorize(model.getValue_A(), model.getValue_B(), model.getValue_C(), factors);
} catch (NumberFormatException ex) {
view.setResult("Please enter numbers.");
}
}
private double[] factorize() {
double a = model.getValue_A();
double b = model.getValue_B();
double c = model.getValue_C();
double discriminant = b * b - 4 * a * c;
if (discriminant < 0) {
return null;
} else {
double sqrtDisc = Math.sqrt(discriminant);
double x1 = (-b + sqrtDisc) / (2 * a);
double x2 = (-b - sqrtDisc) / (2 * a);
return new double[]{x1, x2};
}
}
private void showfactorize(double a, double b, double c, double[] value) {
if (value == null) {
view.setResult(String.format("Can not factorize %.2fx² + %.2fx + %.2f", a, b, c));
} else {
String s1 = (value[0] >= 0) ? "x - " + value[0] : "x + " + (-value[0]);
String s2 = (value[1] >= 0) ? "x - " + value[1] : "x + " + (-value[1]);
String showMessage = "(" + s1 + ")(" + s2 + ")";
view.setResult(showMessage);
}
}
}
// Main________________________________________________________
public class Factorization {
public static void main(String[] args) {
valueModel model = new valueModel();
valueView view = new valueView();
valueController controller = new valueController(model, view);
}
}