Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/286.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#时间计算器将字符串秒、分、时、日转换为无时间跨度_C#_String_Int_Calculation - Fatal编程技术网

C#时间计算器将字符串秒、分、时、日转换为无时间跨度

C#时间计算器将字符串秒、分、时、日转换为无时间跨度,c#,string,int,calculation,C#,String,Int,Calculation,我是一个学生,在这个程序提示中,我需要创建一个包含秒数输入的程序,当按下计算按钮时,秒数将显示,并将其转换为分钟、小时和天 我知道我的格式不正确,我已经通读了我的文本,试图找到一些与我的程序有远程关联的东西,但我很难找到它 有人能告诉我哪里出了问题,为什么 我想再次强调,我仍在学习C#,还没有达到时间跨度。因此,这需要在字符串转换以及某种if语句中进行 请提供一个解释,因为我想得到这个窍门。我还需要用它进行输入验证,我已经在下面进行了尝试 这是我的密码: private void Calcula

我是一个学生,在这个程序提示中,我需要创建一个包含秒数输入的程序,当按下计算按钮时,秒数将显示,并将其转换为分钟、小时和天

我知道我的格式不正确,我已经通读了我的文本,试图找到一些与我的程序有远程关联的东西,但我很难找到它

有人能告诉我哪里出了问题,为什么

我想再次强调,我仍在学习C#,还没有达到时间跨度。因此,这需要在字符串转换以及某种if语句中进行

请提供一个解释,因为我想得到这个窍门。我还需要用它进行输入验证,我已经在下面进行了尝试

这是我的密码:

