error codigo matriz

Iniciado por edgano, 2 Diciembre 2008, 00:31 AM

0 Miembros y 1 Visitante están viendo este tema.

edgano

hola de nuevo gente.
despues de la ayuda que me disteis en este foro, logre hacer el ejercicio, pero a partir de un numero de columnas me "peta" el codigo... me gustaria saber donde me he equivocado y que esta mal.
p.d. no lo e podido solucionar porke haze poko que programo

gracias de antemano


CODIGO
import java.io.*;

public class Prac2 {
   public static void main(String[] args) throws Exception {
      
      // Declaracion para utilizar el teclado
      InputStreamReader entrada = new InputStreamReader(System.in);
      BufferedReader teclat = new BufferedReader(entrada);
      
      // Definicion de variables
      int N,i,Max,aux,h,num;
      int [][]PWM;
      char val;
      val='º';
      i=0;
      num=0;
      
      // Pedir tamaño matriz
      System.out.println("Introdueix el tamany de la finestra");
      N= Integer.parseInt(teclat.readLine());
      PWM=new int [4][N];
      
      // Introducir datos en matriz
      System.out.println("Introdueix els valors i finalitza amb *");
      
         //Encontrar valor final
      while ((val!='*')){
         val=(char)teclat.read();
      
            // Asignar valor al lugar correspondiente                                                                                          
         switch(val){
            case 'A':
                    PWM[0]=PWM[0]+1;
                    break;
            case 'C':
                    PWM[1]=PWM[1]+1;
                    break;
                 case 'G':
                    PWM[2]=PWM[2]+1;
                    break;
                 case 'T':
                    PWM[3]=PWM[3]+1;
                 break;      
         }
         i++;

            //Mirar que no se supere el valor de secuencia y si se supera inicializar i
         if (i>=N){
            i=0;
         }   
      }
            // Mostrar la matriz por pantalla
      for(i=0; i<PWM.length; i++){
         for(h=0;h<PWM.length;h++)
            System.out.print(" "+PWM[h]);
         System.out.println ( );   
      }

            //Buscar valor maximo
      for(i=0;i<N;i++){
            Max=0;
            aux=0;
            for(h=0;h<N;h++){
                if(PWM[h]>Max){
                    Max=PWM[h];
                    aux=h;
                }
           
            }   
               //Mostrar valor maximo
            if (num==0){
               System.out.print("El prototipus resultant es: ");
               num++;
           }       
            switch(aux){
            case 0:System.out.print("A ");break;
            case 1:System.out.print("C ");break;
                 case 2:System.out.print("G ");break;
                 case 3:System.out.print("T ");break;      
         }
       }
   }
}
       
   
ESTE CODIGO TE PIDE EL TAMAÑO DE UNA SECUENCIA Y TE HAZE INTRODUIR DIFERENTES LETRRAS(A,C,G,T,) ENTONCES TE DICE EL MAXIMO DE CADA POSICION. PERO NO SE PORQUE CUANDO LA MATRIZ ES 5 O SUPERIOR PETA...(INDEXOUTOFBOUNDS)

Amerikano|Cls

Yo por mi parte no te he entendido nada, explicate mejor   ;D, y segundo escribe tus codigos con la etiqueta code=java

salu2




Mi blog:
http://amerikanocls.blogspot.com

edgano

quando te pide el tamaño de la matriz (tamaño de ventana) si le pones 6 o 7... te sale todo ok?? no puede ser!!!
me e explikao bien=??

juancho77

