Article image
Matheus Oliveira
Matheus Oliveira10/03/2023 09:27
Compartilhe

alguem pode me ajudar com esse desafio java

  • #Java

ja tentei varias formas mas da erro banco pan java developer

Compartilhe
Comentários (4)

LM

Lucas Matiazzi - 10/03/2023 11:22

O erro está no 1.0 que você escreveu. O programa entende dividindo ponto flutuante por número inteiro. Pode fazer um casting e escrever desse jeito:

h += (double) 1 / i;

Com isso o valor de h será convertido para tipo double.

Para exibir o resultado final pode usar:

System.out.printf("%.0f", h)

ou se preferir

System.out.println(Math.round(h))

Com printf você determina quantas casas decimais podem aparecer além de adicionar texto sem concatenar.

Em Math.round() você arredonda para o número inteiro mais próximo

Kayla Santos
Kayla Santos - 10/03/2023 10:05

Olá Matheus, tudo bem?

O erro ocorre porque ao dividir o double pelo inteiro, o valor calculado dentro do laço vai acabar retornando um número sem considerar as casas decimais.

Tem a opção que o Lucas informou e também você pode colocar for (double i = 1.0; i <= n; i++), pois ao dividir o double por double ele vai retornar o valor com casas decimais.

Mas no final você tem que arredondar pois as respostas é em inteiro (pode utilizar a Math.round nesse caso).

Espero ter ajudado!

Gabriel Gregorio
Gabriel Gregorio - 10/03/2023 10:01

Olá Matheus,

Observe a fórmula que foi fornecida para você

H += 1.0/i é diferente do que foi fornecido

Lucas Ferreira
Lucas Ferreira - 10/03/2023 09:58

Segue a solução meu amigo, não copie e cole, leia e tente entender o problema e a resolução.

public static void main(String[] Args) {

  double h = 0;
  Scanner sc = new Scanner(System.in);
  double n = sc.nextDouble();

  for (int i = 1; i <= n; i++) {
    h += 1.0 / i;
   }
  System.out.println(String.format("%.0f",h));
  sc.close();
 }