2015-04-20 43 views
-1

我正在制作一个程序,用户输入月份并获取天数。如果用户输入的内容不是一个月,应该说“请输入一个有效的月份”,但仅限于该月份不是真实的月份。问题是消息框始终显示,即使输入有效的月份。不应该显示消息框?

Dim monthname() As String = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} 
Dim monthdays() As String = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} 

For i = 0 To monthname.GetUpperBound(0) 
    If monthname(i) = TextBox1.Text Then 
     TextBox2.Text = monthname(i) & " has " & monthdays(i) & " days" 
    End If 
Next 

If String.Compare(TextBox1.Text, monthname(11)) <> 0 Then 
    MessageBox.Show("Please enter a vaild month") 
End If 
+0

dictionary

现在,你可以简单而这样的代码你的方法的其余部分'或'aPRiL' – Plutonix

+0

您需要在代码的顶部添加“Option Strict On”声明。然后,“monthsdays”的声明将失败,但它很容易修复,并且它会使您的代码易于使用,而且更容易出错。 – Enigmativity

+0

我感到很失望,人们觉得需要以非常清晰和简明的方式降低问题的质量。 Downvotes应该是一个很好的问题。 – Enigmativity

回答

1

如果你想检查文本框是否包含任何有效的月份名称,你不能只检查看它是否等于上个月。相反,您可以声明一个默认为False的布尔变量(称为found),如果文本框与某个月份名称匹配,则将其设置为True。我认为下面的代码做你想要的。它与月份名称进行不区分大小写的比较;如果您要拒绝“可能”和“可能”并且只接受“可能”,请在String.Compare语句中将True更改为False。

Dim monthName() As String = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"} 
Dim monthDays() As Integer = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31} 
Dim found As Boolean 

For i As Integer = 0 To monthName.GetUpperBound(0) 
    If String.Compare(monthName(i), TextBox1.Text, True) = 0 Then 
     TextBox2.Text = monthName(i) & " has " & monthDays(i).ToString & " days" 
     found = True 
     Exit For 
    End If 
Next 

If Not found Then MessageBox.Show("Please enter a valid month") 
1

这是因为您只是将输入的值与monthname(11)进行比较。你需要运行一个循环,并对每个值进行比较。

+0

我有点困惑,你是什么意思跑循环?像直到循环? –

+1

你的'For i = 0 To ...'是一个循环。你需要在文本框中做同样的事情,如果你想像你的同学一样在数组中找到'TextBox1.Text' – Plutonix

+0

@DaveMatthews当前的代码将你输入的'monthname(11)'比较为“12月” 。如果你不知道什么是循环或者如何使用它来解决这个问题,那么StackOverflow并不是获得答案的最佳地点;这不是一个真正的指导地方,需要人们先教你一些关于基本编程的问题通常不会受到好评。这可能就是为什么你的问题被低估了。我希望我能建议一个更合适的地方,但我恐怕我不知道。 –

1

我建议你对此稍有不同。

而不是使用两个数组,你必须手动输入到你的代码中,我会先建立一个月份数据字典并使用它。

开始与此:

Dim months = _ 
    Enumerable _ 
     .Range(0, 12) _ 
     .Select(Function(n) New DateTime(2015, n + 1, 1).AddMonths(1).AddDays(-1.0)) _ 
     .ToDictionary(_ 
      Function(x) x.ToString("MMMM").ToLowerInvariant(), _ 
      Function(x) x.Day) 

这给你一个字典月份的名称映射到的天数。您使用了错误的`String.Compare`超载,如果你想`April`匹配`四月

Dim entered = TextBox1.Text.Trim().ToLowerInvariant() 

If months.ContainsKey(entered) Then 
    Dim proper = CultureInfo.CurrentCulture.TextInfo.ToTitleCase(entered) 
    TextBox2.Text = String.Format("{0} has {1} days", proper, months(entered)) 
Else 
    MessageBox.Show("Please enter a vaild month") 
End If