0 votos
por (540 puntos) en Java
Hola, tengo la siguiente duda: tengo que hacer un main con distintas operaciones, y tengo duda con esta; la cosa es que si el operador ha tecleado la localidad que ocupa el puesto 0, 3 o 6 pregunte: "Escriba un año:" y si el año es el dato que ocupa en la tabla el 0, 1 o 2 que presente unos datos por pantalla, que haré más adelante. (Se supone que las localidades que ocupan los puestos 0-1-2 es una, 3-4-5 es otra y 6-7-8 es otra, y que la tabla se compone de {AÑO,LOCALIDAD,TEMPERATURAS}).

Mi problema es que cuando ejecuto la clase y me pregunta por la localidad, y tecleo cualquier localidad presente en la tabla, me da error, y dice "No hay datos para esa localidad". No se si es error de los operadores lógicos "||" o "&&", o qué...

<pre lang='java'>else if(operacion==2) {
System.out.printf("Escriba el nombre de una localidad: " );
Scanner sc = new Scanner(System.in);
String str = sc.next();

if(str==tablaDatos[0].localidad() || str==tablaDatos[3].localidad() || str==tablaDatos[6].localidad()) {
System.out.printf("Escriba un año: ");
Scanner sr = new Scanner(System.in);
int num = sr.nextInt();
System.out.printf("No hay datos para esa localidadn");

else if {(str!=tablaDatos[0].localidad() &amp;&amp; str!=tablaDatos[3].localidad() &amp;&amp; str!=tablaDatos[6].localidad()) {
System.out.printf("No hay datos para esa localidadn");

if(num==tablaDatos[0].agno() || num==tablaDatos[1].agno() || num==tablaDatos[2].agno()) {
System.out.printf("No hay datos para este añon");

else if {(num!=tablaDatos[0].agno() &amp;&amp; num!=tablaDatos[1].agno() &amp;&amp; num!=tablaDatos[2].agno()) {
System.out.printf("Temperaturas medias mensualesn"
+ "%s (%d)n", str, num);
}
}
}
}

A ver si me podéis ayudar, he intentado también esto:

<pre lang='java'>int i=0;
while(tablaDatos[i].localidad()!=str &amp;&amp; i<tablaDatos.length-1) i++;
if(tablaDatos[i].localidad()==str) System.out.printf("aaa");
else System.out.printf("sss");
Y SIEMPRE SACA POR PANTALLA "sss". ¿VEIS EL FALLO? AYUDA.


5 Respuestas

0 votos
por (8.5k puntos)
Buenas,

Tienes que usar el método equals, no el operador ==


0 votos
por (8.5k puntos)
La explicación es que el operador ==, te dice si dos objetos son exactamente el mismo objeto y dos String pueden tener los mismos caracteres pero ser objetos distintos.


0 votos
por (540 puntos)
Muchas gracias


0 votos
por (540 puntos)
Hola, tengo otra duda sobre lectura de datos. Se supone que tengo una tabla así: (AÑO, LOCALIDAD, {TEMPERATURAS}), donde TEMPERATURAS es un listado de las temperaturas que ha habido durante 1 año en una localidad. Son 12 datos por los 12 meses. Entonces tengo que mostrar un listado tal que diga más o menos esto:

ENERO   5.9

FEBRERO 3.4

....

DICIEMBRE 12.3

Tengo un método ya diseñado llamado:

[code]public double temperaturaCentigrados(int mes) {

return temperatura[mes-1];

}[/code]

Ese método está en otra clase, en el mismo package, y no sé cómo hacer que después de la operación 2 que puse en mi post, es decir, que después de poner una localidad y un año presente la tabla de grados de cada mes en orden, de esa localidad y ese año tecleado.

Imagina que pongo:

"Escriba una localidad: MADRID"

"Escriba un año: 2009"

ENERO 10.8

FEBRERO 4.5

....

¿Como hago para sacar esos datos de la tabla?

¿Como identifico  los meses con cada temperatura?

Ayuda :(


0 votos
por (540 puntos)
Modifiqué un poco mi codigo y rellené con:

<pre>for(int i=0; i<tablaDatos.length;i++)

if(str.equalsIgnoreCase(tablaDatos[i].localidad()) &amp;&amp; num==tablaDatos[i].agno()) {
double grados=tablaDatos[i].temperaturaCentigrados(1);
System.out.printf("%.1fn",grados);
double grados2=tablaDatos[i].temperaturaFahrenheit(1);
System.out.printf("%.1fn",grados2);
}
Pero eso lo que saca es los datos de un año y una ciudad de Enero, yo quiero la forma general para todos los meses, algo como:

<pre>for(int i=0; i<tablaDatos.length;i++)

for(int mes>=1; mes<=12; mes++)
if(str.equalsIgnoreCase(tablaDatos[i].localidad()) &amp;&amp; num==tablaDatos[i].agno()) {
double grados=tablaDatos[i].temperaturaCentigrados(mes);
System.out.printf("%.1fn",grados);
double grados2=tablaDatos[i].temperaturaFahrenheit(mes);
System.out.printf("%.1fn",grados2);
}
Pero eso me da error. Digo de una forma general, ya que sino tendría que poner el primer codigo que puse ahora pero 12 veces, 1 por mes, cosa q seria poco eficiente, habría mucho codigo :S


Preguntas relacionadas

0 votos
2 respuestas
preguntado por Iggy16 (540 puntos) Ene 28, 2016 en Java
0 votos
0 respuestas
preguntado por requeni81 (20 puntos) Mar 14, 2017 en Javascript
0 votos
0 respuestas
preguntado por Exodar95 (20 puntos) Ene 28, 2016 en Java
0 votos
4 respuestas
Bienvenido a Dudas de Programación, donde puedes hacer preguntas y recibir respuestas sobre los problemas más frecuentes de los lenguajes de programación, frameworks de desarrollo y bases de datos que utilices. Foro de Línea de Código

Categorías

...