Programa De Relógio Java
eu estou tentando fazer um programa de relógio usando Java, e eu tenho tudo para funcionar corretamente, exceto que eu não consigo fazer o programa mudar os valores negativos para 0. Eu também não posso obter o programa para definir os valores de horas, minutos e segundos para 0 se eles estão fora de alcance. Tenho um programa de testes que tenho de usar e os valores do relógio T1 e T2 estão incorrectos no meu código. T1 deve ser 0: 0: 0 e T2 deve ser 0: 0: 0 também. No entanto, quando eu output meu código ele sai como T1 sendo -3: -21: -30 e o T2 é 24: 60: 60. Sei que há algo de errado com o meu código, mas não consigo encontrar o problema, se alguém me pudesse ajudar isso seria muito apreciado. Abaixo está o meu código e depois a segunda secção é o código de teste que tenho de usar.
public class Clock
{
// instance variables
private int hours;
private int minutes;
private int seconds;
public void setHours(int newHours) {
hours = newHours;
if (hours<0 || hours > 24) {
hours = 0;
}
}
public void setMinutes(int newMinutes) {
minutes = newMinutes;
if (minutes<0 || minutes > 60) {
minutes = 0;
}
}
public void setSeconds(int newSeconds) {
seconds = newSeconds;
if(seconds<0 || seconds > 60) {
seconds = 0;
}
}
/**
* Constructor for objects of class Clock
*/
public Clock(int newHour, int newMinute, int newSecond)
{
if (newHour > -1 || newHour < 24) {
this.hours = newHour;
}
else {
setHours(hours);
}
if (newMinute > -1 || newMinute < 60) {
this.minutes = newMinute;
}
else {
setMinutes(minutes);
}
if (newSecond > -1 || newSecond < 60) {
this.seconds = newSecond;
}
else {
setSeconds(seconds);
}
}
public int getHours() {
return hours;
}
public int getMinutes() {
return minutes;
}
public int getSeconds() {
return seconds;
}
public String toString() {
return hours + ":"+minutes+":"+seconds;
}
public void tick() {
seconds = seconds +1;
if(seconds >= 60)
{
minutes ++;
seconds = 0;
}
if(minutes >= 60)
{
hours++;
minutes = 0;
}
if(hours >=24)
{
hours = 0;
}
}
} A próxima peça é o código de teste.
public class ClockTest {
public static void main(String [] args){
//Create some clocks and print their times
Clock c1 = new Clock(-3,-21,-30);
System.out.println("T1: "+ c1);
c1 = new Clock(24,60,60);
System.out.println("T2: "+ c1);
c1 = new Clock(3,21,30);
System.out.println("T3: "+ c1);
//Tick the clock twice and print its time
c1.tick();
c1.tick();
System.out.println("T4: "+ c1);
c1 = new Clock(3,30,59);
c1.tick();
System.out.println("T5: "+ c1);
c1 = new Clock(3,59,59);
c1.tick();
System.out.println("T6: "+ c1);
c1 = new Clock(23,59,59);
c1.tick();
System.out.println("T7: "+ c1);
c1 = new Clock(0,0,1);
c1.tick();
System.out.println("T8: "+ c1);
c1 = new Clock(1,1,1);
c1.setHours(22);
c1.setMinutes(30);
c1.setSeconds(35);
System.out.println("T9: "+ c1);
System.out.println("T10: " + c1.getHours() + ":"
+c1.getMinutes() + ":" + c1.getSeconds());
}
}
2 answers
if (newHour > -1 || newHour < 24) {
Estás a falar a sério:
if (newHour > -1 && newHour < 24) {
@nicomp está correcto e você também deve usar > = 24 e 60 em vez de >. Você pode considerar mudar o construtor para relógio para
public Clock(int newHour, int newMinute, int newSecond) {
setHours(newHour);
setMinutes(newMinute);
setSeconds(newSecond);
}
E depois fazer toda a sua validação nos métodos definidos, em vez de ter alguma validação nos métodos definidos e alguns no construtor.