[RESOLVIDO]Duvida com codigo

11 respostas
Z

Boas pessoal! Tenho aqui um codigo feito mas esta errado, eu quero que o programinha faça ler a hora de partida e de chegada de uma viagem e apresenta a duração. A hora de partida, de chegada e a duração são indicados em horas, minutos e segundos. O programa deve verificar se as horas de partida e de chegada são válidas e deve assinalar se a partida é superior à chegada. Do tipo:

partida H M S ? 7 50 25
chegada H M S ? 14 25 12
Duração = 6:34:47

partida H M S ? 7 50 25
chegada H M S ? 14 72 12
Hora de chegada inválida

partida H M S ? 7 50 25
chegada H M S ? 4 25 12
Partida superior à chegada.
partida H M S ? 18 50 20
chegada H M S ? 19 40 20
Duração = 0:30:0

O codigo que tenho e o seguinte :
import java.util.*;

public class Viagem {

public static void main (String [] args) {

Scanner in = new Scanner ( System.in );

int h1, h2, m1, m2, diferenca, s1, s2, diferenca_horas, diferenca_minutos, diferenca_segundos, segundos_partida, segundos_chegada;
System.out.println("Digite o tempo de partida");
System.out.println("Hora. "); h1 = in.nextInt();
System.out.println("Minutos. "); m1 = in.nextInt();
System.out.println("Segundos. "); s1 = in.nextInt();

System.out.println("Digite o tempo de chegada");
System.out.println("Horas."); h2 = in.nextInt();
System.out.println("Minutos. "); m2 = in.nextInt();
System.out.println("Segundos. "); s2 = in.nextInt();

if(h1<24 && h1>=0 && h2<24 && h2>=0 && m1<60 && m1>=0 && m2<60 
&& m2>=0 && s1<60 && s1>=0 && s2<60 && s2>=0)
	 
	 segundos_partida = h1 * 3600 + m1 * 60 + s1;
	 segundos_chegada = h2 * 3600 + m2 * 60 + s2;
	 
	 diferenca = segundos_chegada - segundos_partida;
	 
	 diferenca_horas = diferenca / 3600 ;
	 diferenca_minutos = (diferenca % 3600) / 60 ;
	 diferenca_segundos = diferenca % 60 ;
	 
	System.out.println("Duracao =" +diferenca_horas + diferenca_minutos + diferenca_segundos);
     
	 if(h1>h2 || m1>m2 || s1>s2) 
		System.out.println("Partida superior a chegada");
 
		else System.out.println("Hora inválida");
	
}

}

11 Respostas

igor_ks

Por favor, use as tags code se nao fica impossive de ler

import java.util.*;

public class Viagem {
	
	public static void main (String [] args) {
		Scanner in = new Scanner ( System.in );
		int h1, h2, m1, m2, diferenca, s1, s2, diferenca_horas, diferenca_minutos, diferenca_segundos, segundos_partida, segundos_chegada;
		
		System.out.println("Digite o tempo de partida");
		System.out.println("Hora. "); h1 = in.nextInt();
		System.out.println("Minutos. "); m1 = in.nextInt();
		System.out.println("Segundos. "); s1 = in.nextInt();
		
		System.out.println("Digite o tempo de chegada");
		System.out.println("Horas."); h2 = in.nextInt();
		System.out.println("Minutos. "); m2 = in.nextInt();
		System.out.println("Segundos. "); s2 = in.nextInt();
		
		if(h1<24 && h1>=0 && h2<24 && h2>=0 && m1<60 && m1>=0 && m2<60
			&& m2>=0 && s1<60 && s1>=0 && s2<60 && s2>=0)
		
		segundos_partida = h1 * 3600 + m1 * 60 + s1;
		segundos_chegada = h2 * 3600 + m2 * 60 + s2;
		
		diferenca = segundos_chegada - segundos_partida;
		
		diferenca_horas = diferenca / 3600 ;
		diferenca_minutos = (diferenca % 3600) / 60 ;
		diferenca_segundos = diferenca % 60 ;
		
		System.out.println("Duracao =" +diferenca_horas + diferenca_minutos + diferenca_segundos);
		
		if(h1>h2 || m1>m2 || s1>s2)
			System.out.println("Partida superior a chegada");		
		else 
			System.out.println("Hora inválida");
	}
}
igor_ks

Bom, primeiramente perceba que vc esqueceu de abrir e fechar o if
desta forma, o unico codigo que está no if é a linha abaixo dele

com isso, provavelmente vai dar erros de inicializacao das variaveis, pois precisam estar fora das condicoes

JoaoBluSCBR

Exceto por alguns detalhes teu codigo estah correto.

Fiz algumas mudanças e está funcionando:

import java.util.*;

public class Viagem {

    public static void main(String[] args) {
        Scanner in = new Scanner(System.in);
        int h1, h2, m1, m2, diferenca, s1, s2, diferenca_horas, diferenca_minutos, diferenca_segundos, segundos_partida = 0, segundos_chegada=0;

        System.out.println("Digite o tempo de partida");
        System.out.println("Hora. ");
        h1 = in.nextInt();
        System.out.println("Minutos. ");
        m1 = in.nextInt();
        System.out.println("Segundos. ");
        s1 = in.nextInt();

        System.out.println("Digite o tempo de chegada");
        System.out.println("Horas.");
        h2 = in.nextInt();
        System.out.println("Minutos. ");
        m2 = in.nextInt();
        System.out.println("Segundos. ");
        s2 = in.nextInt();

        if (h1 < 24 && h1 >= 0 && h2 < 24 && h2 >= 0 && m1 < 60 && m1 >= 0 && m2 < 60
                && m2 >= 0 && s1 < 60 && s1 >= 0 && s2 < 60 && s2 >= 0) {
            segundos_partida = h1 * 3600 + m1 * 60 + s1;
            segundos_chegada = h2 * 3600 + m2 * 60 + s2;
        }
        else
        {
            System.out.println("Data inválida!");
            return;
        }

        diferenca = segundos_chegada - segundos_partida;

        diferenca_horas = diferenca / 3600;
        diferenca_minutos = (diferenca % 3600) / 60;
        diferenca_segundos = diferenca % 60;

        

        if (diferenca > 0) {
            System.out.println("ordem correta");
            System.out.println("Duracao =" + diferenca_horas + ":" + diferenca_minutos + ":" + diferenca_segundos);
        } else {
            System.out.println("ordem incorreta");
        }
    }
}
Z

eis o codigo que tenho agora, esta a dar erros quando efectuo os testes que dei como exemplo no 1º post que fiz

import java.util.*;

public class Viagem {
	public static void main (String [] args) {
	Scanner in = new Scanner ( System.in );
	int h1, h2, m1, m2, diferenca, s1, s2, diferenca_horas, diferenca_minutos, diferenca_segundos, segundos_partida, segundos_chegada;
	
	System.out.println("Digite o tempo de partida");
	System.out.println("Hora. "); h1 = in.nextInt();
	System.out.println("Minutos. "); m1 = in.nextInt();
	System.out.println("Segundos. "); s1 = in.nextInt();
	
	System.out.println("Digite o tempo de chegada");
	System.out.println("Horas."); h2 = in.nextInt();
	System.out.println("Minutos. "); m2 = in.nextInt();
	System.out.println("Segundos. "); s2 = in.nextInt();
	
	if(h1<24 && h1>=0 && h2<24 && h2>=0 && m1<60 && m1>=0 && m2<60 
	&& m2>=0 && s1<60 && s1>=0 && s2<60 && s2>=0){
		 
		 segundos_partida = h1 * 3600 + m1 * 60 + s1;
		 segundos_chegada = h2 * 3600 + m2 * 60 + s2;
		 
		 diferenca = segundos_chegada - segundos_partida;
		 
		 diferenca_horas = diferenca / 3600 ;
		 diferenca_minutos = (diferenca % 3600) / 60 ;
		 diferenca_segundos = diferenca % 60 ;
		 
		System.out.println("Duracao = "+diferenca_horas + " : "+diferenca_minutos +" : "+diferenca_segundos);
         }
		 if(h1>h2 || m1>m2 || s1>s2) {
			System.out.println("Partida superior a chegada");
     }
			else System.out.println("Hora inválida");
		
	}
}
Z

sim esta funcionando! muito obrigado JoaoBluSCBR

JoaoBluSCBR
zalo:
eis o codigo que tenho agora, esta a dar erros quando efectuo os testes que dei como exemplo no 1º post que fiz
import java.util.*;

public class Viagem {
	public static void main (String [] args) {
	Scanner in = new Scanner ( System.in );
	int h1, h2, m1, m2, diferenca, s1, s2, diferenca_horas, diferenca_minutos, diferenca_segundos, segundos_partida, segundos_chegada;
	
	System.out.println("Digite o tempo de partida");
	System.out.println("Hora. "); h1 = in.nextInt();
	System.out.println("Minutos. "); m1 = in.nextInt();
	System.out.println("Segundos. "); s1 = in.nextInt();
	
	System.out.println("Digite o tempo de chegada");
	System.out.println("Horas."); h2 = in.nextInt();
	System.out.println("Minutos. "); m2 = in.nextInt();
	System.out.println("Segundos. "); s2 = in.nextInt();
	
	if(h1<24 && h1>=0 && h2<24 && h2>=0 && m1<60 && m1>=0 && m2<60 
	&& m2>=0 && s1<60 && s1>=0 && s2<60 && s2>=0){
		 
		 segundos_partida = h1 * 3600 + m1 * 60 + s1;
		 segundos_chegada = h2 * 3600 + m2 * 60 + s2;
		 
		 diferenca = segundos_chegada - segundos_partida;
		 
		 diferenca_horas = diferenca / 3600 ;
		 diferenca_minutos = (diferenca % 3600) / 60 ;
		 diferenca_segundos = diferenca % 60 ;
		 
		System.out.println("Duracao = "+diferenca_horas + " : "+diferenca_minutos +" : "+diferenca_segundos);
         }
		 if(h1>h2 || m1>m2 || s1>s2) {
			System.out.println("Partida superior a chegada");
     }
			else System.out.println("Hora inválida");
		
	}
}

Claro que esta a dar erros. Tem erros nele. Olhe o codigo que eu postei. Ele nao dah os mesmos erros.

Z

O codigo que postou ja esta a dar! Falta 1 pequeno promenor, dizer quando a hora de partida e superior a ordem de chegada e dizer tambem quando a hora digitada de chegada eh invalida

JoaoBluSCBR

Fiz mais umas pequenas correcoes:

import java.util.*;   
  
public class Viagem {   
  
    public static void main(String[] args) {   
        Scanner in = new Scanner(System.in);   
        int h1, h2, m1, m2, diferenca, s1, s2, diferenca_horas, diferenca_minutos, diferenca_segundos, segundos_partida = 0, segundos_chegada=0;   
  
        System.out.println("Digite o tempo de partida");   
        System.out.println("Hora. ");   
        h1 = in.nextInt();   
        System.out.println("Minutos. ");   
        m1 = in.nextInt();   
        System.out.println("Segundos. ");   
        s1 = in.nextInt();   
  
        System.out.println("Digite o tempo de chegada");   
        System.out.println("Horas.");   
        h2 = in.nextInt();   
        System.out.println("Minutos. ");   
        m2 = in.nextInt();   
        System.out.println("Segundos. ");   
        s2 = in.nextInt();   
  
        if (h1 < 24 && h1 >= 0 && h2 < 24 && h2 >= 0 && m1 < 60 && m1 >= 0 && m2 < 60   
                && m2 >= 0 && s1 < 60 && s1 >= 0 && s2 < 60 && s2 >= 0) {   
            segundos_partida = h1 * 3600 + m1 * 60 + s1;   
            segundos_chegada = h2 * 3600 + m2 * 60 + s2;   
        }   
        else   
        {   
            System.out.println("Data inválida!");   
            return;   
        }   
  
        diferenca = segundos_chegada - segundos_partida;   
  
        diferenca_horas = diferenca / 3600;   
        diferenca_minutos = (diferenca % 3600) / 60;   
        diferenca_segundos = diferenca % 60;   
  
           
  
        if (diferenca > 0) {   
            System.out.println("ordem correta");   
            System.out.println("Duracao =" + diferenca_horas + ":" + diferenca_minutos + ":" + diferenca_segundos);   
        } else {   
            System.out.println("ordem incorreta");   
        }   
    }   
}
JoaoBluSCBR

Bem, quanto a isso é só mudar a frase, onde diz “Ordem incorreta”, mude para a frase que desejar.

Quanto a data inválida está no último código que postei.

Mas sinceramente falando, se você não consegue fazer essas pequenas modificacoes necessarias, creio que deveria estudar mais.

JoaoBluSCBR

Nao sei quem lhe pediu este exercicio, mas vale lembrar, que quando as
horas estão invertidas, poderiam ser de dias contíguos e então poderia
ser calculado da primeira hora até o final do dia e depois até a segunda hora.

por exemplo:

17:12:45 a 06:08:24

podem ser horarios validos, o primeiro iniciando no final de um dia e o segundo terminando na manha do seguinte.

Nesse caso o calculo deveria ser assim:

17:12:45 a 24:00:00
e
00:00:00 a 06:08:24

Nunca haveriam datas em ordem incorretas e sim a necessidade de um segundo processo de calculo.

Z

Ja resolvi o problema! foi apenas fazer mais 1 if e meter mais 1 output a dizer que a partida e superior a chegada! obrigado pela ajuda

Criado 20 de outubro de 2011
Ultima resposta 20 de out. de 2011
Respostas 11
Participantes 3