error matrices
Publicado por Uoho! (7 intervenciones) el 18/12/2007 21:40:47
Estoy haciendo una práctica que consiste en dada una matriz de unos y ceros contar los grupos de unos seguidos que hay y el numero de unos de cada grupo y almacenarlo en una matriz de salida. Ejempo:
1 1 1 1 4
0 1 1 0 la solucion sería 2
1 0 1 1 1 2
La cosa es que de cada fila saca los valores correctos pero a la hora de imprimir la matriz completa me aparecen todo unos... Os dejo mi programa, estoy empezando en Java y esta bastante chapucero, perdon! a ver si alguien me puede ayudar que me he atascado ahi hace dias...Gracias
import java.io.*;
import java.util.*;
public class Matriz1 {
public static void main(String args[]) throws IOException {
int n;
int i,j;
InputStreamReader isr=new InputStreamReader (System.in);
BufferedReader br=new BufferedReader(isr);
String valor, cadaNum;
System.out.println("Introducer tamaño: ");
valor=br.readLine();
n=Integer.valueOf(valor).intValue();
int [][] m =new int[n][n];
int[][] solucion = new int[n][n];
//lectura de la matriz m
for (i=0;i<n;i++){
System.out.println("introduzca fila "+i);
valor=br.readLine();
StringTokenizer st=new StringTokenizer(valor);
for (j=0;j<n;j++) {
cadaNum=st.nextToken();
m[i][j]=Integer.parseInt(cadaNum);
}
}
System.out.println("matriz introducida: ");
//visualizar por pantalla la matriz
ver(m);
//contamos los grupos de unos en cada fila
porfilas(m);
System.out.println("solucion: ");
ver(solucion);
}
//mostrar por pantalla
public static void ver (int[][] a) {
int i,j;
int n=a.length;
for (i=0;i<n;i++) {
for(j=0;j<n;j++) {
System.out.print (" "+a[i][j]);
}
System.out.println();
}
}
//porfilas
public static void porfilas (int[][] a) {
int n=a.length;
int []fila = new int[n];
int i,j;
for (i=0;i<n;i++) {
System.out.print ("Fila: ");
for (j=0;j<n;j++) {
fila[j]=a[i][j];
}
ver2 (fila);
calcular(fila,i);
}
}
public static void ver2 (int[] a) {
int i,j;
int n=a.length;
for(j=0;j<n;j++) {
System.out.print (" "+a[j]);
}
System.out.println();
}
public static int [][] calcular (int [] a, int i) {
int n=a.length;
int [][]solucion = new int [n][n];
int indice = n-1;
int indice_sol = n/2+1;
System.out.println ("indice_sol " +indice_sol);
int s_grupo = 0;
while (indice>=0) {
if (a[indice]==1){
s_grupo = s_grupo + 1;
indice = indice-1;
System.out.println ("indice " +indice);
}
else{
if (s_grupo>0) {
System.out.println ("solucion " +s_grupo);
solucion[i][indice_sol-1] = s_grupo;
System.out.println ("[i][indice_sol] " +solucion[i][indice_sol-1]);
s_grupo=0;
indice_sol = indice_sol-1;
}
indice=indice-1;
}
}
if (s_grupo>0){
solucion[i][0]=s_grupo;
System.out.println ("[i][0] " +solucion[i][0]);
indice_sol = indice_sol -1;
}
return (solucion);
}
}
1 1 1 1 4
0 1 1 0 la solucion sería 2
1 0 1 1 1 2
La cosa es que de cada fila saca los valores correctos pero a la hora de imprimir la matriz completa me aparecen todo unos... Os dejo mi programa, estoy empezando en Java y esta bastante chapucero, perdon! a ver si alguien me puede ayudar que me he atascado ahi hace dias...Gracias
import java.io.*;
import java.util.*;
public class Matriz1 {
public static void main(String args[]) throws IOException {
int n;
int i,j;
InputStreamReader isr=new InputStreamReader (System.in);
BufferedReader br=new BufferedReader(isr);
String valor, cadaNum;
System.out.println("Introducer tamaño: ");
valor=br.readLine();
n=Integer.valueOf(valor).intValue();
int [][] m =new int[n][n];
int[][] solucion = new int[n][n];
//lectura de la matriz m
for (i=0;i<n;i++){
System.out.println("introduzca fila "+i);
valor=br.readLine();
StringTokenizer st=new StringTokenizer(valor);
for (j=0;j<n;j++) {
cadaNum=st.nextToken();
m[i][j]=Integer.parseInt(cadaNum);
}
}
System.out.println("matriz introducida: ");
//visualizar por pantalla la matriz
ver(m);
//contamos los grupos de unos en cada fila
porfilas(m);
System.out.println("solucion: ");
ver(solucion);
}
//mostrar por pantalla
public static void ver (int[][] a) {
int i,j;
int n=a.length;
for (i=0;i<n;i++) {
for(j=0;j<n;j++) {
System.out.print (" "+a[i][j]);
}
System.out.println();
}
}
//porfilas
public static void porfilas (int[][] a) {
int n=a.length;
int []fila = new int[n];
int i,j;
for (i=0;i<n;i++) {
System.out.print ("Fila: ");
for (j=0;j<n;j++) {
fila[j]=a[i][j];
}
ver2 (fila);
calcular(fila,i);
}
}
public static void ver2 (int[] a) {
int i,j;
int n=a.length;
for(j=0;j<n;j++) {
System.out.print (" "+a[j]);
}
System.out.println();
}
public static int [][] calcular (int [] a, int i) {
int n=a.length;
int [][]solucion = new int [n][n];
int indice = n-1;
int indice_sol = n/2+1;
System.out.println ("indice_sol " +indice_sol);
int s_grupo = 0;
while (indice>=0) {
if (a[indice]==1){
s_grupo = s_grupo + 1;
indice = indice-1;
System.out.println ("indice " +indice);
}
else{
if (s_grupo>0) {
System.out.println ("solucion " +s_grupo);
solucion[i][indice_sol-1] = s_grupo;
System.out.println ("[i][indice_sol] " +solucion[i][indice_sol-1]);
s_grupo=0;
indice_sol = indice_sol-1;
}
indice=indice-1;
}
}
if (s_grupo>0){
solucion[i][0]=s_grupo;
System.out.println ("[i][0] " +solucion[i][0]);
indice_sol = indice_sol -1;
}
return (solucion);
}
}
Valora esta pregunta


0