C#笔记-04

这篇博客介绍了C#编程中的一些基本概念和技术,包括方法的重载用于时间转换,递归计算阶乘,数组的操作如初始化、遍历、查找、排序,以及如何使用foreach和var关键字。此外,还展示了如何创建和比较双色球彩票号码,涉及随机数生成和数组的独特应用。
摘要由CSDN通过智能技术生成

方法重载

天数小时分钟换算秒使用重载代码示例

namespace day4
{
    class Program
    {
        // 方法的重载
        static void Main(string[] args)
        {
            int second1 = GetTotalSecond(5, 5, 5);
            Console.WriteLine(second1);
            Console.ReadLine();
        }

        /// <summary>
        /// 时间换算:分钟到秒
        /// </summary>
        /// <param name="minute">分钟</param>
        /// <returns>秒</returns>
        private static int GetTotalSecond(int minute)
        {
            return minute * 60;
        }
        /// <summary>
        /// 时间换算:小时分钟到秒
        /// </summary>
        /// <param name="hour">小时</param>
        /// <param name="minute">分钟</param>
        /// <returns>秒</returns>
        private static int GetTotalSecond(int hour,int minute)
        {
            return GetTotalSecond(minute + hour * 60);
        }
        /// <summary>
        /// 时间换算:天数小时分钟到秒
        /// </summary>
        /// <param name="day">天数</param>
        /// <param name="hour">小时</param>
        /// <param name="minute">分钟</param>
        /// <returns>秒</returns>
        private static int GetTotalSecond(int day,int hour,int minute)
        {
            return GetTotalSecond(hour + day * 24, minute);
        }
    }
}

递归

将一个复杂的问题简单化,交给子问题

递归方法计算阶乘代码示例

        // 递归
        static void Main()
        {
            // 阶乘问题使用递归解决
            int total = GetFactorial(10);
            Console.WriteLine(total);
            Console.ReadLine();
        }
        /// <summary>
        /// 递归计算阶乘
        /// </summary>
        /// <param name="num">数</param>
        /// <returns>阶乘结果</returns>
        private static int GetFactorial(int num)
        {
            if (num == 1) return 1;
            return num * GetFactorial(num - 1);
        }

数组

代码例子

        // 数组
        static void Main()
        {
            int[] a;
            // 初始化 new 数据类型[容量]
            a = new int[6];
            for (int i = 0; i < a.Length; i++)
            {
                a[i] = i + 1;
                Console.WriteLine(a[i]);
            }
            Console.ReadLine();

            // 数组其他写法
            // 初始化 + 赋值
            string[] array1;
            array1 = new string[2] {"a", "b"};
            // 声明 + 初始化 + 赋值
            bool[] aray2 = {true, true, false};
        }

录入学生成绩,找到最高分

代码例子

        // 录入学生成绩,找到最高分
        static void Main()
        {
            float[] scoreArray = CreatScoreArray();
            float maxScore = GetMax(scoreArray);
            Console.WriteLine(maxScore);
            Console.ReadLine();
        }
        
        /// <summary>
        /// 录入学生成绩,去除不合理成绩
        /// </summary>
        /// <returns>成绩列表</returns>
        private static float[] CreatScoreArray()
        {
            Console.WriteLine("请输入学生总数:");
            int count = int.Parse(Console.ReadLine());
            float[] scoreArray;
            scoreArray = new float[count];
            for (int i = 0; i < count;)
            {
                Console.WriteLine("请输入第{0}个学生的成绩:",i+1);
                float score = float.Parse(Console.ReadLine());
                if (score >= 0 && score <= 100)
                    scoreArray[i++] = score;
                else
                    Console.WriteLine("输入成绩有误");
            }

            return scoreArray;
        }

        /// <summary>
        /// 找数组的最大值
        /// </summary>
        /// <param name="array">数组</param>
        /// <returns>最大值</returns>
        private static float GetMax(float[] array)
        {
            float max = array[0];
            for (int i = 0; i < array.Length; i++)
            {
                if (max < array[i])
                {
                    max = array[i];
                }
            }

            return max;
        }

foreach

        static void Main()
        {
            //foreach(元素类型 变量名 in 数组名称)
            //{ 变量名 即 数组每一个元素}
            // 从头到尾依次读取元素
            int[] array = new int[5] {1, 2, 3, 4, 5};
            foreach (int item in array)
            {
                Console.WriteLine(item);
            }
        }

