Foros aprenderaprogramar.com
Aprender a programar => C, C++, C#, Java, Visual Basic, HTML, PHP, CSS, Javascript, Ajax, Joomla, MySql y más => Mensaje iniciado por: virgi1911 en 19 de Agosto 2012, 12:06
-
Hola quería que me ayudaraís porque hay un error y no se donde, os agradecería si alguien puede ayudarme, gracias.
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] + " ");
}
}
}
}
-
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!
-
yo había puesto matriz[j] pero no se ha copiado bien pero eso no es el error
-
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
-
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.
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] + " ");
}
}
}
}
-
Muchas gracias por ayudarme ;)