Autor Tema: Insertar columna matriz java uso InputStreamReader y BufferedReader  (Leído 12420 veces)

virgi1911

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Hola quería que me ayudaraís porque hay  un error y no se donde, os agradecería si alguien puede ayudarme, gracias.


   
Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class insertar_columna {

static InputStreamReader isr = new InputStreamReader(System.in);
static BufferedReader buff = new BufferedReader(isr);
final static int MAX = 10;
static int matriz[][];

public static void main(String[] args) throws IOException {
int fil = 0, i = 0, j = 0, col = 0;
do {
System.out.println("Cuantas filas? ");
fil = Integer.parseInt(buff.readLine());
if (fil > MAX)
System.out.println("Error..,no puede ser mayor de " + MAX);
} while (fil > MAX);
do {
System.out.println("Cuantas Columnas? ");
col = Integer.parseInt(buff.readLine());
if (col > MAX)
System.out.println("Error..,no puede ser mayor de " + MAX);
} while (col > MAX);
matriz = new int[fil][col];
crea_matriz(fil, col);
insertar_col(fil, col);
}

public static void crea_matriz(int fil, int col) {
// crearemos la matriz por filas y de paso el vector suma
for (int i = 0; i < fil; i++) {

for (int j = 0; j < col; j++) {
matriz[i][j] = (int) (Math.random() * 10); // generamos del 0 al
// 9
}
}
for (int x = 0; x < fil; x++) { // muestro matriz
System.out.println();
for (int y = 0; y < col; y++) {
System.out.print(matriz[x][y] + " ");
}
}

}

public static void insertar_col(int fil, int col) throws IOException {
int colum = 0;
System.out.println();
do {
System.out.println("Que Columna quieres insertar? ");
colum = Integer.parseInt(buff.readLine());
if (colum > MAX)
System.out.println("Error..,no puede ser mayor de " + MAX);
} while (colum > MAX);
for (int j = colum; j <=col; j++) {
for (int i = 0; i < fil; i++) {
matriz[i][j] = matriz[i][j+1];

}
}
for (int x = 0; x < fil; x++) { // muestro matriz de prueba desordenada
System.out.println();
for (int y = 0; y < col; y++) {
System.out.print(matriz[x][y] + " ");
}
}
}
}
« Última modificación: 21 de Septiembre 2014, 11:37 por Alex Rodríguez »

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Insertar columna matriz java
« Respuesta #1 en: 19 de Agosto 2012, 13:22 »
Hola virgi, viendo el código se me ocurren distintas cosas que comentarte.

Por un lado, si estás utilizando programación orientada a objetos no es lo más adecuado meter todo el código dentro de una clase con el método main. En este caso yo vería más adecuado que crees una clase denominada matriz donde definas ese tipo de dato y sus métodos.

Esto que te comento tiene mucho que ver con hacer un buen diseño de código, que es fundamental para poder construir buenos programas.

Ya yendo al código en sí, tienes por ejemplo una línea que es:

matriz[j] = (int) (Math.random() * 10);

Pero esto no tiene sentido: tú has definido que una matriz tiene dos dimensiones o coordenadas. Entonces matriz[j] indica una sola dimensión y esto genera un error. Todo elemento de una matriz debe tener dos coordenadas, por ejemplo esto:

matriz [ i ] [ j ] = (int) (Math.random() * 10);

Sí es correcto.

Otra cosa que te recomendaría es que cuando vayas construyendo código vayas probando que la compilación es correcta cada vez que escribas un pequeño fragmento de código, como una línea o un método. De esta manera te evitas tener un código largo con muchos errores porque no has ido depurando adecuadamente.

En fin, con lo que te he dicho creo que puedes probar a generar una nueva versión, si tienes más dudas ponlas por aquí y tratamos de echarte una mano. Suerte!

 

« Última modificación: 19 de Agosto 2012, 16:57 por Ogramar »

