2021-04-15

2 篇文章 0 订阅


一、题目

2.创建一个Time类,具有以下成员:
(1)int类型字段hour, minute, second;
(2)int类型属性Hour, Minute, Second,其中,要求在set访问器对用户提供的值进行校验,Hour在0-23之间,Minute和Second均在0-59之间。被赋其它值时抛出异常,抛出方法:
throw new ArgumentOutOfRangeException(nameof(value), value,
$"{nameof(Hour)} must be 0 - 23");
(3)编写无参构造函数和三参构造函数。无参构造函数调用三参构造函数。为参数提供默认值0;
(4)编写Time Next(int hour, int minute, int second)函数,在现有时间上加上参数指定时间段后,返回新的时间信息;
(5)编写string ToUniversalString()方法,输出24时制的时分秒信息;
(6)编写string ToString()方法,加上override修饰,输出12时制的时间信息,并添加AM和PM后缀。

二、测试

1.测试代码如下

代码如下(示例):

var t1 = new Time2();
var t2 = new Time2(2);
var t3 = new Time2(21, 34);
var t4 = new Time2(12, 25, 42);
var t5 = new Time2(t4);
t5.Hour = 15;
var t6 = t5.Next(10, 40, 0);
Console.WriteLine("t1:");
Console.WriteLine($"{t1.ToUniversalString()}");
Console.WriteLine($"{t1.ToString()}\n");
Console.WriteLine("t2:");
Console.WriteLine($"{t2.ToUniversalString()}");
Console.WriteLine($"{t2.ToString()}\n");
Console.WriteLine("t3:");
Console.WriteLine($"{t3.ToUniversalString()}");
Console.WriteLine($"{t3.ToString()}\n");
Console.WriteLine("t4:");
Console.WriteLine($"{t4.ToUniversalString()}");
Console.WriteLine($"{t4.ToString()}\n");
Console.WriteLine("t5:");
Console.WriteLine($"{t5.ToUniversalString()}");
Console.WriteLine($"{t5.ToString()}\n");
Console.WriteLine("t6:");
Console.WriteLine($"{t6.ToUniversalString()}");
Console.WriteLine($"{t6.ToString()}\n");

2.测试结果

测试输出结果:

在这里插入图片描述

三、运行代码如下:

using System;

namespace Time
{
    class Time
    {
        private int hour;
        private int minute;
        private int seconds;

        public int Hour
        {
            get{return hour;}
            set
            {
                if (hour >= 0 && hour <= 23)
                {
                    hour = value;
                }
                else
                    throw new ArgumentOutOfRangeException(nameof(hour), hour, $"{nameof(hour)} must be 0 - 23");
            }
        }
        public int Minute
        {
            get { return minute; }
            set
            {
                if (minute >= 0 && minute <= 59)
                {
                   minute=value;
                }
                else
                    throw new ArgumentOutOfRangeException(nameof(minute), minute, $"{nameof(minute)} must be 0 - 59");

            }
        }
        public int Second
        {
            get { return seconds; }
            set
            {
                if (seconds >= 0 && seconds <= 59)
                {
                    seconds = value;
                }
                else
                {
                    throw new ArgumentOutOfRangeException(nameof(seconds), seconds, $"{nameof(seconds)} must be 0 - 59");
                }
            }
        }
        public  Time(int hour_Input=0,int minute_Input=0,int seconds_Input=0)
        {
            hour = hour_Input;
            minute = minute_Input;
            seconds = seconds_Input;
        }

        /*
         * 因为构造函数是public,并且没有static,但是在类中我们又无法进行实例化,所以考虑类似继承的写法
         */
        public Time():this(0,0,0)
        {

        }
        public Time(Time time) :this(time.Hour,time.Minute,time.Second)
        {

        }
        public Time Next(int hour,int minute,int seconds)
        {
            /*
             * 因为你要考虑用户加上的时间可能很多,会产生溢出,要做进位处理,提高代码的健壮性
             */
            return new Time((Hour + hour+(Minute + minute) / 60) % 24, (Minute + minute+ (Second + seconds) / 60) % 60, (Second + seconds) % 60);
        }
        public string ToUniversalString()
        {
            string time = hour + ":" + minute + ":" + seconds;
            return time;
        }
        public override string ToString()
        {
            /*
             * 重写ToString,返回12小时制
             */
            String time_String;
            time_String = hour > 12 ? hour - 12 + ":" + Minute + ":" + Second + "P.M" : hour + ":" + Minute + ":" + Second + "A.M";
            return time_String;
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            var t1 = new Time();
            var t2 = new Time(2);
            var t3 = new Time(21, 34);
            var t4 = new Time(12, 25, 42);
            var t5 = new Time(t4);//采用重新书写构造函数和利用字段的get属性进行解决
            t5.Hour = 15;
            var t6 = t5.Next(10, 40, 0);
            Console.WriteLine("t1:");
            Console.WriteLine($"{t1.ToUniversalString()}");
            Console.WriteLine($"{t1.ToString()}\n");
            Console.WriteLine("t2:");
            Console.WriteLine($"{t2.ToUniversalString()}");
            Console.WriteLine($"{t2.ToString()}\n");
            Console.WriteLine("t3:");
            Console.WriteLine($"{t3.ToUniversalString()}");
            Console.WriteLine($"{t3.ToString()}\n");
            Console.WriteLine("t4:");
            Console.WriteLine($"{t4.ToUniversalString()}");
            Console.WriteLine($"{t4.ToString()}\n");
            Console.WriteLine("t5:");
            Console.WriteLine($"{t5.ToUniversalString()}");
            Console.WriteLine($"{t5.ToString()}\n");
            Console.WriteLine("t6:");
            Console.WriteLine($"{t6.ToUniversalString()}");
            Console.WriteLine($"{t6.ToString()}\n");
        }
    }
}

四、输出结果如下:

在这里插入图片描述


难点总结

1.C#一个类有多个构造方法时,因为构造函数是public,并且没有static,但是在类中我们又无法进行实例化,所以考虑类似继承的写法

2.让用户增加时间时要考虑进位的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值