자바 그래 픽 인터페이스 간단 한 혼합 연산 계산기 의 예제 코드 구현
캡 처 는 다음 과 같 습 니 다.
우선 레이아웃 이 간단 합 니 다.맨 위 에 있 는 상 자 는 총 출력 상자 입 니 다.
두 번 째 상 자 는 매번 입력 한 숫자 가 상자 안에 표 시 됩 니 다.
모든 버튼 에 모니터 를 추가 합 니 다.
숫자 단추:길이 가 8 이상 이거 나 등호 가 나타 나 면 단추 이 벤트 를 처리 하지 않 습 니 다.
if(e.getSource().equals(button1)) {
s=numberText.getText();
// 8
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("1");
}else {
numberText.setText(s + "1");
}
}
나머지 버튼 은 많 지 않다.버튼 이 소수점 일 때 길이 가 7 보다 크 면 처리 하지 않 습 니 다.전체 길이 가 8 을 초과 할 수 없 기 때문에 소수점 뒤에 숫자 가 있어 야 합 니 다.
동시에 소수점 을 표시 한 적 이 있 습 니 다.한 숫자 에서 가장 많은 소수점 이 나타 나 기 때 문 입 니 다.
//
if(e.getSource().equals(buttonpoint)) {
s=numberText.getText();
if(s.length()>7 || equalbook == 1) {
}
if(pointbook==0) {
numberText.setText(s + ".");
pointbook = 1;
}
}
버튼 이 추가 되 었 을 때:숫자 입력 상자 가 비어 있 을 때 처리 하지 않 습 니 다.
마지막 이 소수점 일 수도 있 고,당연히 처리 하지 않 는 다.
맨 위 에 있 는 출력 상자 의 마지막 자리 가 오른쪽 괄호 일 때 플러스 를 사용 할 수 있 습 니 다.
//
if(e.getSource().equals(buttonadd)) {
s=numberText.getText();
char ch1[] = s.toCharArray();
int length1 = s.length() - 1;
String S = expressText.getText();
char ch2[] = S.toCharArray();
int length2 = S.length() - 1;
// 0
if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1] == '.')) {
}else {
numberText.setText("");
expressText.setText(expressText.getText() + s + "+");
}
}
+,-,*,/모두 차이 가 많 지 않다.앞 에 연산 자 나 왼쪽 괄호 가 있 을 때 만 왼쪽 괄호 를 사용 할 수 있 습 니 다.상자 안에 요소 가 없 을 때 도 왼쪽 괄호 를 넣 을 수 있 지만 요소 의 개수 가 0 보다 큰 지 판단 해 야 합 니 다.
if(e.getSource().equals(buttonleft)) {
if(!numberText.getText().equals("0") && !numberText.getText().contentEquals("")) {
expressText.setText(expressText.getText() + numberText.getText());
}
s=expressText.getText();
char ch[] = s.toCharArray();
int length = s.length() - 1;
/*
*
*
* 0
*/
if(length == -1 || ch[length] == '+' || ch[length] == '-' ||
ch[length] == '*' || ch[length] == '/' ||
ch[length] == '(' || s.equals("")) {
expressText.setText(expressText.getText() + '(');
leftNum++;
}
}
오른쪽 괄호 가 달라 요.
if(e.getSource().equals(buttonright)) {
if(!numberText.getText().equals("0")) {
expressText.setText(expressText.getText() + numberText.getText());
numberText.setText("");
}
s=expressText.getText();
char ch[] = s.toCharArray();
int length = s.length() - 1;
/*
*
*
*/
if(Character.isDigit(ch[length]) && leftNum > rightNum) {
rightNum++;
expressText.setText(expressText.getText() + ')');
}
}
버튼 이 C 일 때 모든 내용 을 지우 고 등호 상 태 를 업데이트 합 니 다.왼쪽 괄호 수량,오른쪽 괄호 수량,소수점 상 태 는 한 번 에 계산 이 끝 난 후에 C 단 추 를 눌 러 야만 새로운 계산 을 할 수 있 습 니 다.버튼 이 CE 일 때 숫자 상자 의 내용 만 지 웁 니 다.
if(e.getSource().equals(buttonC)) {
numberText.setText("0");
expressText.setText("");
leftNum = 0;
rightNum = 0;
pointbook = 0;
equalbook = 0;
}
단추 가 등호 일 때 총 출력 상자 에 표 시 된 문자열 을 꺼 내 계산 합 니 다.이 계산 기 는 괄호 가 있 기 때문에 역 폴란드 표현 식 으로 만 들 었 습 니 다.접미사 표현 식 을 접미사 표현 식 으로 바 꾸 고 계산 해 야 합 니 다.이 점 이 가장 어 려 운 점 이 라 고 생각 합 니 다.나중에 시간 이 있 으 면 역 폴란드 표현 식 의 실현 과 역 폴란드 표현 식 에 대한 값 을 다시 쓰 겠 습 니 다.588 줄 의 코드 를 주의해 야 합 니 다.마지막 두 괄호 의 조건 을 추가 하지 않 아서 주말 에 하루 종일 bug 를 찾 았 습 니 다.
else if((ch[j] == '*' || ch[j] == '/') &&
(operater1=='+' || operater1=='-') ||
(operater1=='(' || operater1 == ')')) {
Operater.push(ch[j]);
break;
}
모든 코드:
package cn.edu.shengda;
/*
* author 201705050153
*/
import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Stack;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JTextField;
public class Calculator extends JFrame implements ActionListener {
Calculator() {
init();
}
public void init() {
JFrame frame = new JFrame (" ");
frame.setBackground(Color.yellow);
frame.setLayout(null);
// 0
button0 = new JButton("0");
button0.setBounds(20, 200, 100, 25);
frame.add(button0);
// 1
button1 = new JButton("1");
button1.setBounds(20, 170, 45, 25);
frame.add(button1);
// 2
button2 = new JButton("2");
button2.setBounds(75, 170, 45, 25);
frame.add(button2);
// 3
button3 = new JButton("3");
button3.setBounds(130, 170, 45, 25);
frame.add(button3);
// 4
button4 = new JButton("4");
button4.setBounds(20, 140, 45, 25);
frame.add(button4);
// 5
button5 = new JButton("5");
button5.setBounds(75, 140, 45, 25);
frame.add(button5);
// 6
button6 = new JButton("6");
button6.setBounds(130, 140, 45, 25);
frame.add(button6);
// 7
button7 = new JButton("7");
button7.setBounds(20, 110, 45, 25);
frame.add(button7);
// 8
button8 = new JButton("8");
button8.setBounds(75, 110, 45, 25);
frame.add(button8);
// 9
button9 = new JButton("9");
button9.setBounds(130, 110, 45, 25);
frame.add(button9);
// .
buttonpoint = new JButton(".");
buttonpoint.setBounds(130, 200, 45, 25);
frame.add(buttonpoint);
// +
buttonadd = new JButton("+");
buttonadd.setBounds(185, 200, 45, 25);
frame.add(buttonadd);
// -
buttonreduce = new JButton("-");
buttonreduce.setBounds(185, 170, 45, 25);
frame.add(buttonreduce);
// *
buttonride = new JButton("*");
buttonride.setBounds(185, 140, 45, 25);
frame.add(buttonride);
// /
buttonexcept = new JButton("/");
buttonexcept.setBounds(185, 110, 45, 25);
frame.add(buttonexcept);
// =
buttonequal = new JButton("=");
buttonequal.setBounds(240, 170, 55, 55);
frame.add(buttonequal);
// 1/x
buttoninvert = new JButton("1/x");
buttoninvert.setBounds(240, 110, 55, 55);
frame.add(buttoninvert);
//
buttonleft = new JButton("(");
buttonleft.setBounds(20, 80, 45, 25);
frame.add(buttonleft);
//
buttonright = new JButton(")");
buttonright.setBounds(75, 80, 45, 25);
frame.add(buttonright);
// C
buttonC = new JButton("C");
buttonC.setBounds(130, 80, 75, 25);
frame.add(buttonC);
// CE
buttonCE = new JButton("CE");
buttonCE.setBounds(220, 80, 75, 25);
frame.add(buttonCE);
//
expressText = new JTextField();
expressText.setBounds(20, 10, 300, 30);
frame.add(expressText);
//
numberText = new JTextField("0");
numberText.setBounds(20, 40, 300, 30);
frame.add(numberText);
//
button0.addActionListener(this);
button1.addActionListener(this);
button2.addActionListener(this);
button3.addActionListener(this);
button4.addActionListener(this);
button5.addActionListener(this);
button6.addActionListener(this);
button7.addActionListener(this);
button8.addActionListener(this);
button9.addActionListener(this);
buttonpoint.addActionListener(this);
buttonadd.addActionListener(this);
buttonreduce.addActionListener(this);
buttonride.addActionListener(this);
buttonexcept.addActionListener(this);
buttoninvert.addActionListener(this);
buttonequal.addActionListener(this);
buttonleft.addActionListener(this);
buttonright.addActionListener(this);
buttonC.addActionListener(this);
buttonCE.addActionListener(this);
numberText.addActionListener(this);
expressText.addActionListener(this);
frame.setBounds(0, 0, 350, 300);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
}
JButton button0;
JButton button1;
JButton button2;
JButton button3;
JButton button4;
JButton button5;
JButton button6;
JButton button7;
JButton button8;
JButton button9;
JButton buttonpoint;
JButton buttonadd;
JButton buttonreduce;
JButton buttonride;
JButton buttonexcept;
JButton buttonequal;
JButton buttoninvert;
JButton buttonleft;
JButton buttonright;
JButton buttonC;
JButton buttonCE;
JTextField numberText;
JTextField expressText;
String s = null;
// ,
int pointbook = 0;
// ,
int equalbook = 0;
//
int leftNum = 0;
//
int rightNum = 0;
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
// 0
if(e.getSource().equals(button0)) {
s=numberText.getText();
if(s.length()>8) {
}
else if(s.equals("0") || equalbook == 1) {
}else {
numberText.setText(s + "0");
}
}
// 1
if(e.getSource().equals(button1)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("1");
}else {
numberText.setText(s + "1");
}
}
// 2
if(e.getSource().equals(button2)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("2");
}else {
numberText.setText(s + "2");
}
}
// 3
if(e.getSource().equals(button3)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("3");
}else {
numberText.setText(s + "3");
}
}
// 4
if(e.getSource().equals(button4)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("4");
}else {
numberText.setText(s + "4");
}
}
// 5
if(e.getSource().equals(button5)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("5");
}else {
numberText.setText(s + "5");
}
}
// 6
if(e.getSource().equals(button6)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("6");
}else {
numberText.setText(s + "6");
}
}
// 7
if(e.getSource().equals(button7)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("7");
}else {
numberText.setText(s + "7");
}
}
// 3
if(e.getSource().equals(button8)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("8");
}else {
numberText.setText(s + "8");
}
}
// 9
if(e.getSource().equals(button9)) {
s=numberText.getText();
if(s.length()>8 || equalbook == 1) {
}
else if(s.equals("0") || s.equals("")) {
numberText.setText("9");
}else {
numberText.setText(s + "9");
}
}
//
if(e.getSource().equals(buttonpoint)) {
s=numberText.getText();
if(s.length()>7 || equalbook == 1) {
}
if(pointbook==0) {
numberText.setText(s + ".");
pointbook = 1;
}
}
//
if(e.getSource().equals(buttonadd)) {
s=numberText.getText();
char ch1[] = s.toCharArray();
int length1 = s.length() - 1;
String S = expressText.getText();
char ch2[] = S.toCharArray();
int length2 = S.length() - 1;
// 0
if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1] == '.')) {
}else {
numberText.setText("");
expressText.setText(expressText.getText() + s + "+");
}
}
//
if(e.getSource().equals(buttonreduce)) {
s=numberText.getText();
char ch1[] = s.toCharArray();
int length1 = s.length() - 1;
String S = expressText.getText();
char ch2[] = S.toCharArray();
int length2 = S.length() - 1;
if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1]=='.')) {
}else {
numberText.setText("");
expressText.setText(expressText.getText() + s + "-");
}
}
//
if(e.getSource().equals(buttonride)) {
s=numberText.getText();
char ch1[] = s.toCharArray();
int length1 = s.length() - 1;
String S = expressText.getText();
char ch2[] = S.toCharArray();
int length2 = S.length() - 1;
if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1]=='.')) {
}else {
numberText.setText("");
expressText.setText(expressText.getText() + s + "*");
}
}
//
if(e.getSource().equals(buttonexcept)) {
s=numberText.getText();
char ch1[] = s.toCharArray();
int length1 = s.length() - 1;
String S = expressText.getText();
char ch2[] = S.toCharArray();
int length2 = S.length() - 1;
if((length2 == -1 ||ch2[length2] != ')') && (s.equals("0") || s.equals("") || ch1[length1]=='.')) {
}else {
numberText.setText("");
expressText.setText(expressText.getText() + s + "/");
}
}
//
if(e.getSource().equals(buttonleft)) {
if(!numberText.getText().equals("0") && !numberText.getText().contentEquals("")) {
expressText.setText(expressText.getText() + numberText.getText());
}
s=expressText.getText();
char ch[] = s.toCharArray();
int length = s.length() - 1;
/*
*
*
* 0
*/
if(length == -1 || ch[length] == '+' || ch[length] == '-' ||
ch[length] == '*' || ch[length] == '/' ||
ch[length] == '(' || s.equals("")) {
expressText.setText(expressText.getText() + '(');
leftNum++;
}
}
//
if(e.getSource().equals(buttonright)) {
if(!numberText.getText().equals("0")) {
expressText.setText(expressText.getText() + numberText.getText());
numberText.setText("");
}
s=expressText.getText();
char ch[] = s.toCharArray();
int length = s.length() - 1;
/*
*
*
*/
if(Character.isDigit(ch[length]) && leftNum > rightNum) {
rightNum++;
expressText.setText(expressText.getText() + ')');
}
}
/*
* C
*
* , , ,
* , CE
*/
if(e.getSource().equals(buttonC)) {
numberText.setText("0");
expressText.setText("");
leftNum = 0;
rightNum = 0;
pointbook = 0;
equalbook = 0;
}
/*
* CE ,
*
*
*/
if(e.getSource().equals(buttonCE)) {
numberText.setText("0");
pointbook = 0;
}
// 1/x
if(e.getSource().equals(buttoninvert) ) {
s = numberText.getText();
// 0
if(s.equals("0")) {
}else {
double a = Double.parseDouble(numberText.getText());
a = 1/a;
numberText.setText(String.valueOf(a));
}
}
//
if(e.getSource().equals(buttonequal)) {
s=numberText.getText();
if(!s.equals("0") && !s.equals("")) {
expressText.setText(expressText.getText() + s);
}
//
if(equalbook == 0) {
numberText.setText("");
//
for(int i = 0; i < leftNum - rightNum; i++) {
expressText.setText(expressText.getText() + ')');
}
/*
*
* char
*
*/
String[] ansString = new String[100];
int Size = 0;
Stack<Character> Operater = new Stack<Character>();
s = expressText.getText();
char ch[] = s.toCharArray();
int length = ch.length;
for(int j = 0; j < length; j++) {
//
if(ch[j] >='0' && ch[j] <= '9') {
double Number = ch[j] - '0';
// ,
//
int point = 0;
//
int bit = 1;
if(j==length-1) {
ansString[Size++] = String.valueOf(Number);
}
for(j++; j<length; j++) {
if((ch[j] < '0' || ch[j] >'9') && ch[j]!='.') {
j--;
ansString[Size++] = String.valueOf(Number);
break;
}
if(ch[j] == '.') {
point = 1;
continue;
}
if(ch[j] >= '0' && ch[j] <= '9') {
/*
*
*/
if(point == 0) {
Number = Number * 10 + (ch[j] - '0');
} else {
Number = Number + Math.pow(10, -bit) * (ch[j]-'0');
bit++;
}
}
}
} else { //
if(ch[j] =='(') {
Operater.push('(');
} else if(ch[j]==')') {
while(!Operater.peek().equals('(')) {
ansString[Size++] = String.valueOf(Operater.peek());
Operater.pop();
}
Operater.pop();
} else {
if(Operater.empty()) {
Operater.push(ch[j]);
}
else {
//System.out.println("!" + ch[j]);
while(true) {
if(Operater.empty()) {
Operater.push(ch[j]);
break;
}
char operater1 = Operater.peek();
if((ch[j] == '*' || ch[j] == '/') &&
(operater1=='+' || operater1=='-') || (operater1=='(' || operater1 == ')')) {
Operater.push(ch[j]);
break;
}
else {
ansString[Size++] = String.valueOf(Operater.peek());
Operater.pop();
}
}
}
}
}
}//System.out.println(s);
while(!Operater.empty()) {
ansString[Size++] = String.valueOf(Operater.peek());
Operater.pop();
}
// for(int i=0; i<Size; i++)
// System.out.println(ansString[i]);
//
Stack<Double> Last = new Stack<Double>();
for(int i=0; i<Size; i++) {
String s1 = ansString[i];
char ch2[] = s1.toCharArray();
if(ch2[0]>='0' && ch2[0]<='9') {
Last.push(Double.parseDouble(s1));
}
else {
double num1 = Last.pop();
double num2 = Last.pop();
double num3 = 0;
if(ch2[0]=='+')
num3 = num2 + num1;
else if(ch2[0]=='-')
num3 = num2 - num1;
else if(ch2[0]=='*')
num3 = num2 * num1;
else if(ch2[0]=='/')
num3 = num2 / num1;
Last.push(num3);
}
}
expressText.setText(expressText.getText() + "=" + Last.pop());
equalbook = 1;
}
}
}
public static void main(String []args) {
Calculator calculator = new Calculator();
}
}
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.