Build error: "Resource Leak" when using Scanner

Asked

Viewed 26 times

-1

I cannot compile my code because the following error appears below:

Exception in thread "main" java.util.Unknownformatconversionexception: Conversion = '0' at java.base/java.util.Formatter.checkText(Formatter.java:2732) at java.base/java.util.Formatter.parse(Formatter.java:2708) at java.base/java.util.Formatter.format(Formatter.java:2655) at java.base/java.io.Printstream.format(Printstream.java:1209) at java.base/java.io.Printstream.printf(Printstream.java:1105) At test/Examples.StandNovablePqDeuRuim.main(Testandonovamentepqdeumau.java:24)

follows the full code:

package Exemplos;

import java.util.Scanner;

public class TestandoNovamentePqDeuRuim {

    public static void main(String[] args) {
            
        Scanner leia = new Scanner(System.in);

        
        double tempoDuracao;
        double horas;
        double minutos;
        double segundos;
        
        System.out.println("Digite o tempo de duração do evento em segundos: ");
        tempoDuracao = leia.nextDouble();
        
        horas = (tempoDuracao / 3600);
        minutos = ((tempoDuracao % 3600) / 60);
        segundos = ((tempoDuracao % 3600) % 60);
        
        System.out.printf("Horas: %0.f \nMinutos: %.0f \nSegundos: %.0f", horas,minutos,segundos);
    }

}

  • In Horas: %0.f, you changed the 0 and the . place, should be Horas: %.0f - that solves the UnknownFormat

  • As for the "Resource Leak", it is probably a Warning (a warning that does not prevent the compilation, otherwise it would not have been able to run the program). It happens because the resource (in this case, the Scanner) is not being closed. In general, you should close any resource you open, but in that particular case, how it comes to the System.in, don’t need to close

1 answer

-1

Read the code comments below:

package dev.douglasmoura.utfpr;
import java.util.Scanner;

public class Main {

    public static void main(String[] args) {
        Scanner leia = new Scanner(System.in);
        double tempoDuracao;
        double horas;
        double minutos;
        double segundos;

        System.out.println("Digite o tempo de duração do evento em segundos: ");
        tempoDuracao = leia.nextDouble();

        horas = (tempoDuracao / 3600);
        minutos = ((tempoDuracao % 3600) / 60);
        segundos = ((tempoDuracao % 3600) % 60);

        // Neste caso, o recurso será fechado automaticamente 
        // no encerramento do programa, mas adquira o hábito
        // de sempre liberar da memória os recursos que não serão
        // mais utilizados.
        leia.close();

        // Use o %n para quebrar linha, conforme a documentação: https://docs.oracle.com/javase/tutorial/java/data/numberformat.html
        System.out.printf("Horas: %.2f %nMinutos: %.2f %nSegundos: %.2f %n", horas, minutos, segundos);
        // ------------------------^
        // Formata o valor com duas casas decimais. O . (ponto) vem antes do número.
    }
}

Browser other questions tagged

You are not signed in. Login or sign up in order to post.