当前位置: 首页 > 知识库问答 >
问题:

用Java创建时间类

景昊焜
2023-03-14

因此,我的任务是创建一个 Time 类,该类保存一小时值和一分钟值来表示时间。我将使用“军事时间”,因此12:01 am是0001,1 pm是1300。我可以假设有效的军事时间范围从0000到2359。有效标准时间范围为上午 12:00 至晚上 11:59。时间应包括两个构造函数:

Time() -将时间设置为1200的默认构造函数。Time(int h,int m) -如果h介于1和23之间,则将小时设置为h。否则,将小时设置为0。如果m介于0和59之间,则将分钟数设置为m,否则,将分钟数设置为0。时间应包括以下方法:

String toString() - 以长度为 4 的字符串形式返回时间,html" target="_blank">格式为:0819。请注意,如果小时或分钟是一位数字,则应首先打印零。例如,6 应打印为 06。

String convert() -以从军用时间转换为标准时间的字符串形式返回时间。比如0545变成了上午5:45,1306变成了下午1:06。

void increment() - 将时间提前一分钟。请记住,60 分钟 = 1 小时。因此,如果您的时间是 0359,并且您添加了一分钟,则它将变为 0400。2359 应递增到 0000。

这是我写的(除了main方法):

import java.io.IOException;

public class Time
{

    private int hour;
    private int minute;
    public Time()
    {
        hour = 12;
        minute = 0;
    }


    public Time(int h, int m)
    {
        if ( h >= 1 && h <= 23)
            h = hour;
        else 
            hour = 0;
        if ( m >= 0 && m <= 59)
            m = minute;
        else 
            minute = 0;
    }

    public String toString()
    {
        String s = "";
        if ( hour < 10 && minute < 10)
            s = "0" + hour + "0" + minute;
        else if ( hour < 10 && minute > 10)
            s = "0" + hour + minute;
        else if ( hour > 10 && minute < 10)
            s = hour + "0" + minute;
        else if ( hour == 0)
            s = "0" + hour + minute;
        else if ( minute == 0)
            s = hour + "0" + minute;

        return s;

    }

    public String convert()
    {
        String c = "";
        if ( hour > 12)
            c = "0" + (24 - hour) + minute + "pm";
        else
            c = hour + minute + "am";
        return c;
    }

    public void increment()
    {
        minute++;
        if (minute == 60)
        {
            hour++;
            minute = 0;
        }
        else if ( hour == 24)
            hour = 0;

    }

     public static void main(String str[]) throws IOException
     {

      Time time1 = new Time(14, 56);
      System.out.println("time1: " + time1);
      System.out.println("convert time1 to standard time: " + time1.convert());
      System.out.println("time1: " + time1);
      System.out.print("increment time1 five times: ");
      time1.increment();
      time1.increment();
      time1.increment();
      time1.increment();
      time1.increment();
      System.out.println(time1 + "\n");

      Time time2 = new Time(-7, 12);
      System.out.println("time2: " + time2);
      System.out.print("increment time2 67 times: ");
      for (int i = 0; i < 67; i++)
       time2.increment();
      System.out.println(time2);
      System.out.println("convert to time2 standard time: " + time2.convert());
      System.out.println("time2: " + time2 + "\n");


      Time time3 = new Time(5, 17);
      System.out.println("time3: " + time3);
      System.out.print("convert time3: ");
      System.out.println(time3.convert());

      Time time4 = new Time(12, 15);
      System.out.println("\ntime4: " + time4);
      System.out.println("convert time4: " + time4.convert());

      Time time5 = new Time(0, 15);
      System.out.println("\ntime5: " + time5);
      System.out.println("convert time5: " + time5.convert());

      Time time6 = new Time(24, 15);
      System.out.println("\ntime6: " + time6);
      System.out.println("convert time6: " + time6.convert());

      Time time7 = new Time(23,59);
      System.out.println("\ntime7: " + time7);
      System.out.println("convert time7: " + time7.convert());
      time7.increment();
      System.out.println("increment time7: " + time7);
      System.out.println("convert time7: " + time7.convert());

     }

}

产出应如下:

time1: 1456
convert time1 to standard time: 2:56 pm
time1: 1456
increment time1 five times: 1501

time2: 0012
increment time2 67 times: 0119
convert to time2 standard time: 1:19 am
time2: 0119

time3: 0517
convert time3: 5:17 am

time4: 1215
convert time4: 12:15 pm

time5: 0015
convert time5: 12:15 am

time6: 0015
convert time6: 12:15 am

time7: 2359
convert time7: 11:59 pm
increment time7: 0000
convert time7: 12:00 am

我目前的输出是:

time1: 0000
convert time1 to standard time: 0am
time1: 0000
increment time1 five times: 0005

time2: 0000
increment time2 67 times: 0107
convert to time2 standard time: 8am
time2: 0107

time3: 0000
convert time3: 0am

time4: 0000
convert time4: 0am

time5: 0000
convert time5: 0am

time6: 0000
convert time6: 0am

time7: 0000
convert time7: 0am
increment time7: 0001
convert time7: 1am

我的编译器告诉我到处都有问题,我不知道在哪里。如果有人能帮我看看出了什么问题,那就太好了。谢谢大家!

共有3个答案

司徒钱青
2023-03-14

您的问题在构造函数、toString()和转换()方法中。

相应的代码更改是:

public MultiLevel(int h, int m)
{
    if ( h >= 1 && h <= 23)
        hour = h;
    else 
        hour = 0;
    if ( m >= 0 && m <= 59)
        minute = m;
    else 
        minute = 0;
}

public String toString()
{
    String s = "";
    if ( hour < 10 && minute < 10)
        s = "0" + hour + "0" + minute;
    else if ( hour < 10 && minute > 10)
        s = "0" + hour + minute;
    else if ( hour > 10 && minute < 10)
        s = hour + "0" + minute;
    else if ( hour > 10 && minute > 10)
        s = hour  +""+ minute;
    else if ( hour == 0)
        s = "0" + hour + minute;
    else if ( minute == 0)
        s = hour + "0" + minute;

    return s;

}

public String convert()
{
    String c = "";

    if ( hour > 12)
    {
        if(hour >10){
            if((hour - 12) == 12)
                 c = (hour - 12) +":"+ minute + "am";
            else
               c = (hour - 12) +":"+ minute + "pm";
        }
        else
        {
            c = "0" + (hour - 12) +":"+ minute + "pm";
        }
    }
    else
        c = hour +":"+ minute + "am";
    if(minute == 0)
    {
        c= c.substring(0, c.length()-2)+"0"+c.substring(c.length()-2, c.length());
    }
    return c;
}
赵英资
2023-03-14

构造函数赋值被反转,如前面的答案中所述。

另外,您的toString方法,在您执行s=小时分钟的地方添加一个终极其他子句;

郑景胜
2023-03-14

构造函数的问题,您没有将值分配给类变量,而是分配给方法变量,这就是您的代码的样子,

public Time(int h, int m)
    {
        if ( h >= 1 && h <= 23)
            h = hour;
        else 
            hour = 0;
        if ( m >= 0 && m <= 59)
            m = minute;
        else 
            minute = 0;
    }

请使用下面的时间构造函数,

public Time(int h, int m)
        {
            if ( h >= 1 && h <= 23)
                hour =h;
            else
                hour = 0;
            if ( m >= 0 && m <= 59)
                minute = m;
            else
                minute = 0;
        }
 类似资料:
  • 问题内容: 我用Java编写了一个小的复制工具,用于复制USB记忆棒上的.mp3文件。复制新文件时,会保留一些文件属性,但不会保留创建时间。 要复制文件,我使用: 所以我的问题是,有没有办法节省文件创建时间?如果没有,我想我建立了一个用Windows robocopy复制的类。 问题答案: 如果您使用的是Java 7+,则可以使用: 如果那没有复制创建时间(在我的机器上也是如此),您也可以手动设置

  • 创建时间Created Created可以让您在数据插入到数据库时自动将对应的字段设置为当前时间,需要在xorm标记中使用created标记,如下所示进行标记,对应的字段可以为time.Time或者自定义的time.Time或者int,int64等int类型。 type User struct { Id int64 Name string CreatedAt time.Ti

  • 考虑代码: 最后一行抛出一个异常: 如何从模式创建?

  • 问题内容: 我需要在Java中创建一个时间戳(以毫秒为单位),以确保在特定的VM实例中是唯一的。即需要某种方式来限制System.currentTimeMillis()的吞吐量,以便它每毫秒最多返回一个结果。关于如何实施的任何想法? 问题答案: 这样可以使时间尽可能接近当前时间,而不重复。 避免每毫秒限制一个id的一种方法是使用微秒级的时间戳。例如,将currentTimeMS乘以1000。这将允

  • 问题内容: 假设我在, 我想抽出时间来创作。是否有类似的东西 ? 问题答案: Redis不存储此信息。 您可以使用单独的密钥:

  • 我正在尝试生成一个分辨率为微秒的时间戳。我试着用这个答案提取年/月/日等,来自C++中的std::chrono::time_point,还有这个:C++11实际系统时间(毫秒),但我不确定这样做是否正确: 该代码的输出为: 324760155[2019-09-15 10:09:13.324.324760][2019-09-15 10:09:13.324.324760]