推断类型 var

父类类型 声明Array 赋值子类对象

Array array01 = new int[2]        方法(参数类型可用Array)

万类之祖 声明Object 赋值 任意类型

数组常用方法

        static void Main()
        {
            int[] array01 = {0, 1, 2, 6, 5, 4, 6}; 
            int[] array02 = {0, 1, 2, 3, 4, 5, 6}; 
            // 数组长度 数组名.Length
            int length = array01.Length;
            // 清除元素 Array.Clear  删掉的元素替换为初值
            Array.Clear(array02,3,2);
            for (int i = 0; i < length; i++)
                Console.Write(array02[i]);
            Console.WriteLine();
            // 复制元素 Array.Copy  数组名.CopyTo
            int[] array03 = new int[10];
            Array.Copy(array01,array03,4);
            for (int i = 0; i < array03.Length; i++)
                Console.Write(array03[i]);
            // 克隆 数组名.Clone
            int[] obj = (int[])array01.Clone();
            // 查找元素 Array.IndexOf    Array.LastIndexOf  
            int index1 = Array.IndexOf(array01, 6);
            Console.WriteLine();
            Console.WriteLine(index1);
            int index2 = Array.LastIndexOf(array01, 6);
            Console.WriteLine(index2);
            // 排序 Array.Sort
            Array.Sort(array01);
            // 反转 Array.Reverse
            Array.Reverse(array01);
        }

随机生成一组双色球数字的方法

代码示例

        /* 双色球代码
         * 红球:1~33  6
         * 蓝球:1~16  1
         * (1) 在控制台中购买彩票的方法int[7]
         * “请输入第1个红球号码”
         * “号码不能超过1~33” “当前号码已存在”
         *
         * (2) 随机产生一注彩票的方法int[7]
         * random.Next(1,34)
         * 要求:红球号码不能重复,且按照从小到大排序
         *
         * (3) 两注彩票比较的方法,返回中将等级
         * 先计算红球、篮球中奖数量
         *
         * 在Main中测试
         */
        static void Main()
        {
            // int[] myTicket = {1,2,3,4,5,6,7};
            int[] myTicket = CreatRandomTicket();
            // int[] myTicket = BuyTicket();
            int[] randomTicket = CreatRandomTicket();
            Console.WriteLine("买的彩票");
            ShowTicket(myTicket);
            Console.WriteLine("随机的彩票");
            ShowTicket(randomTicket);
            int level = TicketEquals(myTicket, randomTicket);
            if (level!=0)
                Console.WriteLine("恭喜,{0}等奖",level);
            else
                Console.WriteLine("没中");
        }

        /// <summary>
        /// 显示号码段
        /// </summary>
        /// <param name="ticket"></param>
        private static void ShowTicket(int[] ticket)
        {
            for (int i = 0; i < ticket.Length; i++)
            {
                if (i<6)
                {
                    Console.ForegroundColor = ConsoleColor.Red;
                    Console.Write(ticket[i]+"\t");
                }
                else
                {
                    Console.ForegroundColor = ConsoleColor.Blue;
                    Console.Write(ticket[i]);  
                }
            }
            Console.ForegroundColor = ConsoleColor.White;
            Console.WriteLine();
        }

        /// <summary>
        /// 购买号码
        /// </summary>
        /// <returns>6+1</returns>
        private static int[] BuyTicket()
        {
            int[] ticket = new int[7];
            // 前6个红球
            
            for (int i = 0; i < 6;)
            {
                Console.WriteLine("请输入第{0}个红球号码:",i);
                int redNumber = int.Parse(Console.ReadLine());
                if (redNumber >= 1 && redNumber <= 33)
                    Console.WriteLine("购买号码超出范围");
                else if (Array.IndexOf(ticket, redNumber, 0) > 0)
                    Console.WriteLine("号码已经存在");
                else
                    ticket[i++] = redNumber;
            }
            // 蓝球
            Console.WriteLine("请输入蓝球号码:");
            while (true)
            {
                int blueNumber = int.Parse(Console.ReadLine());
                if (blueNumber>=1 && blueNumber<=16)
                {
                    ticket[6] = blueNumber;
                    break;
                }
                else
                {
                    Console.WriteLine("输入有误请重新输入");
                }
            }
            
            return ticket;
        }

        /// <summary>
        /// 随机生成双色球号码
        /// </summary>
        /// <returns>号码排序</returns>
        private static int[] CreatRandomTicket()
        {
            Random random = new Random();
            int[] ticket = new int[7];
            for (int i = 0; i < 6;)
            {
                int redNumber = random.Next(1, 34);
                // redNumber在数组中不存在
                if (Array.IndexOf(ticket, redNumber, 0) < 0)
                    ticket[i++] = redNumber;
            }
            ticket[6] = random.Next(1, 17);
            // 红球号码排序
            Array.Sort(ticket,0,6);
            return ticket;
        }

        /// <summary>
        /// 通过购买和随机的双色球对比,得到中奖等级
        /// </summary>
        /// <param name="myTicket">买的6+1</param>
        /// <param name="randomTicket">随机的6+1</param>
        /// <returns>中奖等级</returns>
        private static int TicketEquals(int[] myTicket, int[] randomTicket)
        {
            // 计算红球、蓝球的中奖数量
            int blueCount = myTicket[6] == randomTicket[6] ? 1 : 0;
            int redCount = 0;
            for (int i=0; i<6; i++)
                if (Array.IndexOf(randomTicket, myTicket[i], 0, 6) >= 0)
                    redCount++;
            int level;
            if (blueCount + redCount == 7)
                level = 1;
            else if (redCount == 6)
                level = 2;
            else if (redCount + blueCount == 6)
                level = 3;
            else if (redCount + blueCount == 5)
                level = 4;
            else if (redCount + blueCount == 4)
                level = 5;
            else if (blueCount == 1)
                level = 6;
            else
                level = 0;
            return level;
        }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
在WPF中,我们可以使用控件的属性来实现文本框和密码框的水印效果(也称为背景文字提示)。下面是实现该效果的一些方法: 方法一:使用控件的Placeholder属性 WPF的文本框和密码框控件都有一个名为Placeholder的属性,该属性可以用来显示文本框或密码框中的默认提示文本。当用户在文本框或密码框中输入内容后,该提示文本就会自动隐藏。 例如,以下代码演示了在WPF中如何使用Placeholder属性来实现文本框的水印效果: ```xml <TextBox Placeholder="请输入文本"></TextBox> ``` 同样地,我们可以在密码框中使用Placeholder属性来实现密码框的水印效果: ```xml <PasswordBox Placeholder="请输入密码"></PasswordBox> ``` 方法二:使用控件的Adorner WPF中的Adorner是一种用于在控件上添加装饰元素的机制。我们可以使用Adorner来实现文本框和密码框的水印效果。 以下是实现该效果的一般步骤: 1.定义一个自定义控件,例如WatermarkTextBox。 2.在WatermarkTextBox中定义一个名为Watermark的依赖属性。该属性表示水印提示文本。 3.重写WatermarkTextBox的OnRender方法,使其在控件上绘制水印提示文本。 4.在WatermarkTextBox的TextChanged事件中判断文本框中是否有内容,如果有则隐藏水印提示文本,否则显示水印提示文本。 以下是WatermarkTextBox的示例代码: ```csharp public class WatermarkTextBox : TextBox { public static readonly DependencyProperty WatermarkProperty = DependencyProperty.Register( "Watermark", typeof(string), typeof(WatermarkTextBox), new PropertyMetadata(default(string))); public string Watermark { get { return (string)GetValue(WatermarkProperty); } set { SetValue(WatermarkProperty, value); } } protected override void OnRender(DrawingContext drawingContext) { base.OnRender(drawingContext); if (string.IsNullOrEmpty(Text) && !string.IsNullOrEmpty(Watermark)) { var formattedText = new FormattedText( Watermark, CultureInfo.CurrentCulture, FlowDirection.LeftToRight, new Typeface(FontFamily, FontStyle, FontWeight, FontStretch), FontSize, Foreground); drawingContext.DrawText(formattedText, new Point(2, 2)); } } protected override void OnTextChanged(TextChangedEventArgs e) { base.OnTextChanged(e); if (string.IsNullOrEmpty(Text) && !string.IsNullOrEmpty(Watermark)) { InvalidateVisual(); } } } ``` 使用WatermarkTextBox时,只需要在XAML中设置Watermark属性即可: ```xml <local:WatermarkTextBox Watermark="请输入文本"></local:WatermarkTextBox> ``` 同样地,我们也可以定义一个WatermarkPasswordBox类来实现密码框的水印效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AdolphW

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值