Código (java) [Seleccionar]
PWM=new int [4][N];
     
      // Introducir datos en matriz
      System.out.println("Introdueix els valors i finalitza amb *");
     
         //Encontrar valor final
      while ((val!='*')){
         val=(char)teclat.read();
     
            // Asignar valor al lugar correspondiente                                                                                         
         switch(val){
            case 'A':
                    PWM[0]=PWM[0]+1;
                    break;


Eso no va andar nunca asi. Tiene muchos errores graves: mira la declaracion de PWM: un arreglo bidimensional de enteros. Luego, en la sentencia
Código (java) [Seleccionar]
PWM[0]=PWM[0]+1 le intentas sumar un entero a una propiedad de la matriz. Lo logico seria acceder al valor
Código (java) [Seleccionar]
PWM[x][y] y luego sumarle uno.
Corrige lo basico y replantea tu duda.
Saludos

edgano

Código (java) [Seleccionar]

import java.io.*;

public class Prac2 {
public static void main(String[] args) throws Exception {

// Declaracion para utilizar el teclado
InputStreamReader entrada = new InputStreamReader(System.in);
BufferedReader teclat = new BufferedReader(entrada);

// Definicion de variables
int N,i,Max,aux,h,num;
int [][]PWM;
char val;
val='º';
i=0;
num=0;

// Pedir tamaño matriz
System.out.println("Introdueix el tamany de la finestra");
N= Integer.parseInt(teclat.readLine());
PWM=new int [4][N];

// Introducir datos en matriz
System.out.println("Introdueix els valors i finalitza amb *");

//Encontrar valor final
while ((val!='*')){
val=(char)teclat.read();

// Asignar valor al lugar correspondiente
switch(val){
case 'A':
            PWM[0][i]=PWM[0][i]+1;
            break;
case 'C':
            PWM[1][i]=PWM[1][i]+1;
            break;
            case 'G':
            PWM[2][i]=PWM[2][i]+1;
            break;
            case 'T':
            PWM[3][i]=PWM[3][i]+1;
            break;
}
i++;

//Mirar que no se supere el valor de secuencia y si se supera inicializar i
if (i>=N){
i=0;
}
}
// Mostrar la matriz por pantalla
for(i=0; i<PWM.length; i++){
for(h=0;h<PWM[i].length;h++)
System.out.print(" "+PWM[i][h]);
System.out.println ( );
}

//Buscar valor maximo
for(i=0;i<N;i++){
            Max=0;
            aux=0;
            for(h=0;h<N;h++){
                if(PWM[h][i]>Max){
                    Max=PWM[h][i];
                    aux=h;
                }
           
            }   
            //Mostrar valor maximo
            if (num==0){
            System.out.print("El prototipus resultant es: ");
            num++;
        }   
            switch(aux){
case 0:System.out.print("A ");break;
case 1:System.out.print("C ");break;
            case 2:System.out.print("G ");break;
            case 3:System.out.print("T ");break;
}
       }
   }
}
   

lo siento, se me havia colado al copiarlo, creo que es correcto, ya que compila correctamente hasta el valor 4 de N...lo que  no entiendo pk "peta" a partir de ese valor

Amerikano|Cls

porque no lo debuggean?  ::)

salu2




Mi blog:
http://amerikanocls.blogspot.com

juancho77

Tu pones

Código (java) [Seleccionar]
for(i=0;i<N;i++){
            Max=0;
            aux=0;
            for(h=0;h<N;h++){
                if(PWM[h][i]>Max){
                    Max=PWM[h][i];
                    aux=h;
                }


y lo declaras

      
Código (java) [Seleccionar]
N= Integer.parseInt(teclat.readLine());
PWM=new int [4][N];


Entonces cuando N es mas de 4, por ejemplo, N=6, h toma el valor 4,5 y el programa te larga un arrayIndexOutOfBounds Exception.
Debes corregir esa parte. No te dire bien como porque no entiendo que hace el programa (esta en italiano :huh:).
Saludos.

arlick

que cosa más rara! y tengo que añadir fea, si fuese tu profesor te suspendía. deberías aprender a tabular correctamente.

Por otra parte... el problema está aquí:

Código (java) [Seleccionar]

//Buscar valor maximo                                                                                                                       
                for(i=0;i<N;i++){                                                                                                               
                    Max=0;                                                                                                                                   
                    aux=0;                                                                                                                                   
                    for(h=0;h<PWN.length;h++){                        //<-- AQUI!!
                            if(PWM[h][i]>Max){                                                                                                               
                                    Max=PWM[h][i];                                                                                                           
                                    aux=h;                                                                                                                   
                            }                                                                                                                               
                    }                                                                                                                                       
                    //Mostrar valor maximo                                                                                                                   
                    if (num==0){
                            System.out.print("El prototipus resultant es: ");
                            num++;
                    }
                    switch(aux){
                            case 0:
                                    System.out.print("A ");
                                    break;
                            case 1:
                                    System.out.print("C ");
                                    break;

                            case 2:
                                    System.out.print("G ");
                                    break;
                            case 3:
                                    System.out.print("T ");
                                    break;
                        }
                }


Habías puesto un valor incorrecto que se salía de rango. Parece que es algo relacoinado con el adn, un típico problema de programación? a mí no me suena xD