Java时钟模拟,不知道如何继续做...同时

时间:2015-04-22 00:13:21

标签: java while-loop 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(inhora!= finhora);”我得到的是(例如:初始时间0:0:0结束时间23:59:59)时钟的所有变化,直到22:59:59

1 个答案:

答案 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 < finhorafalse等时才会被评估。