• Lunes 29 de Abril de 2024, 04:57

Autor Tema:  Clase Matriz  (Leído 2265 veces)

Eman

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Clase Matriz
« en: Jueves 17 de Noviembre de 2005, 03:00 »
0
hola, pues eme aqui queriendo experimentar con matrizes y cosas, y me salieron algunda de las operaciones basicas pero ahora quiero hacer una clase matris para que le de un poco mas de elegancia segun mi maestro jejej pues aqui les dejo el codigo que tengo hasta ahorita

Código: Text
  1.  
  2. public class Matriz
  3. {
  4.     int renglon;
  5.     int columna;
  6.     int m[][]=new int[renglon][columna];
  7.     //constructor
  8.     public Matriz(int a,int b)
  9.     {
  10.       renglon=a;
  11.       columna=b;
  12.      
  13.     }
  14.     public static void main(String[] args)
  15.     {
  16.       Matriz M1=new Matriz(1,1);
  17.       M1.m[0][0]=1;
  18.       System.out.println("matris"+M1.m[0][0]);
  19.     }
  20. }
  21.  
  22.  

Lo que quiero es poder usar esa clase en el programa principal para poder hacer algo asi:
Código: Text
  1.  
  2. public static void main(String[] args)
  3. Matriz m1=new Matriz(2,2)
  4.  
  5.  
y que se cree la matriz y ya pueda trabajar con ella

El error que me sale cuado compilo el codigo de arriba es el siguiente:


C:\Archivos de programa\Java\jdk1.5.0\Programas>java Matriz
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
        at Matriz.main(Matriz.java:17)


Cualquier aportacion es agradecida gracias de ante mano

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Clase Matriz
« Respuesta #1 en: Jueves 17 de Noviembre de 2005, 04:01 »
0
el problema es que por default, las variables que tenes renglon y columna se auto inicializan a sus valores default (que para un int es 0)...entonces el flujo de tu programa estaria haciendo algo tipo:

int renglo = 0;
int columna = 0;
int m[][]=new int[0][0];

El codigo que tenes dentro del contructor no tiene ningun efecto sobre la matriz m[][] ya que esta ya fue inicializada en el paso anterior. Para poder usar la clase con un constructor tipo Matriz m1=new Matriz(2,2), podes hacer lo siguiente:
Código: Text
  1.  
  2. public class Matriz {
  3.   private double[][] mat;
  4.  
  5.   public Matriz(int fila, int columna) {
  6.     this.mat = new double[fila][columna];
  7.   }
  8. }
  9.  
  10.  

Eman

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Clase Matriz
« Respuesta #2 en: Viernes 18 de Noviembre de 2005, 02:39 »
0
con ese codigo me salen los sig errores:

Código: Text
  1.  
  2. C:\Archivos de programa\Java\jdk1.5.0\Programas>"c:\Archivos de programa\Java\jd
  3. k1.5.0\bin\javac.exe" Matriz.java
  4. Matriz.java:10: illegal start of expression
  5.                         this.m[][]=new double[fila][columna];
  6.                                ^
  7. Matriz.java:10: ']' expected
  8.                         this.m[][]=new double[fila][columna];
  9.                                                             ^
  10. Matriz.java:10: not a statement
  11.                         this.m[][]=new double[fila][columna];
  12.                               ^
  13. 3 errors
  14.  
  15.  

Habre echo algo mal?

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Clase Matriz
« Respuesta #3 en: Viernes 18 de Noviembre de 2005, 13:37 »
0
es this.mat = new double[fila][columna], no
this.mat[][] = new double[fila][columna];

Eman

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Clase Matriz
« Respuesta #4 en: Jueves 1 de Diciembre de 2005, 01:19 »
0
aa cierto muchas gracias =D.


Bueno ahora tengo otra duda, estoy tratando ahora de mter el programa a un frame y no se como acomodar las cosas sin unsar el FlowLayout() que es el que me las acomoda automaticamente. hay una forma facil de ahcerlo?

