Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

162
Vistas
Cree un conjunto a partir de un valor doble de una cadena dividida en una matriz

Tengo algunos problemas con un ejercicio actual en el que tengo que buscar una matriz de 1000 cadenas que se dividen por "," en siteId, siteName, año, mes, día, hora y temperatura. La información que necesito es un número entero, que es el día en que se registró, y un doble, que es la temperatura.

Por ejemplo,

Obtengo un registro de una estación meteorológica con los valores 3031,LOCH GLACARNOCH SAWS (3031),2015,01,01,18,7.50

Hasta ahora, he intentado hacer una lista de arreglos y así con las fechas, ya que no puede haber duplicados, pero no puedo encontrar la solución a la pregunta: ¿Cuántos días cayó la temperatura a 0.0 o menos en cualquier lugar del Reino Unido?

La variable año no es tan importante ya que los registros son solo de 2015.

String[] weatherData = WeatherData.getData();

 double zeroTemp = 0.0; int counter = 0; // get the data for (int i = 1; i <= weatherData.length-1; i++) { String line = weatherData[i]; String[] data = line.split(","); int date = Integer.parseInt(data[6]); int month = Integer.parseInt(data[5]); int year = Integer.parseInt(data[4]); double temp = Double.parseDouble(data[9]); LocalDate when = LocalDate.of(year, month, date); for(int j = 1; j<= data.length; j++) { HashSet<LocalDate> duplicateDates = new HashSet<>(Arrays.asList(when)); System.out.println(when); duplicateDates.add(when); System.out.println(duplicateDates.size()); } if(zeroTemp >= temp) { counter++; } } System.out.println("The temperature fell to 0.0 degrees or below in " + counter + " days."); }
over 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La información que necesito es un número entero, que es el día en que se registró

Realmente no.

La entrada puede contener múltiples entradas para una sola fecha, en cuyo caso necesita saber la fecha completa (incluso si el año es irrelevante, hay mes + día; no puede simplemente mirar ese valor de 'día', o usted' d considerar el 1 de marzo y el 1 de abril como el mismo día, lo cual es claramente incorrecto.

O bien, no hay duplicados: para un día exacto dado, solo puede haber un único registro. Esto suena mal (dada la parte "¿o por debajo de cualquier parte del Reino Unido?"), Pero si es así, no necesita mirar el día o el mes en absoluto; simplemente cuente el número de entradas con un registro de temperatura por debajo de 0.

Puede modificarlo y convertir los campos de mes y día en un solo número entero único (multiplique el mes por 32, luego agregue los días: eso le garantiza un valor de ID único de 'mes + día', porque ningún mes tiene 32 días, la superposición no es posible ). O escríbalo correctamente y convierta ese campo año+mes+día en una instancia de LocalDate : LocalDate when = LocalDate.of(2015, 1, 1) produciría una instancia de LocalDate que representa el 1 de enero de 2015.

ArrayList no es una buena herramienta para la unicidad; probablemente esté buscando HashMap que asigna una 'clave' dada a un valor dado, o mejor aún, un HashSet , que almacena valores, pero que no almacenará el mismo valor más de una vez. A continuación, puede agregar cualquier LocalDate para el que haya encontrado un registro por debajo de cero, y si luego encuentra otro registro de este tipo, no cambiará nada, simplemente agregue la fecha al conjunto por segunda vez, ya que no lo hará. tener algún efecto. Luego, al final, simplemente verifique qué tan grande es el conjunto. Asi que:

  1. Cree un HashSet de LocalDate.
  2. Para cada registro: Escriba un código que convierta los valores de año, mes y día en una LocalDate, usando LocalDate.of(year, month, day) .
  3. Compruebe si el valor de la temperatura está por debajo de 0,0. Si es así, agregue la fecha que hizo al conjunto.
  4. Cuando termine con los bucles, el tamaño del conjunto representa el número de días en que la temperatura estuvo por debajo de 0 en cualquier parte del Reino Unido.

NB: line.split(",") tomará una línea de texto y devolverá una matriz de cadenas dividiendo la línea de entrada en cada coma. Integer.parseInt("50") devuelve el número 50.

Esta debería ser toda la información que necesitas para terminar tu tarea.

over 4 years ago · Santiago Trujillo Denunciar

0

Has mencionado que las fechas son únicas. Según la condición, puede hacerlo con los siguientes pasos simples:

  1. Coloque los registros en Map<LocalDate, Double> para almacenar la fecha como clave y la temperatura como valor.
  2. Repita los valores del Map y cuente el número de veces que se encuentra que la temperatura es inferior a cero.

Manifestación:

 // Put the records in a Map<LocalDate, Double> Map<LocalDate, Double> map = new HashMap<>(); for (int i = 0; i < weatherData.length; i++) { String line = weatherData[i]; String[] data = line.split(","); int day = Integer.parseInt(data[6]); int month = Integer.parseInt(data[5]); int year = Integer.parseInt(data[4]); double temp = Double.parseDouble(data[9]); LocalDate date = LocalDate.of(year, month, day); map.put(date, temp); } // If you wish, you can print the map to view the datewise-records of temperature System.out.println(map); // Iterate the map values and count the number of times the temp < 0 int count = 0; for (Double value : map.values()) { if (value < 0) { count++; } } System.out.println("The temperature fell to 0.0 degrees or below in " + count + " days.");
over 4 years ago · Santiago Trujillo Denunciar

0

¡Por fin! Muchas gracias por vuestra ayuda, chicos.

finalmente lo hice

 //How many days of the year did the temperature fall to 0.0 or below //anywhere in the UK? Hint : More than 200 but less than 250 String[] weatherData = WeatherData.getData(); double zeroTemp = 0.0; HashSet<LocalDate> set = new HashSet<>(); // get the data for (int i = 1; i <= weatherData.length-1; i++) { String line = weatherData[i]; String[] data = line.split(","); int date = Integer.parseInt(data[6]); int month = Integer.parseInt(data[5]); int year = Integer.parseInt(data[4]); double temp = Double.parseDouble(data[9]); LocalDate when = LocalDate.of(year, month, date); if(zeroTemp >= temp) { set.add(when); } } System.out.println("The temperature fell to 0.0 degrees or below in " + set.size() + " days."); }

Solo tenía que poner un HashSet fuera del ciclo for y solo ingresar un nuevo valor si la temperatura era inferior o igual a 0.0

No sé cómo no pude verlo.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda