Eu não sou muito boa em java, estou tento dificuldade para criar um método que receba a quantidade de filmes que a pessoa assistiu e some a duração dos filmes. Aqui esta o que fiz por enquanto. (Não sei se está certo). A parte de receber a quantidade de filmes assistidos deu certo eu não consigo entender o da soma.
import java.util.Scanner;
public class Duracao {
private Scanner entrada;
public void contaTempo () {
String duracao; // formato x.xx:xx
int qtdFilmes;
int totalDuracao = 0;
entrada = new Scanner(System.in);
entrada.useDelimiter("\r\n");
System.out.print("\n Entre com a quantidade de filmes que voce vai assistir: ");
qtdFilmes = entrada.nextInt();
for (int i = 0; i < qtdFilmes; i++){
System.out.print("\n Entre com a duração do filme: (x.xx:xx");
duracao = entrada.next();
}
}
Eu não sou muito boa em java, estou tento dificuldade para criar um método que receba a quantidade
de filmes que a pessoa assistiu e some a duração dos filmes. Aqui esta o que fiz por enquanto.
(Não sei se está certo). A parte de receber a quantidade de filmes assistidos deu certo eu não
consigo entender o da soma.
Você pode usar a API Java 8 java.time.
Ele tem uma classe de duração que pode ser usada para armazenar e adicionar durações.
Outra solução seria criar sua própria classe de titular de duração e ter métodos para adicionar etc.
*
*
*
*
*/
public class Filmes {
private Scanner entrada;
public void contaTempo () {
//String duracao; // formato assim para Duration xx:xx:xx
Duration duracao = Duration.ZERO; // initialized to zero
int qtdFilmes;
int totalDuracao = 0;
entrada = new Scanner(System.in);
entrada.useDelimiter("\r\n");
System.out.print("\n Entre com a quantidade de filmes que voce vai assistir: ");
qtdFilmes = entrada.nextInt();
for (int i = 0; i < qtdFilmes; i++){
System.out.print("\n Entre com a duração do filme: (x.xx:xx");
LocalTime time = LocalTime.parse(entrada.next());// creates a Local time object (hh:mm:ss)
duracao = duracao.plus(Duration.between(LocalTime.MIN, time)); // converts to Duration PTxHxMXs
}
System.out.println(duracao.toHoursPart() + ":" +duracao.toMinutesPart() + ":" +duracao.toSecondsPart());
}
I looked at the solution above. Its a great alternative, but you’ll get a
Runtime exception, every-time you type soimething follwed by an enter.
This ins because you need to swallowe the nextLine " " character from the enter.
Eu olhei para a solução acima. É uma ótima alternativa, mas você obterá uma exceção
de tempo de execução toda vez que digitar algo seguido de enter. Isso significa que
você precisa engolir o caractere nextLine “” do enter.
abaixo da correção
below the fix
*/
public class App {
public static void main(String[] args) {
Scanner entrada = new Scanner(System.in);
entrada.useDelimiter("\D");
System.out.print("Entre com a quantidade de filmes que voce vai assistir: ");
int quantidadeDeFilmes = entrada.nextInt();
entrada.nextLine(); // swallow the enter
int totalDeHoras = 0;
int totalDeMinutos = 0;
int totalDeSegundos = 0;
for (int i = 0; i < quantidadeDeFilmes; i++) {
System.out.print("Entre com a duração do filme (x.xx:xx): ");
totalDeHoras += entrada.nextInt();
totalDeMinutos += entrada.nextInt();
totalDeSegundos += entrada.nextInt();
entrada.nextLine(); // swallow the enter
}
int segundos = totalDeSegundos / 60;
totalDeMinutos = totalDeMinutos + segundos;
totalDeSegundos = totalDeSegundos - (segundos * 60);
int minutos = totalDeMinutos / 60;
totalDeHoras = totalDeHoras + minutos;
totalDeMinutos = totalDeMinutos - (minutos * 60);
System.out.printf("[%dh %dm %ds]\n", totalDeHoras, totalDeMinutos, totalDeSegundos);
entrada.close();