import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyAdapter;
import java.awt.event.KeyEvent;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class Exer extends JFrame {
final JButton[] buttons = new JButton[11];
final JTextField field = new JTextField(20);
final JPanel[] panels = new JPanel[2];
final JLabel label = new JLabel();
final JTextArea area = new JTextArea(10, 80);
final JScrollPane pane = new JScrollPane(area);
final JCheckBox[] boxs = new JCheckBox[6];
final JRadioButton[] radioButtons = new JRadioButton[2];
final ButtonGroup group = new ButtonGroup();
final int num = (int) (Math.random() * 10);
private Object[] data;
private int top;
private int i = 9;
private boolean flag;
public Exer(String title) {
super(title);
buttons[0] = new JButton("反序");
buttons[1] = new JButton("乘法表");
buttons[2] = new JButton("奇数分母之和");
buttons[3] = new JButton("金字塔");
buttons[4] = new JButton("入栈");
buttons[5] = new JButton("出栈");
buttons[6] = new JButton("素数/偶数");
buttons[7] = new JButton("文字竖排");
buttons[8] = new JButton("二进制");
buttons[9] = new JButton("猜数");
buttons[10] = new JButton("清空");
boxs[0] = new JCheckBox("千位大于百位");
boxs[1] = new JCheckBox("十位大于个位");
boxs[2] = new JCheckBox("千位与个位之后等于百位与十位之后");
boxs[3] = new JCheckBox("百位是奇数");
boxs[4] = new JCheckBox("全选");
boxs[5] = new JCheckBox("全删");
radioButtons[0] = new JRadioButton("算法一", true);
radioButtons[1] = new JRadioButton("算法二");
for (int i = 0; i < radioButtons.length; i++) {
group.add(radioButtons[i]);
}
for (int i = 0; i < panels.length; i++) {
panels[i] = new JPanel();
}
panels[0].setLayout(new GridLayout(2, 5));
panels[1].setLayout(new FlowLayout(FlowLayout.LEFT));
panels[0].add(field);
for (int i = 0; i < buttons.length; i++) {
panels[0].add(buttons[i]);
}
for (int i = 0; i < radioButtons.length; i++) {
panels[1].add(radioButtons[i]);
}
for (int i = 0; i < boxs.length; i++) {
panels[1].add(boxs[i]);
boxs[i].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
boolean b = boxs[0].isSelected() && boxs[1].isSelected()
&& boxs[2].isSelected() && boxs[3].isSelected();
field.setText(b && flag ? numNumber() + "" : "");
field.setText(b && !flag ? numNumber2() + "" : "");
if (boxs[4].isSelected()) {
for (int j = 0; j < boxs.length - 1; j++) {
boxs[j].setSelected(true);
}
field.setText(numNumber() + "");
if (flag) {
field.setText(numNumber2() + "");
}
}
if (boxs[5].isSelected()) {
for (int j = 0; j < boxs.length - 1; j++) {
boxs[j].setSelected(false);
}
field.setText("");
}
}
});
}
panels[0].add(label);
add(panels[0], BorderLayout.NORTH);
add(pane, BorderLayout.CENTER);
add(panels[1], BorderLayout.SOUTH);
field.addKeyListener(new KeyAdapter() {
public void keyTyped(KeyEvent e) {
label.setText("");
}
});
field.addMouseListener(new MouseAdapter() {
public void mouseEntered(MouseEvent e) {
label.setText("please input your number:");
}
public void mouseExited(MouseEvent e) {
label.setText("");
}
});
buttons[0].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String string = field.getText().trim();
try {
field.setText(reverse(Integer.parseInt(string)) + "");
} catch (NumberFormatException e1) {
label.setText("不是数字");
}
}
});
buttons[1].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String string = field.getText().trim();
if (area.getText() != "") {
area.setText("");
}
try {
nine(Integer.parseInt(string));
} catch (NumberFormatException e1) {
label.setText("不是数字");
}
}
});
buttons[2].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String string = field.getText().trim();
try {
field.setText(numerator(Integer.parseInt(string)) + "");
} catch (NumberFormatException e1) {
label.setText("不是数字");
}
}
});
buttons[3].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String string = field.getText().trim();
try {
triangle(Integer.parseInt(string));
} catch (NumberFormatException e1) {
label.setText("不是数字");
}
}
});
buttons[4].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (push(field.getText()) == null) {
label.setText("入栈失败,栈空间已满!");
return;
}
area.append("入栈:" + field.getText() + "\n");
}
});
buttons[5].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (pop() == null) {
label.setText("出栈失败,栈空间已空!");
return;
}
area.append("出栈:" + field.getText() + "\n");
}
});
buttons[6].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String string = field.getText().trim();
try {
if (isPrimeNumber(Integer.parseInt(string))) {
label.setText(field.getText().trim() + "是素数");
} else {
label.setText(field.getText().trim() + "是偶数");
}
} catch (NumberFormatException e1) {
label.setText("不是数字");
}
}
});
buttons[7].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String s = area.getText();
char[][] arr = new char[4][7];
tang(arr, s);
}
});
buttons[8].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String string = field.getText().trim();
try {
field.setText(binary(Integer.parseInt(string)));
} catch (NumberFormatException e1) {
label.setText("不是数字");
}
}
});
buttons[9].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
String string = field.getText().trim();
try {
guess(Integer.parseInt(string));
} catch (NumberFormatException e1) {
label.setText("不是数字");
}
}
});
buttons[10].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
field.setText("");
area.setText("");
}
});
radioButtons[0].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (radioButtons[0].isSelected()) {
flag = true;
}
}
});
radioButtons[1].addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
if (radioButtons[1].isSelected()) {
flag = false;
}
}
});
area.addMouseListener(new MouseAdapter() {
@Override
public void mouseClicked(MouseEvent e) {
area.setText("");
}
});
pack();
setDefaultCloseOperation(EXIT_ON_CLOSE);
setVisible(true);
}
public Exer(String title, int size) {
this(title);
data = new Object[size];
top = 0;
}
public static void main(String[] args) {
Exer exer = new Exer("计算器", 3);
}
private Object push(Object object) {
if (top == data.length) {
return null;
}
data[top++] = object;
return object;
}
private Object pop() {
if (top == 0) {
return null;
}
return data[--top];
}
private int reverse(int n) {
int oldInteger = n;
int newInteger = 0;
for (; oldInteger != 0; oldInteger /= 10) {
newInteger = newInteger * 10 + oldInteger % 10;
}
return newInteger;
}
private void nine(int n) {
for (int i = 1, j = 1; j <= n; i++) {
area.append(j + "*" + i + "=" + (i * j) + "\t");
if (i == j) {
i = 0;
j++;
area.append("\n");
}
}
}
private double numerator(int n) {
double sum = 0.0;
for (int i = 1, d = 1; i <= n; i++, d = -d) {
sum += d * 1.0 / (2 * i - 1);
}
return sum;
}
private void triangle(int n) {
for (int i = 1; i <= n; i++) {
for (int j = 0; j < n - i; j++) {
area.append(" ");
}
for (int j = 0; j < 2 * i - 1; j++) {
area.append("*");
}
area.append("\n");
}
}
private int numNumber2() {
for (int i = 1000; i <= 9999; i++) {
int q = i / 1000;
int b = i / 100 % 10;
int s = i / 10 % 10;
int g = i % 10;
boolean flag = q > b && s > g && q + g == b + s && b % 2 != 0;
if (flag) {
return i;
}
}
return 0;
}
private int numNumber() {
boolean flag;
int num = 0;
loop1: for (int q = 1; q <= 9; q++) {
loop2: for (int b = 0; b <= 9; b++) {
if (b << 1 == 0 || q <= b) {
continue loop2;
}
for (int s = 0; s <= 9; s++) {
for (int g = 0; g <= 9; g++) {
flag = s > g && q + g == b + s;
if (flag) {
num = q * 1000 + b * 100 + s * 10 + g;
break loop1;
}
}
}
}
}
return num;
}
private boolean isPrimeNumber(int n) {
for (int i = 2; i <= n / 2; i++) {
if (n % i == 0) {
return false;
}
}
return true;
}
private void tang(char[][] arr, String s) {
area.setText("");
for (int i = 0; i < arr.length; i++) {
for (int j = 0; j < arr[i].length; j++) {
arr[i][j] = s.charAt(i * arr[i].length + j);
}
}
for (int i = 0; i < arr[0].length; i++) {
for (int j = 0; j < arr.length; j++) {
area.append(arr[arr.length - j - 1][i] + " ");
}
area.append("\n");
}
}
private String binary(int n) {
StringBuffer buffer = new StringBuffer();
int num;
for (int i = 31; i >= 0; i--) {
num = (n & (1 << i)) != 0 ? 1 : 0;
buffer.append(num);
if ((32 - i) % 8 == 0) {
buffer.append(" ");
}
}
return buffer.toString();
}
private void guess(int m) {
if (area.getText() != "") {
area.setText("");
}
int n = m;
if (n > num) {
area.append("Too large!");
} else if (n < num) {
area.append("Too small!");
} else {
area.append("You are Right!");
return;
}
if (i > 0) {
label.setText("还有" + i + "次机会!");
}
if (n != num && i == 0) {
label.setText("下次再来吧");
return;
}
i--;
}
}