private void CalculateButton_Click(object sender, EventArgs e)
    {
        int totalSeconds, minutes, hours, days;
        int secondsInDay = 60 * 60 * 24;
        int secondsInHour = 60 * 60;
        int secondsInMinute = 60;



        if (int.TryParse(secondsInputTextBox.Text, out totalSeconds))

        {
            if (totalSeconds > secondsInDay)
            {
                days = totalSeconds / secondsInDay;
                totalSeconds = totalSeconds - (days * secondsInDay);
                daysTextBox.Text = days.ToString();
            }

            if (totalSeconds > secondsInHour)
            {
                hours = totalSeconds / secondsInHour;
                totalSeconds = totalSeconds - (hours * secondsInHour);
                hoursTextBox.Text = hours.ToString();
            }

            if (totalSeconds > secondsInMinute)
            {
                minutes = totalSeconds / secondsInMinute;
                totalSeconds = totalSeconds - (minutes * secondsInMinute);
                minutesTextBox.Text = minutes.ToString();
            }

            else
            {
                secondsTextBox.Text = totalSeconds.ToString();
            }
        }

        else
        {
            MessageBox.Show("Incorrect input. Please use a number.");
        }
评论:

  • “else-if”逻辑不正确。想想如果你有超过一小时的秒数会发生什么:显然你有超过一分钟的秒数,但是你的“else-if”语句意味着这个时间段
  • …永远不会执行

  • 你的作业是向后看的。当然,您想用计算出的值更新相应的文本框

  • 但是,这种语法也不正确
  • “int”是一个类,int中没有名为“minutesTextBox”的成员

                 minutesTextBox.Text = minutes.ToString();
    
  • 不太重要,但如果已经解析了上面的内容,则不需要使用TryParse(totalSeconds)
  • 下面是一个稍加修改的解决方案

    更新

    要使工作解决方案正常运行,请在VisualStudio中创建WPF应用程序。在MainWindow.xaml中,将以下代码放在网格标记之间:

            <Button Width="100" Height="50" Click="CalculateButton_Click" Margin="53,44,564,226"/>      
            <TextBox Name="inputTextBox"  Height="50" Width="100" Margin="298,44,319,226"/>
            <TextBox Name="secondsTextBox"  Height="50" Width="100" Margin="574,233,43,37"/>
            <TextBox Name="minutesTextBox"  Height="50" Width="100" Margin="392,233,225,37"/>
            <TextBox Name="hoursTextBox"  Height="50" Width="100" Margin="198,233,419,37"/>
            <TextBox Name="daysTextBox"  Height="50" Width="100" Margin="53,233,564,37"/>
    
    

    这个解决方案并不完美。一个有用的练习是加载项验证、加载项标签和清理xaml,或者将其转换为Windows窗体应用程序。我在后面添加了else语句,但是每个else语句都与其上面的if语句相关联。这在逻辑上与不同,如果

    我建议将此过程分成不同的区域-执行转换算法的区域和在UI中分配值的区域

    要将总的_秒值分解为天、小时、分钟和秒,通常需要使用(a)整数除法和(b)余数(%)运算

    (说明性代码示例…)

    //计算值
    天数=总秒数/天数中的秒数;
    days\u rem=总秒数%NUM\u秒数(以天计);
    小时=日/秒/小时;
    小时数=天数%NUM秒数(单位:小时);
    分钟=小时每分钟/数秒每分钟;
    分钟数=小时数%NUM秒数(单位:分钟);
    秒=分钟\u rem;
    //将文本框设置为实际值
    daysTextBox.Text=days.ToString();
    hoursTextBox.Text=hours.ToString();
    minutesTextBox.Text=minutes.ToString();
    secondsTextBox.Text=seconds.ToString();
    //空白零值
    如果(天数<1)
    {
    daysTextBox.Text=null;
    如果(小时<1)
    {
    hoursTextBox.Text=null;
    如果(分钟<1)MinutesExtbox.Text=null;
    }
    }
    

    我对消隐行为不是很清楚,但我假设我已经捕获了消隐量到最小非零量时所需的内容,并且在所有情况下都留有秒。

    所以我要澄清的是,代码的目的是我有一个文本输入,有四个标签输出,分别为秒、分钟、,几小时和几天。当我按下calculate时,第一个文本框中的秒数(比如120秒)表示为秒、分钟、小时和天。所以秒会显示120,分2,小时0和天0。我明白了。那么,根据需要修改逻辑。其他的几点应该仍然有用。事实上,你知道吗。我刚刚意识到提示需要输入“135秒”之类的内容,并将其转换为0天、0小时、2分钟和15秒。我道歉。我相信你给了我一个正确的密码。这是一个漫长的一天,试图与此工作。我吃了这道菜觉得很累,不用担心。如果你觉得它解决了你的问题,请考虑接受它作为答案。谢谢,祝你好运。好的,我测试了这个,我认为我们走对了方向。我的问题是,如果限制应该在60秒之后,它被转换成1分钟,60分钟之后它被转换成1小时,等等,我需要包括输入验证吗?我需要包括try-else语句来清除异常。(比如说,如果有人输入字母而不是数字)这就是为什么我尝试使用if-else-if语句或switch语句。我希望这是有意义的。我很困惑,也很新,所以我很感谢你的澄清。
                 int.minutesTextBox.Text
    
                 minutesTextBox.Text = minutes.ToString();
    
            <Button Width="100" Height="50" Click="CalculateButton_Click" Margin="53,44,564,226"/>      
            <TextBox Name="inputTextBox"  Height="50" Width="100" Margin="298,44,319,226"/>
            <TextBox Name="secondsTextBox"  Height="50" Width="100" Margin="574,233,43,37"/>
            <TextBox Name="minutesTextBox"  Height="50" Width="100" Margin="392,233,225,37"/>
            <TextBox Name="hoursTextBox"  Height="50" Width="100" Margin="198,233,419,37"/>
            <TextBox Name="daysTextBox"  Height="50" Width="100" Margin="53,233,564,37"/>
    
    
     private void CalculateButton_Click(object sender, RoutedEventArgs e)
            {
    
                daysTextBox.Text = null;
                hoursTextBox.Text = null;
    
                int totalSeconds, minutes, hours, days;
                int secondsInDay = 60 * 60 * 24;
                int secondsInHour = 60 * 60;
                int secondsInMinute = 60;
    
                int.TryParse(inputTextBox.Text, out totalSeconds);            
    
                if (totalSeconds > (secondsInDay))
                {
                    days = totalSeconds / (secondsInDay);
                    totalSeconds = totalSeconds - (days * secondsInDay);
                    daysTextBox.Text = days.ToString();
                }
                else daysTextBox.Text = null;
    
                if (totalSeconds > (secondsInHour))
                {
                    hours = totalSeconds / (secondsInHour);
                    totalSeconds = totalSeconds - (hours * secondsInHour);
                    hoursTextBox.Text = hours.ToString();
                }
                else hoursTextBox.Text = null;
    
                if (totalSeconds > secondsInMinute)
                {
                    minutes = totalSeconds / secondsInMinute;
                    totalSeconds = totalSeconds - (minutes * secondsInMinute);
                    minutesTextBox.Text = minutes.ToString();
                }
                else minutesTextBox.Text = null;
    
                if (totalSeconds > 0)
                    secondsTextBox.Text = totalSeconds.ToString();
                else secondsTextBox.Text = null;        
            }
    
    
    //Calculate values
    days = total_seconds / NUM_SECONDS_IN_DAY;
    days_rem = total_seconds % NUM_SECONDS_IN_DAY;
    
    hours = days_rem / NUM_SECONDS_IN_HOUR;
    hours_rem = days_rem % NUM_SECONDS_IN_HOUR;
    
    minutes = hours_rem / NUM_SECONDS_IN_MINUTE;
    minutes_rem = hours_rem % NUM_SECONDS_IN_MINUTE;
    
    seconds = minutes_rem;
    
    //Set textboxes to actual values
    daysTextBox.Text = days.ToString();
    hoursTextBox.Text = hours.ToString();
    minutesTextBox.Text = minutes.ToString();
    secondsTextBox.Text = seconds.ToString();
    
    //Blank zero values
    if (days < 1) 
    {
        daysTextBox.Text = null;
        if (hours < 1) 
        {
            hoursTextBox.Text = null;
            if (minutes < 1) minutesTextBox.Text = null;
        }
    }