tengo que hacer una calculadora que sume, reste y multiplique como haciendolo en papel a punta de arreglos, y apenas la empecé, y lo que estoy haciendo es pasar los números que me ingresan a a los respectivos arreglos para empezar a operar
miren este es el código por si alguien lo quiere probar y ayudarme a saber el error donde esta
Código Javascript:
Ver original
public class Ventana extends javax.swing.JFrame implements ActionListener { /* * interface objects * objetos de la interfaz */ private JTextField jTextField1; private JTextField jTextField2; private JLabel jLabelNumero2; private JButton jButtonCalcular; private JLabel jLabelResta; private JTextField jTextFieldMultiplicacion; private JLabel jLabelMultiplicacion; private JTextField jTextFieldResta; private JLabel jLabelSuma; private JTextField jTextFieldSuma; private JLabel jLabel1; /** * Auto-generated main method to display this JFrame * Generado automáticamente el método principal para mostrar el JFrame */ public static void main(String[] args) { SwingUtilities.invokeLater(new Runnable() { public void run() { Ventana inst = new Ventana(); inst.setLocationRelativeTo(null); inst.setVisible(true); } }); } public Ventana() { super(); initGUI(); } /* * method with the objects´s events (ActionListener) * Método con los eventos de los objetos (ActionListener) */ private void initGUI() { try { setDefaultCloseOperation(WindowConstants.DISPOSE_ON_CLOSE); getContentPane().setLayout(null); { jTextField1 = new JTextField(); getContentPane().add(jTextField1); jTextField1.setBounds(110, 28, 155, 21); } { jLabel1 = new JLabel(); getContentPane().add(jLabel1); jLabel1.setText("Numero 1:"); jLabel1.setBounds(30, 31, 80, 14); } { jButtonCalcular = new JButton(); getContentPane().add(jButtonCalcular); jButtonCalcular.setText("Calcular"); jButtonCalcular.setBounds(289, 45, 92, 21); jButtonCalcular.addActionListener(this); } { jLabelNumero2 = new JLabel(); getContentPane().add(jLabelNumero2); jLabelNumero2.setText("Numero 2:"); jLabelNumero2.setBounds(30, 57, 62, 14); } { jTextField2 = new JTextField(); getContentPane().add(jTextField2); jTextField2.setBounds(110, 54, 155, 21); } { jTextFieldSuma = new JTextField(); getContentPane().add(jTextFieldSuma); jTextFieldSuma.setBounds(30, 117, 80, 21); } { jLabelSuma = new JLabel(); getContentPane().add(jLabelSuma); jLabelSuma.setText("Suma"); jLabelSuma.setBounds(49, 97, 41, 14); } { jTextFieldResta = new JTextField(); getContentPane().add(jTextFieldResta); jTextFieldResta.setBounds(248, 117, 89, 21); } { jLabelMultiplicacion = new JLabel(); getContentPane().add(jLabelMultiplicacion); jLabelMultiplicacion.setText("Multiplicacion"); jLabelMultiplicacion.setBounds(145, 97, 72, 14); } { jTextFieldMultiplicacion = new JTextField(); getContentPane().add(jTextFieldMultiplicacion); jTextFieldMultiplicacion.setBounds(136, 117, 91, 21); } { jLabelResta = new JLabel(); getContentPane().add(jLabelResta); jLabelResta.setText("Resta"); jLabelResta.setBounds(273, 97, 40, 14); } pack(); this.setSize(417, 300); } catch (Exception e) { e.printStackTrace(); } } /* * The method below has the interaction and the logic * due to that Triviño did not taught us to use methods with out * the static rule * * El método siguiente tiene la interacción y la lógica, * debido a que Triviño no nos enseñó a usar métodos sin la regla estática */ @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == jButtonCalcular) { int numero1 = Integer.parseInt(jTextField1.getText()); int numero2 = Integer.parseInt(jTextField2.getText()); int tamaño = calcularDigitos(numero1, numero2); int num1[] = separarDigitos(numero1, tamaño); int num2[] = separarDigitos(numero2, tamaño); jTextFieldSuma.setText(""+numero1); jTextFieldResta.setText(""+numero2); jTextFieldMultiplicacion.setText(""); } } public int calcularDigitos(int numero1, int numero2){ int numDigitos=1; if(numero1>numero2){ int Det=numero1; for(; Det>0; numDigitos++){ Det/=10; } }else{ int Det=numero2; for(; Det>0; numDigitos++){ Det/=10; } } return numDigitos; } public int[] separarDigitos(int numero, int tamaño){ int Det=numero; int numeroArg[]; numeroArg= new int[tamaño]; for(int i=numeroArg.length-1; Det>0; Det=numero/10){ numeroArg[i]=Det%10; i--; } System.out.print(numeroArg); return numeroArg; } }
miren este método me dice el tamaño del número mas grande para así al numero mas pequeño agregarle ceros a la izquierda en el arreglo
Código Javascript:
Ver original
public int calcularDigitos(int numero1, int numero2){ int numDigitos=1; if(numero1>numero2){ int Det=numero1; for(; Det>0; numDigitos++){ Det/=10; } }else{ int Det=numero2; for(; Det>0; numDigitos++){ Det/=10; } } return numDigitos; }
luego ese valor lo guardo en una variable "tamaño" para luego colocarla de parámetro para el método que me mete el número dentro del arreglo
Código Javascript:
Ver original
public int[] separarDigitos(int numero, int tamaño){ int Det=numero; int numeroArg[]; numeroArg= new int[tamaño]; for(int i=numeroArg.length-1; Det>0; Det=numero/10){ numeroArg[i]=Det%10; i--; } System.out.print(numeroArg); return numeroArg; }
luego en el main los llamo así
Código Javascript:
Ver original
int numero1 = Integer.parseInt(jTextField1.getText()); int numero2 = Integer.parseInt(jTextField2.getText()); int tamaño = calcularDigitos(numero1, numero2); int num1[] = separarDigitos(numero1, tamaño); int num2[] = separarDigitos(numero2, tamaño);
y los muestro en estos text fiels así
Código Javascript:
Ver original
jTextFieldSuma.setText(""+numero1); jTextFieldResta.setText(""+numero2);
para saber si esta bueno o malo, pero no me aparece nada y me aparece este error
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: -1
at Ventana.separarDigitos(Ventana.java:182)
at Ventana.actionPerformed(Ventana.java:148)
at javax.swing.AbstractButton.fireActionPerformed(Unk nown Source)
at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
at javax.swing.plaf.basic.BasicButtonListener.mouseRe leased(Unknown Source)
at java.awt.Component.processMouseEvent(Unknown Source)
at javax.swing.JComponent.processMouseEvent(Unknown Source)
at java.awt.Component.processEvent(Unknown Source)
at java.awt.Container.processEvent(Unknown Source)
at java.awt.Component.dispatchEventImpl(Unknown Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.LightweightDispatcher.retargetMouseEvent( Unknown Source)
at java.awt.LightweightDispatcher.processMouseEvent(U nknown Source)
at java.awt.LightweightDispatcher.dispatchEvent(Unkno wn Source)
at java.awt.Container.dispatchEventImpl(Unknown Source)
at java.awt.Window.dispatchEventImpl(Unknown Source)
at java.awt.Component.dispatchEvent(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.awt.EventQueue$4.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPri vilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilter s(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(U nknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarch y(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)