Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

168
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda