Red de conocimiento informático - Aprendizaje de programación - ¿Programación de interfaz de calculadora Java para suma, resta, multiplicación y división?

¿Programación de interfaz de calculadora Java para suma, resta, multiplicación y división?

Escribí esto antes cuando estaba estudiando. Escuché de gente en el trabajo que el marco JFrame básicamente no se usa en las empresas, así que no lo estudié en profundidad. Si lo deseas, puedo hacerlo. dártelo y mejorarlo. Es mejor hacerlo una vez. Si no se puede perfeccionar, podemos hablar de ello más adelante

prueba del paquete;

importar java.awt. .*;

importar java.awt.event.* ;

importar javax.swing.*;

la clase pública Z extiende JFrame implementa ActionListener, FocusListener {

cadena privada[] total = { "1", "2", "3", " ", "4", "5", "6", "-", "7", " 8", "9", "*", "0", "." , "=", "/" }; // Matriz total

cadena privada[] other = { "clear", "eliminar" }; // Otras matrices de funciones

private String[] símbolo = { " ", "-", "*", "/" } // matriz de símbolos

Cadena privada multinúmero = "0", operador1 = "", existe = "", operador2 = nulo, s = "";

// multinúmero (varios dígitos) operador1 (operador) existe (existe )

private double d1, d2 = 0;

private int Count = 0

JPanel jptotal = new JPanel(); p>

JTextField jtexternal = new JTextField("0"); // Cuadro de texto externo

JTextField jtinside = new JTextField() // Cuadro de texto interno

JPanel jptop1; = new JPanel(); // Panel superior 1

JPanel jptop2 = new JPanel(); // Panel superior 2

JPanel jpmiddle = new JPanel();

public Z() {

jptotal.setLayout(new BorderLayout());

// Usar el administrador de diseño de bordes

jptop1 .setLayout(nuevo GridLayout(2, 0));

jptop1.add(jtexternal);

jptop2.setLayout(nuevo GridLayout(0, 2));

for (int i = 0; i lt; other. length; i) {

JButton jbi = new JButton("" other[i]);

jbi. establecerTamaño(

100, 10);

jptop2.add(jbi);

jbi.addActionListener(this);

}

jpmiddle. setLayout(new GridLayout(4, 0));

for (int i = 0; i lt; total.length; i) {

JButton jbi = new JButton("" total[i]);

jpmiddle.add(jbi);

jbi.addActionListener(this);

}

jtexternal .addFocusListener(this);

jtexternal.add(jtinside);

jtinside.addFocusListener(this);

// La función de las tres líneas anteriores del código es Hacer que el cuadro de texto no sea seleccionable

jptop1.add(jptop2);

jptotal.add(jptop1, "North");

// Tomar jp1 como En su conjunto, deje que el contenido de jp1 se complete desde arriba

jptotal.add(jpmiddle);

add(jptotal);

setVisible (verdadero) ;

setSize(500, 500);

this.setLocationRelativeTo(null);

this.setDefaultCloseOperation(EXIT_ON_CLOSE);

}

// ctrl /: Comentario

public void actionPerformed(ActionEvent e) lanza ArithmeticException {

prueba {

String inputing = e.getActionCommand();

// Indica obtener el contenido de entrada actual

if (inputing.equals(".")) {

Contar ;

}

existe = jtexternal.getText();

if (operator2 != null) {

int k = 0;

for (int i = 0; i lt; símbolo.longitud; i ) {

if (operator2.equals(symbol[i])) {

k = k 1;

}

if (inputing.equals(symbol[i])) {

k = k 1;

}

if (k == 2) {

jtexternal.setText(e

xists.substring(0, existe.length() - 1) ingresando);

operador1 = ingresando

retorno

}

// Los cuatro operadores aritméticos no pueden existir al mismo tiempo y la nueva entrada reemplaza a la anterior

if (operator2.equals(symbol[i]) amp; amp; inputing.equals(" .")) {

return;

}

// Date cuenta de que los cuatro operadores aritméticos y el punto no pueden aparecer uno al lado del otro (los cuatro operadores aritméticos los operadores pueden aparecer detrás del punto, pero no antes del punto)

}

}

if (exists.equals("0")) {

if (inputing.equals(". ") || (inputing.equals(" ")) || (inputing.equals("-")) || (inputing.equals("*"))

|| (inputing.equals ("/"))) {

jtexternal.setText("0" ingresando);

} más {

jtexternal.setText(ingresando);

}

} else {

jtextternal.setText(existe ingresando

<); p> }

// Implementación Si no hay ningún número distinto de cero antes de 0, no importa cuántas veces ingrese 0, solo se mostrará un 0. Si ingresa otros números, se mostrará 0. reemplazado

if ((d1 == 0.0 || d2 = = 0.0) amp;amp; inputing.equals("=") amp;amp; !exists.substring(0, 1).equals( "0")) {

return;

}

// Si hay números en el cuadro de texto, ingrese el signo igual y se imprimirá mismo

if (inputing.equals("clear")) {

multinumber = "0"

existe = ""; p> operador1 = "";

jtexternal.setText("0"

operador2 = nulo

d2 = 0; p> s = "";

Count = 0;

d1 = 0.0;

// Implementación, cuando se hace clic en borrar, el cuadro de texto será se borra a 0 y todos los datos se restaurarán al estado inicial

} else if (inputing.equals("delete")) {

if (exists.length() lt; = 1 || s.equals("=")) {

jtexternal.setText("0");

multinúmero = "0";

existe = "";

operador1 = "";

operador2 = nulo;

d2 = 0;

s = "";

Contar = 0; 0;

// Implementación, presione eliminar para eliminar el contenido que acaba de ingresar. Si se elimina el último número, el efecto es el mismo que presionar borrar

} else {

if (inputing.equals(" ") || inputing.equals("-") || inputing.equals("*") || inputing.equals("/")) {

Cuenta = 1;

}

jtexternal.setText(exists.substring(0, existe.length() - 1)); Almacenar operador2 Valor único

operador2 = existe.substring(exists.length() - 2, existe.length() - 1);

/*

* Implementación Si hay números después de los cuatro operadores aritméticos

* Entonces, si presiona la tecla Eliminar en este momento

* Si la nueva entrada después de la eliminación siguen siendo los cuatro operadores aritméticos operadores

* Entonces los cuatro operadores aritméticos originales serán reemplazados por los recién ingresados

*/

}

} else if (!inputing.equals(" ") amp; amp; !inputing.equals("-") amp;amp; !inputing.equals("*") amp;amp; !inputing.equals("/")

amp;amp; !inputing.equals("=")) {

// Determina si la entrada es un número

if (s.equals(" =")) {

if (exists.equals("El divisor no puede ser 0") || new Double(exists) == d1) {

if (inputing.equals (".")) {

jtexternal.setText("0" ingresando

} else {

jtextternal.setText(entrando); p>

}

}

s = "";

}

// Después de completar un cálculo, se se puede realizar una nueva operación

if (multinumber == null) { // Cálculo de varios dígitos

multinumbe

r = ingresando;

} else {

multinúmero = ingresando

}

d1 = nuevo Doble(multinúmero);

p> p>

if (operator1.equals(" ")) { // Realiza cuatro operaciones aritméticas

if (d2 == 0) {

if (operator1. es igual(" *") || operador1.equals("/")) {

d2 = 1; p> // Implementación, cuando no hay ningún número después de los cuatro operadores aritméticos, el resultado después de ingresar el signo igual será el resultado antes del símbolo. Si solo hay un número antes del símbolo, entonces se imprimirá.

d1 = d1 d2;

p>

} else if (operator1.equals("-")) {

d1 = d2 - d1;

} más si (operador1.equals("*")) {

d1 = d1 * d2;

} más si (operador1.equals("/")) {

d1 = d2 / d1;

}

//Utiliza la variable temporal f2 para implementar cuatro operaciones aritméticas

operador2 = entrada ;

} else if (!inputing.quals("=")) { // [Cuatro operadores aritméticos] Continuar el cálculo después de ingresar el signo igual

multinumber = "0";

operador1 = ingresando;

d2 = d1;

operador2 = ingresando

s = ""; p> Count = 0;

// Implementar operaciones decimales

} else { // Solo [=] para obtener el resultado final

jtexternal.setText( "" d1);

cuenta = 0

s = "=";

multinúmero = "0"; (operator2.equals("0") amp; amp; "/" .equals(operator1)) {

operator2 = null

d1 = 0; valores con valores correctos

throw new ArithmeticException( );//Especifica las condiciones para lanzar excepciones

//Los cálculos de asignaciones no arrojan excepciones aritméticas si así lo deseas. para lanzar, debe especificar las condiciones para volver a lanzar la excepción

} else {

operator1 = inputing

operator2 = null

d2 =

0;

} // Resultado del cálculo

if (inputing.equals("=") amp; amp; (d1 == 0.0 || d2 == 0.0)) {

return;

}

// Implementar entrada no repetible de signo igual

}

} catch ( ArithmeticException e1) {

jtexternal.setText("El divisor no puede ser 0");

// Especifica el contenido de la excepción lanzada

}

}

public static void main(String[] args) {

new Z();

}

public void focusGained (FocusEvent e) {

jtinside.requestFocus();

// Deja que el foco se centre en el cuadro de texto interno para realizar la función no enfocable del cuadro de texto externo

}

public void focusLost(FocusEvent e) {

}

}

/*

* Actualmente, la función de restaurar otros valores después de eliminar elimina el valor de entrada no se ha implementado. Por ejemplo, quiero calcular 1 1, pero al ingresar es igual. signo, quiero cambiarlo a otra cosa

* Por ejemplo, si quiero cambiarlo a 1-1, presiono eliminar para eliminar 1 y el signo más y lo reemplazo por 1-1, pero el resultado no es 0. O lo cambio a 11 1, pero el resultado no es 12

* O cuando ingresé 11, accidentalmente ingresé un número extra si realicé el cálculo nuevamente en este. vez, el resultado no sería el que quería...

*/