Java时钟模拟,不知道如何进行do...while
Java Clock simulation, don't know how to proceed with do...while
我在学校被要求在 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" 我不知道我应该把哪个条件放在那里才能完成我的目标任务,有了这个 "while (inhora!=finhora);" 我得到的只是(例如:初始时间0:0:0结束时间23:59:59)时钟的所有变化直到22:59:59
您过早地退出 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
时才被评估,等等
我在学校被要求在 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" 我不知道我应该把哪个条件放在那里才能完成我的目标任务,有了这个 "while (inhora!=finhora);" 我得到的只是(例如:初始时间0:0:0结束时间23:59:59)时钟的所有变化直到22:59:59
您过早地退出 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
时才被评估,等等