Added files
This commit is contained in:
parent
53432cc705
commit
5b48e82dc6
3 changed files with 124 additions and 0 deletions
32
src/calculator/Calc.java
Normal file
32
src/calculator/Calc.java
Normal file
|
@ -0,0 +1,32 @@
|
|||
package calculator;
|
||||
|
||||
import java.util.function.BiFunction;
|
||||
import java.util.regex.Matcher;
|
||||
import java.util.regex.Pattern;
|
||||
|
||||
public class Calc {
|
||||
|
||||
private static final Pattern MULTIPLY = Pattern.compile("([0-9]+)\\*([0-9]+)");
|
||||
private static final Pattern DIVIDE = Pattern.compile("([0-9]+)\\/([0-9]+)");
|
||||
private static final Pattern ADD = Pattern.compile("([0-9]+)\\+([0-9]+)");
|
||||
private static final Pattern SUBTRACT = Pattern.compile("([0-9]+)\\-([0-9]+)");
|
||||
|
||||
public static int calculate(String text) {
|
||||
StringBuffer buf = new StringBuffer(text);
|
||||
replace(buf, MULTIPLY, (a, b) -> a * b);
|
||||
replace(buf, DIVIDE, (a, b) -> a / b);
|
||||
replace(buf, ADD, (a, b) -> a + b);
|
||||
replace(buf, SUBTRACT, (a, b) -> a - b);
|
||||
return Integer.parseInt(buf.toString());
|
||||
}
|
||||
|
||||
private static void replace(StringBuffer buf, Pattern pattern, BiFunction<Integer, Integer, Integer> doit) {
|
||||
while (true) {
|
||||
Matcher matcher = pattern.matcher(buf.toString());
|
||||
if (!matcher.find())
|
||||
break;
|
||||
buf.replace(matcher.start(), matcher.end(), Integer
|
||||
.toString(doit.apply(Integer.parseInt(matcher.group(1)), Integer.parseInt(matcher.group(2)))));
|
||||
}
|
||||
}
|
||||
}
|
84
src/calculator/Gui.java
Normal file
84
src/calculator/Gui.java
Normal file
|
@ -0,0 +1,84 @@
|
|||
package calculator;
|
||||
|
||||
import java.awt.BorderLayout;
|
||||
import java.awt.Dimension;
|
||||
import java.awt.GridLayout;
|
||||
import java.awt.event.ActionEvent;
|
||||
import java.awt.event.ActionListener;
|
||||
|
||||
import javax.swing.JButton;
|
||||
import javax.swing.JFrame;
|
||||
import javax.swing.JPanel;
|
||||
import javax.swing.JTextField;
|
||||
import javax.swing.UIManager;
|
||||
import javax.swing.UnsupportedLookAndFeelException;
|
||||
|
||||
public class Gui {
|
||||
private JFrame frame;
|
||||
private JPanel panel;
|
||||
private JTextField tf;
|
||||
|
||||
public Gui() throws Exception {
|
||||
frame = new JFrame();
|
||||
frame.setMinimumSize(new Dimension(200, 400));
|
||||
frame.setTitle("Calculator");
|
||||
frame.setLayout(new BorderLayout(10, 10));
|
||||
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
|
||||
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
|
||||
tf = new JTextField();
|
||||
tf.setFocusable(false);
|
||||
frame.add(tf, BorderLayout.NORTH);
|
||||
panel = new JPanel();
|
||||
frame.add(panel, BorderLayout.CENTER);
|
||||
panel.setLayout(new GridLayout(5, 3));
|
||||
String str = addNumbers();
|
||||
str += "+0-*/";
|
||||
addAppendButtons(str);
|
||||
addButton('=').addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
tf.setText(Integer.toString(Calc.calculate(tf.getText())));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
public void show() {
|
||||
frame.setVisible(true);
|
||||
}
|
||||
|
||||
public void close() {
|
||||
frame.dispose();
|
||||
}
|
||||
|
||||
private String addNumbers() {
|
||||
String str = "";
|
||||
for (int i = 1; i < 10; i++) {
|
||||
str += i;
|
||||
}
|
||||
return str;
|
||||
}
|
||||
|
||||
private void addAppendButtons(String btns) {
|
||||
for (int i = 0; i < btns.length(); i++) {
|
||||
Character c = btns.charAt(i);
|
||||
JButton num = addButton(c);
|
||||
final Character number = c;
|
||||
num.addActionListener(new ActionListener() {
|
||||
|
||||
@Override
|
||||
public void actionPerformed(ActionEvent e) {
|
||||
tf.setText(tf.getText() + number);
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private JButton addButton(Character c) {
|
||||
JButton num = new JButton();
|
||||
num.setText(Character.toString(c));
|
||||
num.setFocusable(false);
|
||||
panel.add(num);
|
||||
return num;
|
||||
}
|
||||
}
|
8
src/calculator/Main.java
Normal file
8
src/calculator/Main.java
Normal file
|
@ -0,0 +1,8 @@
|
|||
package calculator;
|
||||
|
||||
public class Main {
|
||||
public static void main(String[] args) throws Exception {
|
||||
Gui gui = new Gui();
|
||||
gui.show();
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue