亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

需要計算用戶輸入的多個TimeSpan值的平均值

需要計算用戶輸入的多個TimeSpan值的平均值

C#
米脂 2022-11-13 17:30:03
這是我正在研究的跑步配速/時間計算器。我遇到的這個特殊問題是找到輸入的英里時間值的平均配速。我讓用戶通過文本框以 hh:mm:ss 格式輸入多個值。我需要將這些值相加,找到輸入值的平均值,然后將該平均值返回到 hh:mm:ss 格式的標簽。我已經嘗試了多種方法來做到這一點,并閱讀了多篇其他帖子,但一直卡在其中。我試過使用 List 但輸入的值的數量總是不同的,我需要它是動態的。如果有辦法只將用戶定義的值輸入到列表中,我的列表就可以了。截至目前,即使其中一個沒有價值,它也會得到我所有盒子的平均值。還嘗試將 TimeSpan 值相加并將它們除以計數。這將獲得用戶輸入的值的正確計數。但是,我收到一條錯誤消息,提示無法將 / 運算符應用于 TimeSpan 和 int 類型的操作數。這與查找 TimeSpan 集合的平均值不同。那篇文章中使用的代碼破壞了我的整個應用程序。       private void calculate_btn_Click(object sender, EventArgs e)        {            TimeSpan d1 = TimeSpan.Parse(textBox1.Text);            TimeSpan d2 = TimeSpan.Parse(textBox2.Text);            TimeSpan d3 = TimeSpan.Parse(textBox3.Text);            var sourceList = new List<TimeSpan>();            sourceList.Add(d1);            sourceList.Add(d2);            sourceList.Add(d3);            var averageTimeSpan = new TimeSpan(Convert.ToInt64(sourceList.Average(timeSpan => timeSpan.Ticks)));            averagelabletext.Text = averageTimeSpan.ToString();        }    private void calculate_btn_Click(object sender, EventArgs e)    {        TimeSpan d1 = TimeSpan.Parse(textBox1.Text);        TimeSpan d2 = TimeSpan.Parse(textBox2.Text);        TimeSpan d3 = TimeSpan.Parse(textBox3.Text);        TimeSpan total = (d1 + d2 + d3);        int count = 0;        foreach (Control c in Controls)        {            if (!(c is TextBox)) continue;            TextBox t = c as TextBox;            {                if (t.Text != "00:00:00")                {                    count++;                }            }        }        averagelabletext.Text = total / count;    }我希望如果用戶在文本框 1 中輸入 00:09:00,在文本框 2 中輸入 00:09:30,結果應該是 00:09:15?,F在,如果用戶輸入這些相同的值,則返回的平均值為 00:06:10,因為它仍在將第三個值計算為平均值。由于用戶尚未在該框中輸入值,因此仍為 00:00:00。C#窗體
查看完整描述

2 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

使用以下方法過濾在進行平均之前未輸入的結果Where:


private void calculate_btn_Click(object sender, EventArgs e)

{

    var d1 = TimeSpan.Parse(textBox1.Text);

    var d2 = TimeSpan.Parse(textBox2.Text);

    var d3 = TimeSpan.Parse(textBox3.Text);


    var sourceList = new List<TimeSpan> {d1,d2,d3};


    var averageTicks = sourceList.Where(t=>t.Ticks>0).Average(t=>t.Ticks);

    var averageTimeSpan = new TimeSpan(averageTicks);

    averagelabletext.Text = averageTimeSpan.ToString();

}

我可能會做更像這樣的事情(為了清楚起見):


private void calculate_btn_Click(object sender, EventArgs e)

{

    var textboxes = new List<TextBox> {textBox1, textBox2, textBox3};

    var ticks = textboxes.Select(t=>TimeSpan.Parse(t.Text).Ticks);

    var enteredTicks = ticks.Where(t=>t!=0);


    var averageTicks = enteredTicks.Average();

    var averageTimeSpan = new TimeSpan(averageTicks);

    averagelabletext.Text = averageTimeSpan.ToString();

}

然后進一步簡化:


private void calculate_btn_Click(object sender, EventArgs e)

{

    var textboxes = new List<TextBox> {textBox1, textBox2, textBox3};

    var ticks = textboxes

        .Select(t=>TimeSpan.Parse(t.Text).Ticks)

        .Where(t=>t!=0);

        .Average();


    var averageTimeSpan = new TimeSpan(ticks);

    averagelabletext.Text = averageTimeSpan.ToString();

}


查看完整回答
反對 回復 2022-11-13
?
神不在的星期二

TA貢獻1963條經驗 獲得超6個贊

嘗試使用 TryParse。如果它仍然以解析空字符串結束,請添加一個檢查!string.IsNullOrWhiteSpace(TextBox1.Text) && TimeSpan.TryParse...


        private void calculate_btn_Click(object sender, EventArgs e)

        {

            var sourceList = new List<TimeSpan>();

            TimeSpan timeSpan;

            if (TimeSpan.TryParse(textBox1.Text, out timeSpan)) {

              sourceList.Add(timeSpan);

            }

            if (TimeSpan.TryParse(textBox2.Text, out timeSpan)) {

              sourceList.Add(timeSpan);

            }

            if (TimeSpan.TryParse(textBox3.Text, out timeSpan)) {

              sourceList.Add(timeSpan);

            }


            var averageTimeSpan = new TimeSpan(Convert.ToInt64(sourceList.Average(x => x.Ticks)));

            averagelabletext.Text = averageTimeSpan.ToString();

        }


查看完整回答
反對 回復 2022-11-13
  • 2 回答
  • 0 關注
  • 193 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號