virgi1911

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Insertar columna matriz java
« Respuesta #2 en: 19 de Agosto 2012, 15:59 »
 yo había puesto matriz[j] pero no se ha copiado bien pero eso no es el error

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Insertar columna matriz java
« Respuesta #3 en: 19 de Agosto 2012, 16:59 »
Perdona, hay un problema con el editor este del foro cuando ponemos [ i ] lo interpreta como si fuera una cursiva, por eso estaba viéndose mal el código, ahora cuando lo has pegado como código ya lo he visto, voy a echarle un vistazo a ver

Ogramar

  • Moderador Global
  • Experto
  • *******
  • Mensajes: 2660
    • Ver Perfil
Re:Insertar columna matriz java
« Respuesta #4 en: 19 de Agosto 2012, 17:30 »
Aquí te dejo un código que creo que funciona, revísalo a ver si te sirve. De cualquier manera, yo empezaría desde cero definiendo la matriz en una clase independiente de donde está el método main porque de esta manera el código no queda bien.

La cuestión es que para insertar una columna tienes que modificar las dimensiones de la matriz. Lo más lógico que he visto es crear una nueva matriz donde insertamos las mismas columnas que había antes más una columna adicional. Una vez está creada esta nueva matriz, desreferenciamos la anterior matriz y hacemos que apunte a la nueva matriz.

Código: [Seleccionar]
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;

public class insertar_columna {

    static InputStreamReader isr = new InputStreamReader(System.in);
    static BufferedReader buff = new BufferedReader(isr);
    final static int MAX = 10;
    static int matriz[][];

    public static void main(String[] args) throws IOException {
        int fil = 0, i = 0, j = 0, col = 0;
        do {
            System.out.println("Cuantas filas? ");
            fil = Integer.parseInt(buff.readLine());
            if (fil > MAX)
                System.out.println("Error..,no puede ser mayor de " + MAX);
        } while (fil > MAX);
        do {
            System.out.println("Cuantas Columnas? ");
            col = Integer.parseInt(buff.readLine());
            if (col > MAX)
                System.out.println("Error..,no puede ser mayor de " + MAX);
        } while (col > MAX);
        matriz = new int[fil][col];
        crea_matriz(fil, col);
        insertar_col(fil, col);
    }

    public static void crea_matriz(int fil, int col) {
        // crearemos la matriz por filas y de paso el vector suma
        for (int i = 0; i < fil; i++) {

            for (int j = 0; j < col; j++) {
                matriz[i][j] = (int) (Math.random() * 10); // generamos del 0 al
                // 9
            }
        }
        for (int x = 0; x < fil; x++) { // muestro matriz
            System.out.println();
            for (int y = 0; y < col; y++) {
                System.out.print(matriz[x][y] + " ");
            }
        }

    }

    public static void insertar_col(int fil, int col) throws IOException {
        int colum = 0;
        System.out.println();
        do {
            System.out.println("Que Columna quieres insertar? ");
            colum = Integer.parseInt(buff.readLine());
            if (colum > MAX)
                System.out.println("Error..,no puede ser mayor de " + MAX);
        } while (colum > MAX);

        int[] [] matriz2 = new int[fil][col+1]; //Nuevas dimensiones para la matriz

        //Insertamos lo que había antes de esta columna
        for (int j = 0; j < colum-1; j++) {
            for (int i = 0; i < fil; i++) {
                matriz2[i][j] = matriz[i][j];

            }
        }

        //Insertamos la columna
        for (int i=0; i<fil; i++) {
            matriz2[i][colum-1]=-99;
        }

        //Insertamos lo que había después de esta columna
        for (int j = colum; j < col+1; j++) {
            for (int i = 0; i < fil; i++) {
                matriz2[i][j] = matriz[i][j-1];

            }
        }

        //Ya tenemos la nueva matriz, matriz2
        matriz = matriz2; //Machacamos la antigua matriz

        for (int x = 0; x < fil; x++) { // muestro matriz de prueba desordenada
            System.out.println();
            for (int y = 0; y < col+1; y++) {
                System.out.print(matriz[x][y] + " ");
            }
        }
    }
}

virgi1911

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 6
    • Ver Perfil
Re:Insertar columna matriz java
« Respuesta #5 en: 19 de Agosto 2012, 20:53 »
Muchas gracias por ayudarme  ;)

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".