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)
Yo por mi parte no te he entendido nada, explicate mejor ;D, y segundo escribe tus codigos con la etiqueta code=java
salu2
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=??
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 PWM[0]=PWM[0]+1
le intentas sumar un entero a una propiedad de la matriz. Lo logico seria acceder al valor PWM[x][y]
y luego sumarle uno.
Corrige lo basico y replantea tu duda.
Saludos
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
porque no lo debuggean? ::)
salu2
Tu pones
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
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.
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í:
//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