Buscar
Social
Ofertas laborales ES

Foro sobre Java SE > Matrices

Buenas noches, estoy aprendiendo a programar con java en eclipse, sin embargo uno de los ejercicios me da un error que no entiendo porque ocurre, les envio el codigo completo ya que no es muy largo, el programa me lo ejecuta completo pero cuando quiere ejecutar el ultimo metodo me da un error java, segun lo que entiendo en el metodo "May" el for se repite 4 veces y eso no es posible segun java, cambie el for para que "f<3" y me lo ejecuta sin problemas pero no da el resultado que espero, ya que no analisa el ultimo elemento.
desde ya saludos

import java.util.Scanner;
public class Matriz10 {
private Scanner teclado;
private String Paises[];
private int TempM[][];
private float TempT[];

public void Carga(){
teclado=new Scanner (System.in);
Paises=new String[4];
TempM=new int[4][3];
System.out.println ("ingrese los datos correspondientes.");
for (int f=0;f<4;f++){
System.out.println ("ingrese el nombre del pais");
Paises[f]=teclado.next();
for (int k=0;k<3;k++){
System.out.println("ingrese las temperaturas medias mensuales: ");
TempM[f][k]=teclado.nextInt();
}
}
}
public void imprimir(){
System.out.println ("los paises y sus temperaturas medias mensuales son de: ");
for (int f=0;f<4;f++){
System.out.println();
System.out.print(Paises[f]+": ");
for (int k=0;k<3;k++){
System.out.print(TempM[f][k]+"-");
}
}
}
public void Trim(){

TempT=new float[4];
for (int f=0;f<4;f++){
TempT[f]=(TempM[f][0]+TempM[f][1]+TempM[f][2])/3;
}
}
public void impT(){
teclado.nextLine();
System.out.println("los paises y sus respectivas temperaturas son: ");
for (int f=0;f<4;f++){
System.out.println(Paises[f]+" posee una temperatura media trimestral de: "+TempT[f]);
}
}
public void May(){
System.out.print ("el pais con mayor temperatura media trimestral es: ");
float may=TempT[0];
String mayP=Paises[0];
for (int f=0;f<4;f++){
if(TempT[f]<TempT[f+1]){
may=TempT[f];
mayP=Paises[f];
}
}
System.out.print (mayP+"con una temperatura de "+may);
}
public static void main (String [] ar){
Matriz10 A=new Matriz10();
A.Carga();
A.imprimir();
A.Trim();
A.impT();
A.May();
}
}

agosto 15, 2015 | Unregistered CommenterClaudio

Hola, te comento...


public void May(){
System.out.print ("el pais con mayor temperatura media trimestral es: ");
float may=TempT[0];
String mayP=Paises[0];
for (int f=1;f<TempT.length;f++){
if(may<TempT[f]){
may=TempT[f];
mayP=Paises[f];
}
}
System.out.println("El pais con mayor temperatura es: " + mayP+ " Y su temperatura es: " + may);
}

El método may debería quedar así, si te fijas al principio del método, a la variable donde se guardara la mayor temperatura y el país con esa temp,
ya estas asignando los valores de la posición 0, por tanto en el bucle, el 0 no es necesario compararlo, porque ya los tienes en las variables donde
supuestamente al final del bucle acabaran quedando el país con mayor temperatura y su temperatura.

Y por otro lado lo que hacemos dentro del bucle es comparar esas variables donde supuestamente esta esa temperatura máxima, con las demás temperaturas
del array pero no con la 0, porke esa ya la tenemos en las variables de control, entonces simplemente comparamos esas temperaturas del array con las de control
y si las del array fuera mas grande pues modificamos el valor de esas temperaturas de control, de esta manera una vez que acaba el bucle, en las variables
de control may y mayP tendremos la temperatura mas alta y el país donde se registro.

Otra cosa es la condición de fin del bucle, si te fijas en lugar de poner una constante como tu haces(4), usamos el atributo length del array, este atributo
nos dice el tamaño del array, ya que este tamaño quizá no sea siempre el mismo, quizá en tu caso el array de temperaturas y paises siempre sean de tamaño 4,
pero por otro lado ese tamaño podría cambiar y podría ser indicado por el usuario si asi lo programaras, entonces quizá el usuario una vez te diga que
quiere insertar 100 paises, y otras veces puede ser que te diga que solo insertara 2. Y por esto en los recorridos de arrays, en la condición de fin,
es mejor usar el atributo length del array.

Y finalmente, he añadido una linea para que muestre en pantalla el país y la temperatura, porque según tu lo tenias, no mostraría ni verías nada ;)

Nota: Por convención, normalmente, los atributos de clase se escriben con camel case, pero empezando la primera palabra en minúsculas, es decir tu clase...:


public class Matriz10 {
private Scanner teclado;
private String paises[];
private int tempM[][];
private float tempT[];
...

Esto no es importante ahora que aprendes, pero en el futuro cuando te enfrentes a frameworks, algunos te exigirán usar estas convenciones, te recomiendo que te acostumbres a usarlas.

Bueno un saludo y si no entiendes algo lo que sea, ya nos dices.

agosto 15, 2015 | Registered Commenterloderain

okey, gracias por la informacion, voy a tener en cuenta esto de las convensiones, y si no me equivoco fue recien ayer cuando aprendi el .length, lo uso seguido pero no lo use en ese ejercicio porque como me daba ese error empece a cambiar las variales para que sean lo mas especificas posibles para ver donde estaba el error y no habia caso, repito gracias por la correccion y si tengo algun otro problema que realmente le haya dado 1000 vueltas y no lo haya podido resolver volvere a preguntar :)

agosto 16, 2015 | Unregistered CommenterClaudio