学校要求我在java中进行时钟模拟,用户设置初始时间(例如:12:34:56),结束时间必须大于初始时间(例如:13:34) :56)程序只会打印时钟中的每一个变化,直到达到结束时间为止,到目前为止我已完成所有这些:(忽略西班牙语单词)
import java.util.Scanner;
public class Examen {
public static void main(String[] args) {
Scanner t= new Scanner (System.in);
int inhora, inmin, inseg, finhora, finmin, finseg;
do
{
System.out.println("Ingresa una hora de inicio:");
inhora=t.nextInt();
if (inhora <0 || inhora>=24)
System.out.println("Hora incorrecta");
}
while (inhora <0 || inhora>=24);
do
{
System.out.println("Ingresa el minuto de inicio:");
inmin=t.nextInt();
if (inmin <0 || inmin>=60)
System.out.println("Minuto incorrecto");
}
while (inmin <0 || inmin>=60);
do
{
System.out.println("Ingresa el segundo de inicio:");
inseg=t.nextInt();
if (inseg <0 || inseg>=60)
System.out.println("Segundo incorrecto");
}
while (inseg <0 || inseg>=60);
System.out.println("Hora de inicio ingresada: "+inhora+":"+inmin+":"+inseg);
do
{
System.out.println("Ingresa una hora de finalización:");
finhora=t.nextInt();
if (finhora <0 || finhora>=24)
System.out.println("Hora incorrecta");
if (finhora<inhora)
System.out.println("La hora final tiene que ser mayor que la inicial");
}
while (finhora <0 || finhora>=24);
do
{
System.out.println("Ingresa el minuto de finalización:");
finmin=t.nextInt();
if (finmin <0 || finmin>=60)
System.out.println("Minuto incorrecto");
}
while (finmin <0 || finmin>=60);
do
{
System.out.println("Ingresa el segundo de finalización:");
finseg=t.nextInt();
if (finseg <0 || finseg>=60)
System.out.println("Segundo incorrecto");
}
while (finseg <0 || finseg>=60);
System.out.println("Hora final ingresada: "+finhora+":"+finmin+":"+finseg);
do
{
System.out.println(inhora+":"+inmin+":"+inseg);
inseg++;
if (inseg>59)
{
inseg=0;
inmin++;
}
if (inmin>59)
{
inmin=0;
inhora++;
}
if (inhora>23)
{
inhora=0;
}
} while (inhora!=finhora);
}
}
我的问题是在最后的“同时”我不知道我应该把哪个条件放在那里以完成我的目标,这个“while(inhora!= finhora);”我得到的是(例如:初始时间0:0:0结束时间23:59:59)时钟的所有变化,直到22:59:59
答案 0 :(得分:1)
您过早地突破do-while
循环并在增加之前打印时间值。将循环更改为此可以解决问题:
do {
inseg++;
// clipped out the min/hour incrementing code
System.out.println(inhora+":"+inmin+":"+inseg);
} while (inhora < finhora || inmin < finmin || inseg < finseg);
请注意,由于短路,我们需要OR
按此特定顺序评估小时,分钟和秒。这意味着inmin < finmin
仅在inhora < finhora
为false
等时才会被评估。