Galera, boa tarde.
Sou iniciante em java, e tô tentando criar um despertador APENAS com o que já aprendi, que é o que consta no código abaixo.
Porém, estou recebendo erro ao tentar utilizar WHILE.
A lógica seria que enquanto horaatual for diferente de horareal E minutoatual for diferente de minutoreal, o programa não faz nada e, SE horaatual for igual horareal E minutoatual for igual a minutoreal, o programa imprime uma mensagem no console.
Podem me ajudar a achar onde está errado?
package teste;
import java.util.Scanner;
public class Teste {
publicstaticvoidmain(String[]args){longtotalMilisegundos=System.currentTimeMillis()-10800000;longtotalSegundos=totalMilisegundos/1000;longsegundosAtual=totalSegundos%60;longtotalMinutos=totalSegundos/60;longminutosAtual=totalMinutos%60;longtotalHoras=totalMinutos/60;longhorasAtual=totalHoras%24;longhorasAtualVerao=horasAtual+1;System.out.println("Horário Atual: "+horasAtualVerao+":"+minutosAtual+":"+segundosAtual);Scannerinput=newScanner(System.in);System.out.println("Digite a hora para despertar:");longhora=input.nextLong();System.out.println("Digite os minutos para despertar:");longminutos=input.nextLong();System.out.println("Você configurou o despertador para: "+hora+":"+minutos);System.out.println("Digite a tarefa à agendar:");Stringagenda=input.next();longx=0;while(horasAtualVerao!=hora&x=0){}if(horasAtualVerao=hora||minutosAtual=minutos){System.out.println(agenda);longx=1;}}}
me desculpe se eu entendi errado, mas se for, por favor explique com mais detalhes.
Gabriel_Querichelli
Não tenho certeza se o IF - ELSE deve ficar dentro do loop neste caso.
Na minha lógica (que nem sei se está correta), o programa deveria ficar em LOOP enquanto a hora e o minuto atual forem diferentes do informado pelo usuário e “sair do loop”, ou seja, executar o Syso(agenda) quando, e apenas SE a hora e o mínuto forem iguais aos informados.
A variável X foi criada apenas pra parar o programa quando o IF for executado, desta forma, eu escolho a HORA, o MINUTO e escrevo uma frase que será mostrada quando essa hora e minuto chegar na vida real, tipo um agendador de tarefas.
A principal dúvida além da sintaxe é se o While, If e Else estão com a lógica correta para a aplicação.
Utilizei a primeira opção, porém ele fica em loop pra sempre, não executa o if depois… nao sei se é algum problema com o IF ou com o while /=
SamuelLira99
se o if não foi executado é porque a condição não foi satisfeita.
coloca dentro do while mas fora do if um println com as quatro variáveis pra termos certeza que estão iguais:
porque só vai entrar no if se as duas condições forem satisfeitas
Gabriel_Querichelli
Fiz alguns testes aqui.
Se eu colocar exatamente a hora real, no campo que o usuário escolhe a hora, e o mesmo para os minutos, o programa roda.
Acredito que o programa não esteja atualizando a hora real no método criado no começo.
Exemplo:
o programa vê o horario de acordo com a era Unix, e depois ele roda o while até que a hora UNIX que ele leu seja igual a criada pelo usuário, porém ele não atualiza essa hora unix constantemente, apenas na execução do programa.
Acredito que tenha que incluir o método pra verificar o horário dentro de um loop, procede ?
SamuelLira99
a hora e todas as outras variaveis são definidas corretamente no inicio do programa?
Gabriel_Querichelli
Sim, olha o programa:
package teste;
import java.util.Scanner;
public class Teste {
publicstaticvoidmain(String[]args){longtotalMilisegundos=System.currentTimeMillis()-10800000;longtotalSegundos=totalMilisegundos/1000;longsegundosAtual=totalSegundos%60;longtotalMinutos=totalSegundos/60;longminutosAtual=totalMinutos%60;longtotalHoras=totalMinutos/60;longhorasAtual=totalHoras%24;longhorasAtualVerao=horasAtual+1;System.out.println("Horário Atual: "+horasAtualVerao+":"+minutosAtual+":"+segundosAtual);Scannerinput=newScanner(System.in);System.out.println("Digite a hora para despertar:");longhora=input.nextLong();System.out.println("Digite os minutos para despertar:");longminutos=input.nextLong();System.out.println("Digite a tarefa à agendar:");Stringagenda=input.next();System.out.println("Você configurou o despertador para "+hora+"h"+minutos+"m para realizar a tarefa: "+agenda+".");while(true){if(horasAtualVerao==hora||minutosAtual==minutos){System.out.println("Você agendou a tarefa abaixo para "+horasAtualVerao+"h"+minutosAtual+"m .");System.out.println("Tarefa: "+agenda+".");break;}}}
}
Gabriel_Querichelli
Tenho quase certeza que o problema está no fato de que a hora está sendo gerada apenas no inicio do programa, e fica estática, o programa não lê de novo o método.
SamuelLira99
se for questão de estar sempre atualizando a hora, tente desse jeito:
packageteste;importjava.util.Scanner;publicclassTeste{publicstaticvoidmain(String[]args){longtotalMilisegundos;longtotalSegundos;longsegundosAtual;longtotalMinutos;longminutosAtual;longtotalHoras;longhorasAtual;longhorasAtualVerao;System.out.println("Horário Atual: "+horasAtualVerao+":"+minutosAtual+":"+segundosAtual);Scannerinput=newScanner(System.in);System.out.println("Digite a hora para despertar:");longhora=input.nextLong();System.out.println("Digite os minutos para despertar:");longminutos=input.nextLong();System.out.println("Digite a tarefa à agendar:");Stringagenda=input.next();System.out.println("Você configurou o despertador para "+hora+"h : "+minutos+"m para realizar a tarefa: "+agenda+".");while(true){totalMilisegundos=System.currentTimeMillis()-10800000;totalSegundos=totalMilisegundos/1000;segundosAtual=totalSegundos%60;totalMinutos=totalSegundos/60;minutosAtual=totalMinutos%60;totalHoras=totalMinutos/60;horasAtual=totalHoras%24;horasAtualVerao=horasAtual+1;if(horasAtualVerao==hora&&minutosAtual==minutos){// se vc usar || ele vai entrar mesmo que só 1 dsas condições seja verdadeiraSystem.out.println("Você agendou a tarefa abaixo para "+horasAtualVerao+"h"+minutosAtual+"m .");System.out.println("Tarefa: "+agenda+".");break;}}}}
Gabriel_Querichelli
Não funciona… ele finaliza o programa conforme abaixo:
Digite a hora para despertar:
17
Digite os minutos para despertar:
42
Digite a tarefa à agendar:
teste
Você configurou o despertador para 17h42m para realizar a tarefa: teste.
Você agendou a tarefa abaixo para 17h40m .
Tarefa: teste.
Gabriel_Querichelli
Por algum motivo agora o programa recebe a variável do usuário mas desconsidera ela.
Solucao aceita
Gabriel_Querichelli
Consegui, velho!
Fiz umas mudanças aqui, e ficou assim:
package teste;
import java.util.Scanner;
public class Teste {
publicstaticvoidmain(String[]args){Scannerinput=newScanner(System.in);System.out.println("Digite a hora para despertar:");longhora=input.nextLong();System.out.println("Digite os minutos para despertar:");longminutos=input.nextLong();System.out.println("Digite a tarefa à agendar:");Stringagenda=input.next();while(true){longtotalMilisegundos=System.currentTimeMillis()-10800000;longtotalSegundos=totalMilisegundos/1000;longsegundosAtual=totalSegundos%60;
long totalMinutos = totalSegundos / 60; long minutosAtual = totalMinutos % 60;
Fico feliz em ajudar, eu executei aqui ficou legal, mas se vc quiser uma sugestão, só pra não parecer que o programa ficou parado, adicione um println dizendo que deu certo: