我是一个学生,对这个程序提示非常困惑,我需要创建一个具有秒输入的程序,当按下计算按钮时,秒会显示,并将其转换为分钟、小时和天。
我知道我的格式不正确,我已经通读了我的文本,试图找到与我的程序远程相关的东西,但我正在努力找到它。
有人可以向我解释我哪里出错了以及为什么?
我想再次强调,我仍在学习 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"语句意味着这个小时块
else if(hours >= totalSeconds)
hours = int.hoursTextBox.Text;
。永远不会执行。
你的作业向后看。当然,您希望使用计算值更新相应的文本框。
int.minutesTextBox.Text = minutes;
- 但是此语法也不正确。
int.minutesTextBox.Text
">int"是一个类,int 没有一个名为"minutesTextBox"的成员。你想要更多类似的东西
minutesTextBox.Text = minutes.ToString();
- 不太重要,但如果你已经在上面解析过,你不需要 TryParse(totalSeconds(。
以下是稍作修改的解决方案。
更新
若要获得有效的解决方案,请在 Visual Studio 中创建 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"/>
在 MainWindow.xaml 中.cs添加方法:
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;
}
这个解决方案并不完美。一个有用的练习是添加验证、添加标签和清理 xaml,或者将其转换为 Windows 窗体应用程序。我已经重新添加了 else 语句,但每个else语句都与其上面的if语句相关联。这在逻辑上与其他if不同。
我建议将此过程分解为不同的区域 - 执行转换算术的区域,以及在UI中分配值的区域。
要将total_seconds值分解为天、小时、分钟和秒,通常使用 (a( 整数除法和 (b( 余数 (%( 运算。
(说明性代码示例...
//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;
}
}
我不太清楚消隐行为,但我认为我已经捕获了您需要的消隐量,直到最小的非零量水平,并在所有情况下都留下秒数。