Dudas de Programacion » Java » Java Básico

Duda acerca de Busqueda en Tablas en Java

(6 posts)
  1. 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é...

    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 localidad\n");
     
    else if {(str!=tablaDatos[0].localidad() && str!=tablaDatos[3].localidad() && str!=tablaDatos[6].localidad()) {
    System.out.printf("No hay datos para esa localidad\n");
     
    if(num==tablaDatos[0].agno() || num==tablaDatos[1].agno() || num==tablaDatos[2].agno()) {
    System.out.printf("No hay datos para este año\n");
     
    else if {(num!=tablaDatos[0].agno() && num!=tablaDatos[1].agno() && num!=tablaDatos[2].agno()) {
    System.out.printf("Temperaturas medias mensuales\n"
    + "%s (%d)\n", str, num);
    }
    }
    }
    }
     

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

    int i=0;
    while(tablaDatos[i].localidad()!=str && 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.

    Posted 1 year ago #


  2. Buenas,

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

    Saludos
    Posted 1 year ago #
  3. 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.

    Posted 1 year ago #
  4. Muchas gracias

    Posted 1 year ago #


  5. 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 :(

    Posted 1 year ago #
  6. Modifiqué un poco mi codigo y rellené con:

    for(int i=0; i<tablaDatos.length;i++)
    
    if(str.equalsIgnoreCase(tablaDatos[i].localidad()) && num==tablaDatos[i].agno()) {
    double grados=tablaDatos[i].temperaturaCentigrados(1);
    System.out.printf("%.1f\n",grados);
    double grados2=tablaDatos[i].temperaturaFahrenheit(1);
    System.out.printf("%.1f\n",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:

    for(int i=0; i<tablaDatos.length;i++)
    
    for(int mes>=1; mes<=12; mes++)
    if(str.equalsIgnoreCase(tablaDatos[i].localidad()) && num==tablaDatos[i].agno()) {
    double grados=tablaDatos[i].temperaturaCentigrados(mes);
    System.out.printf("%.1f\n",grados);
    double grados2=tablaDatos[i].temperaturaFahrenheit(mes);
    System.out.printf("%.1f\n",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

    Posted 1 year ago #

Reply

You must log in to post.

1,070 posts in 437 topics over 40 months by 388 of 892 members. Latest: lalala, nijh1, jasu

Acerca de...

Dudas de Programación es una Web, dentro del proyecto aulambra.com que nace con la idea de propocionar un foro de consultas sobre diferentes temas de programación. Orientado a ayudar a los internautas hispano-hablantes en Internet.

Ir al Blog de Linea de Código

Otras Webs