Matrices

Tengo un inconveniente. Debo pedir al usuario dos valores para el tamaño de la matriz MxN ejemplo 3 y 4, que ingrese los datos para cada posición y muestre en pantalla la matriz original y la matriz invertida al igual que sus contenidos Ej:
M = 2 filas
N = 3 columnas
fila 1 [0]=5, [1]= 4, [2] = 2 quedaria 5,4,2
fila 2 [0]=1, [1]=2,  [2]=3 quedaria 1,2,3
El resultado debiera ser que muestre la matriz original de 2x3 osea:
5,4,2
1,2,3
Y la matriz y sus contenidos invertidos que quede de 3x2 así:
3,2
1,2
4,5
La aplicación me muestra la matriz original pero en la matriz invertida me muestra puros ceros. Te pego el código para que me colabores en lo que puedas aver que estoy haciendo mal. Por tu ayuda mil gracias.
import java.io.*;
public class AplicacionMatriz2
{
public static void main(String[] args) throws IOException
{
System.out.println("Ingrese el numero de Filas " );
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int num1 = Integer.parseInt(in.readLine());
System.out.println();
System.out.println("Ingrese el numero de Columnas " );
BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));
int num2 = Integer.parseInt(in2.readLine());
int arreglo[][] = new int[num1][num2];
int arreglo2[][] = new int[num2][num1];
// definiendo un objeto de entrada para tomar datos del teclado
System.out.println();
// pidiendo los datos del teclado
for (int i=0; i<arreglo.length; i++)
{
for (int j=0; j<arreglo[0].length; j++)
{
System.out.print("Ingrese elemento " + (i+1)+ " , " + (j+1) + " : ");
arreglo[j] = Integer.parseInt(in.readLine());
}
System.out.println();
}
for (int i=arreglo.length-1; i<0; i--)
{
for (int j=arreglo.length-1; j<0; j--)
{
arreglo2[arreglo.length-i-1][arreglo.length-j-1] = arreglo[j];
}
}
System.out.println("Matriz Original " + "\n");
//Se muestran los valores por renglon de la matriz original
for (int i=0; i<arreglo.length; i++)
{
for (int j=0; j<arreglo[0].length; j++)
{
System.out.print("" + arreglo[j] + " ");
}
System.out.println();
}
System.out.println();
System.out.println("Matriz Invertida " + "\n");
// Se muestran los valores por renglon de la matriz invertida
for (int i=0; i<arreglo2.length; i++)
{
for (int j=0; j<arreglo2[0].length; j++)
{
System.out.print("" + arreglo2[j] + " ");
}
System.out.println();
}
}
}

3 respuestas

Respuesta
1
arreglo2[arreglo.length-i-1][arreglo.length-j-1] = arreglo[j];
Te falta una coordenada en la asignación en la matriz arreglo.
Hola JRuben la coordenada si la tengo, lo que pasa es que cuando pego el código acá solo pega una la j, la organizo y la envío y nada más muestra la jota, pero en todas partes hago referencia a los dos indices la i y la j. mejor dicho el código como queda pegado acá queda incompleto, pero yo lo compilo completo y me saca los ceros como ya te he dicho.
No lo pego otra vez por que sigue pegándolo incompleto, si tienes algún e-mail para enviarte el archivo y lo puedas mirar completo me avisa.
De nuevo mil gracias.
Hola JRuben!
La verdad si coloco las dos coordenadas o indices, lo que pasa es que cuando pego el código acá y lo envío, queda incompleto, pero el código yo lo compilo completo y en todas partes hago referencia a los dos indices el i y el j.
No pego otra vez el código porque saldría de nuevo incompleto, pero si deseas y me das un e-mail para enviártelo y lo mires.
De nuevo mil gracias.
for (int i=0; i<arreglo.length; i++){
for (int j=0; j<arreglo[0].length; j++){
arreglo2[j] = arreglo[j];
}
}


No te lies y sustituye la parte de la asignación de una matriz a otra por el código que te pongo
OK gracias JRuben!
Otro experto también me respondió y me sirvió su respuesta, de todas maneras voy a ensayar con la tuya aver como me va porque es bueno aprender diferentes opciones, de igual manera te agradezco de nuevo y te califico lo máximo porque yo valoro cada una de las respuesta que recibo y ademas el tiempo que deben invertir ustedes lo expertos en ayudarno.
Espero poder seguir contando contigo, en próximas dudas que tenga.
Hasta pronto y mil gracias.
Respuesta
1
En la segunda parte para hacer la matriz invertida lo tienes así:
for (int i=arreglo.length-1; i<0; i--)
{
for (int j=arreglo.length-1; j<0; j--)
{
arreglo2[arreglo.length-i-1][arreglo.length-j-1] = arreglo[j];
}
}
prueba poniendoles i >= 0 y en el otro j >= 0
Ya lo he probado así y funciona con matrices cuadradas 2x2 3x3, pero cuando es una por ejemplo de 2x3 me sale la excepción de ArrayIndexOutOfBoundsException:2
La verdad no se que más hacer he intentado barias cosas y no me da. Te agradecería la colaboración.
Así quedo para que dé esta exception.
for (int i=arreglo.length-1; i>=0; i--)
{
     for (int j=arreglo.length-1; j>=0; j--)
     {
       arreglo2[arreglo.length-i-1][arreglo.length-j-1] = arreglo[j];
      }
}