Tambien quisiera saber como limpiar el frame, por ejemplo tengo los botones que dan a opciones cuando se pican que se pongan los otros atributos pero que se borren los botones y aparesca uno de regresar o algo asi, sno se si me expliqu epero espero me puedan ayudar, si termino el trabajo se los muestro para ver si asi se dan una mejor idea

chimps

  • Miembro MUY activo
  • ***
  • Mensajes: 208
    • Ver Perfil
    • http://quiqueq.blogspot.com
Re: Clase Matriz
« Respuesta #5 en: Jueves 1 de Diciembre de 2005, 01:47 »
0
podes probar usando otros layouts (border, grid, gridbag, box, etc...tenes que buscar en google como usarlos pq cada uno es distinto)...o sino seteas el layout de tu frame a null, y al agregar un componente nuevo, le mandas como parametro al metodo add las coordenadas donde queres que aparezca...de esta forma los acomodas como quieras.

para hacer que cuando hagas click en un boton este desaparezca y aparezca otro, cambias su visibilidad...por ejemplo, al iniciar el programa, agregas los 2 botones, pero decis boton2.setVisible(false) para que no aparezca..despues agregas un actionListener al boton1 que haga que cuando se detecte un click del botton, haga: boton1.setVisible(false);
boton2.setVisible(true);

Eman

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Clase Matriz
« Respuesta #6 en: Jueves 1 de Diciembre de 2005, 03:39 »
0
:D  :D  :D  muchas gracias, en este momento estoy trabajando en el proyecto, pro ahora lo estoy haciendo con el FlowLayOut() que es el qu eme enseñaron, pero al pareccer ago algo mal, declare 3 matrizes , 2 para ser llenadas y otr para ser el resultado, y le puse un boton para que cuando se presione aga la operacion y aparesca el resultado, no se si tengas tiempo de ver el codigo , lo que hare por ahora es usar el layout en null para ponerlo por cordenadas por practicidad y tiempo. Hojala me puedas responder jeje

PD: olle como se usar el setLayOut(null)

no se como ordenar por cordenadas y el google anda chafeando =p

Edit2: oohh el google ayudando cuando lo usas bien =p ya supe usar el setLayOut(null)

ahora lo acomodo para ver si me sale lo otro  =D

Eman

  • Miembro activo
  • **
  • Mensajes: 42
    • Ver Perfil
Re: Clase Matriz
« Respuesta #7 en: Jueves 1 de Diciembre de 2005, 06:09 »
0
Miren aqui les dejo el codigo, lo que probe es que el boton con el nombre opc no produce accion aun cuando le estoy diciendo que sea un actionlistener, otra es que creo que estoy haciendo mal uso de lo que es la operacion con matrises ya que no pasa nada cuando deberian de hacerce operaciones

clase matriz
Código: Text
  1.  
  2. public class Matriz
  3. {
  4.    
  5.     int [][] m;
  6.     //constructor
  7.     public Matriz(int fila,int columna)
  8.     {
  9.      
  10.       this.m=new int[fila][columna];
  11.     }
  12.    
  13. }
  14.  
  15.  

y aqui esta todo el meollo del asunto

clase proFinal
Código: Text
  1.  
  2. /*Proyecto final de Lenguajes de programacion 4: JAVA
  3. *Echo por: Eman
  4. *version 1.0
  5. *fecha:30/11/2005
  6. */
  7.  
  8.  
  9. //---------------------------------------------------------------LIBRERIAS--------------------------------------------------------//
  10. import java.awt.*;
  11. import java.awt.event.*;
  12.  
  13. //-----------------------------------------------------------CLASE PRINCIPAL-------------------------------------------------//
  14. class proFinal extends Frame implements ActionListener,WindowListener
  15. {
  16.   //Datos miembro de la clase
  17.   private Button opc1,opc2,opc3;
  18.   private Label eti1,eti2,eti3,eti4,eti5,eti6;
  19.   private TextField edi1,edi2,edi3,edi4,edi5,edi6,edi7,edi8;
  20.  
  21.  
  22.   //Constructor de la clase
  23.   public proFinal(String nombre)
  24.   {
  25.   super(nombre);
  26.   setSize(800,700);
  27.   setLayout(null);
  28.   addWindowListener(this);
  29.  
  30.   //LA creacion de los componentes de la clase
  31.   opc1= new Button("Opcion1");
  32.   opc1.addActionListener(this);
  33.   opc2= new Button("Opcion2");
  34.   opc3= new Button("Mul");
  35.   opc3.addActionListener(this);
  36.   eti1= new Label("1)Multiplicacion de Matrices de 2x2");
  37.   eti2= new Label("2)Multiplicacion de Vectores");
  38.   eti3= new Label("MENU DEL PROGRAMA");
  39.   eti4= new Label("Pon los valores de la primer matriz");
  40.   eti5= new Label("Pon los valores de la segunda matriz");
  41.   eti6= new Label("Matriz Resultante");
  42.   edi1= new TextField(3);
  43.   edi1.addActionListener(this);
  44.   edi2= new TextField(3);
  45.   edi2.addActionListener(this);
  46.   edi3= new TextField(3);
  47.   edi3.addActionListener(this);
  48.   edi4= new TextField(3);
  49.   edi4.addActionListener(this);
  50.   edi5= new TextField(3);
  51.   edi5.addActionListener(this);
  52.   edi6= new TextField(3);
  53.   edi6.addActionListener(this);
  54.   edi7= new TextField(3);
  55.   edi7.addActionListener(this);
  56.   edi8= new TextField(3);
  57.   edi8.addActionListener(this);
  58.  
  59.   //Ponemos la cosas en el frame en un orden especifico
  60.   add(eti3);
  61.   eti3.setSize(150,30);
  62.   eti3.setLocation(250,30);
  63.   add(eti1);
  64.   eti1.setSize(200,30);
  65.   eti1.setLocation(50,60);
  66.   add(opc1);
  67.   opc1.setSize(90,25);
  68.   opc1.setLocation(300,65);
  69.   add(eti2);
  70.   eti2.setSize(90,30);
  71.   eti2.setLocation(50,90);
  72.   add(opc2);
  73.   opc2.setSize(90,25);
  74.   opc2.setLocation(300,95);
  75.   setVisible(true);
  76.   }
  77.   //Agregando los metodos miembro del WindowListener
  78.   public void windowActivated(WindowEvent e){}
  79.   public void windowDeactivated(WindowEvent e){}
  80.   public void windowIconified(WindowEvent e){}
  81.   public void windowDeiconified(WindowEvent e){}
  82.   public void windowOpened(WindowEvent e){}
  83.   public void windowClosed(WindowEvent e){}
  84.   public void windowClosing(WindowEvent e)
  85.   {
  86.     System.exit(0);//salimos del frame
  87.   }
  88.  
  89.   //Ahora  con  los metodos del ActionListener
  90.   public void actionPerformed(ActionEvent e)
  91.   {
  92.         //datos miembro qu ese usan en la multiplicacion
  93.          int r,c,k;
  94.         //creamos una matrizes  para la multiplicacion
  95.          Matriz M1= new Matriz(2,2);
  96.          Matriz M2= new Matriz(2,2);
  97.          Matriz R= new Matriz(2,2);
  98.        
  99.     //Aqui es donde empieza lo bueno =D
  100.     if(e.getActionCommand().equals("Opcion1"))
  101.     {
  102.         eti1.setVisible(false);
  103.         eti2.setVisible(false);
  104.         opc1.setVisible(false);
  105.         opc2.setVisible(false);
  106. //------------------------------------AGREGAMOS LOS CAMPOS PARA QUE LLENEN LA MATRIZ 1---------------------------------------/
  107.         add(eti4);
  108.         eti4.setSize(200,30);
  109.         eti4.setLocation(50,60);
  110.  
  111.         //Agregamos los campso que tomaran los valores de la matriz 1 y 2
  112.         add(edi1);//la parte de la matriz[0][0]
  113.         edi1.setSize(30,20);
  114.         edi1.setLocation(50,90);
  115.         add(edi2);//la parte de la matriz1 [0][1]
  116.         edi2.setSize(30,20);
  117.         edi2.setLocation(90,90);
  118.         add(edi3);//la parte de la matriz1[1][0]
  119.         edi3.setSize(30,20);
  120.         edi3.setLocation(50,120);
  121.         add(edi4);//la parte de la matriz1[1][1]
  122.         edi4.setSize(30,20);
  123.         edi4.setLocation(90,120);        
  124. //---------------------------------------------ETIQUETA PARA LA SEGUNDA MATRIZ--------------------------------------------------/
  125.         add(eti5);
  126.         eti5.setSize(210,30);
  127.         eti5.setLocation(50,150);
  128.         add(edi5);//la parte de la matriz2[0][0]
  129.         edi5.setSize(30,20);
  130.         edi5.setLocation(50,180);        
  131.         add(edi6);//la parte de la matriz1[0][1]
  132.         edi6.setSize(30,20);
  133.         edi6.setLocation(90,180);        
  134.         add(edi7);//la parte de la matriz1[1][0]
  135.         edi7.setSize(30,20);
  136.         edi7.setLocation(50,210);        
  137.         add(edi8);//la parte de la matriz1[1][1]
  138.         edi8.setSize(30,20);
  139.         edi8.setLocation(90,210);        
  140.         //Bonton que activa la accion de multiplicar
  141.         add(opc3);
  142.         opc3.setSize(90,25);
  143.         opc3.setLocation(300,200);
  144.         setVisible(true);
  145.    
  146.         if(e.getActionCommand().equals("Mul"))
  147.         {
  148.                
  149.         //leemos los datos que se nos envian y los vaciamos en las matrizes
  150.         M1.m[0][0]=Integer.parseInt(edi1.getText());//Cambiamos de cadena a entero y ta capturamos
  151.         M1.m[0][1]=Integer.parseInt(edi2.getText());
  152.         M1.m[1][0]=Integer.parseInt(edi3.getText());
  153.         M1.m[1][1]=Integer.parseInt(edi4.getText());
  154.         M2.m[0][0]=Integer.parseInt(edi5.getText());
  155.         M2.m[0][1]=Integer.parseInt(edi6.getText());
  156.         M2.m[1][0]=Integer.parseInt(edi7.getText());
  157.         M2.m[1][1]=Integer.parseInt(edi7.getText());
  158.         //Hacemos la multiplicacion
  159.         for(r=0;r < 2;r++)
  160.           for(c=0; c< 2;c++)
  161.             for( k=0; k< 2;k++)
  162.             {
  163.               R.m[r][c] += M1.m[r][k]* M2.m[k][c];
  164.                 }
  165.         add(eti6);
  166.         eti6.setSize(150,30);
  167.         eti6.setLocation(50,250);
  168.         edi1.setText(R.m[0][0]+"AAA");
  169.         /*edi2.setText(R.m[0][1]+"p2");
  170.         edi3.setText(R.m[1][0]+"");
  171.         edi4.setText(R.m[1][1]+"");*/
  172.         setVisible(true);
  173.         }
  174.        
  175.     }
  176.   }
  177.  
  178.   //Clase  Main del programa
  179.   public static void main(String[] args)
  180.   {
  181.     proFinal obj= new proFinal("Proyecto Final");
  182.   }
  183.  
  184. }
  185.  
  186.  

Lo que creo es que por falta de experiencia en programacion he de estar pasando algun truco o algo que hace que no se aga la operacion, de nuevo gracias por cualquier aportacion que puedan hacer


Edit1:Ya agregue multiplicacion de vectores usando la clase matriz y si me dio el resultado correcto supong o que el for o algo de la multiplicacion de la matriz es lo que anda mal