Ya lo arregle, aquí te paso el código completo, espero y te sirva
import java.io.*;
public class AplicacionMatriz2
{
public static void main(String[] args) throws IOException
{
System.out.println("Ingrese el numero de Filas " );
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int num1 = Integer.parseInt(in.readLine());
System.out.println();
System.out.println("Ingrese el numero de Columnas " );
BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));
int num2 = Integer.parseInt(in2.readLine());
int arreglo[][] = new int[num1][num2];
int arreglo2[][] = new int[num2][num1];
// definiendo un objeto de entrada para tomar datos del teclado
System.out.println();
// pidiendo los datos del teclado
for (int i=0; i<arreglo.length; i++)
{
for (int j=0; j<arreglo[0].length; j++)
{
System.out.print("Ingrese elemento " + (i+1)+ " , " + (j+1) + " : ");
arreglo[ i ][j] = Integer.parseInt(in.readLine());
}
System.out.println();
}
int a=0,b=0;
for (int i=arreglo.length-1; i>=0; i--)
{
for (int j=arreglo[ i ].length-1; j>=0; j--)
{
arreglo2[a]=arreglo[ i ][j];
a++;
if(a==num2){
a=0;
b++;
}
}
}
System.out.println("Matriz Original " + "\n");
//Se muestran los valores por renglon de la matriz original
for (int i=0; i<arreglo.length; i++)
{
for (int j=0; j<arreglo[0].length; j++)
{
System.out.print("" + arreglo[ i ][j] + " ");
}
System.out.println();
}
System.out.println();
System.out.println("Matriz Invertida " + "\n");
// Se muestran los valores por renglon de la matriz invertida
for (int i=0; i<arreglo2.length; i++)
{
for (int j=0; j<arreglo2[0].length; j++)
{
System.out.print("" + arreglo2[ i ][j] + " ");
}
System.out.println();
}
}
}
Mil gracias goblin ax.
Con esta respuesta he aprendido algo nuevo, me ayudaste muchísimo, de nuevo gracias y espero poder seguir contando contigo para cualquier duda si no es mucha molestia.
Suerte.
Respuesta
1
Siento tardar tanto pero no he tenido tiempo de mirar tu código.
Te digo, en principio el código tiene fallos de compilación, te recomiendo que uses una herramienta como eclipse o NetBeans que canta esos fallos.
Como el código tiene varios fallos pues te pongo el código corregido y tu ves los cambios y lo que no entiendas pues te explico uno a uno.
import java.io.*;
public class AplicacionMatriz2
{
public static void main(String[] args) throws IOException
{
System.out.println("Ingrese el numero de Filas " );
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int num1 = Integer.parseInt(in.readLine());
System.out.println();
System.out.println("Ingrese el numero de Columnas " );
BufferedReader in2 = new BufferedReader(new InputStreamReader(System.in));
int num2 = Integer.parseInt(in2.readLine());
int arreglo[][] = new int[num1][num2];
int arreglo2[][] = new int[num2][num1];
// definiendo un objeto de entrada para tomar datos del teclado
System.out.println();
// pidiendo los datos del teclado
for (int i=0; i<arreglo.length; i++)
{
for (int j=0; j<arreglo.length; j++)
{
System.out.print("Ingrese elemento " + (i+1)+ " , " + (j+1) + " : ");
arreglo[j] = Integer.parseInt(in.readLine());
}
System.out.println();
}
for (int i=0; i<arreglo.length; i++)
{
for (int j=0; j<arreglo.length; j++)
{
arreglo2[j] = arreglo[j];
}
}
System.out.println("Matriz Original " + "\n");
// Se muestran los valores por renglon de la matriz original
for (int i=0; i<arreglo.length; i++)
{
for (int j=0; j<arreglo.length; j++)
{
System.out.print("" + arreglo[j] + " ");
}
System.out.println();
}
System.out.println();
System.out.println("Matriz Invertida " + "\n");
// Se muestran los valores por renglon de la matriz invertida
for (int i=0; i<arreglo2.length; i++)
{
for (int j=0; j<arreglo2[0].length; j++)
{
System.out.print("" + arreglo2[j] + " ");
}
System.out.println();
}
}
}

Creo que has intentado hacerlo más complicado de lo que en verdad es.
Bueno espero que te sirva.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas