2014-05-16 74 views
0

這裏是我的代碼循環不循環和第二如果沒有Iffing

Module Module1 

Sub Main() 
    Dim yob As Integer 
    System.Console.WriteLine("If you would as be kind as to input your year of birth then I will  tell you how old you are") 
loops: 
    Try 
     yob = Int32.Parse(Console.ReadLine()) 
    Catch ex As SystemException 
     Console.WriteLine("that is not a number, try again.") 
     GoTo loops 
    Finally 
    End Try 
    Do Until yob > 0 And yob < DateTime.Today.Year 
    Loop 
    If yob < 0 Or yob > DateTime.Today.Year Then 
     Console.WriteLine("You entered a number that is either zero or a date in the future.") 
     Console.WriteLine("You can't be born in the future. C'mon son") 
     Console.WriteLine("Try again") 
    End If 
    Dim Age = DateTime.Today.Year - yob 
    Console.WriteLine("You are " & Age & " years old") 
    If Age > 100 Then 
     Console.WriteLine("You are were born over a 100 years ago and little is known about that time since there was no Facebook, Twitter or Instagram for people to log their every") 
     Console.WriteLine(" thought, action, emotion, or take pictures of their food before this time") 
     Console.ReadKey() 
    End If 
    If Age > 90 Then 
     Console.WriteLine("You were born in the 20s") 
     Console.WriteLine("In this decade Halloween was born. The first Halloween celebration in America took place in Anoka, Minnesota in 1921. ") 
     Console.ReadKey() 
    End If 
End Sub 

End Module 

直到我在try catch塊我的循環將運行正常添加一個goto。現在它不會,如果你輸入比2014年更大的一年,它只是坐在他們的身上。 我的另一個問題是,我的第二如果不起作用。如果你在一年中使你的年齡大於90歲,那麼它不會做任何事情,並且程序會在沒有執行If語句的情況下結束。 有什麼不對的想法?

+0

你有調試嗎?設置一個斷點,比較它實際上做什麼與你認爲它會做什麼 – Plutonix

+0

對不起,我對此很陌生,這是我的第一個編程課程。該程序編譯得很好,它只是沒有做它應該做的。 –

+0

多數民衆贊成是**爲什麼**我們調試 - 修復邏輯錯誤;知道如何**代碼實際**運行結果在未來較少類似的錯誤 – Plutonix

回答

1

哇,一個Goto。不是每天你都會看到其中的一個,並且有充分的理由。你不應該使用它。在某些情況下它很有用,但是你不可能真正遇到其中的一個。

代碼停止一年超出範圍的原因是您有一個空的循環來檢查年份。由於變量不能在循環內部更改,循環將永遠不會結束。

您應該在輸入周圍使用循環而不是循環之後,並在循環中執行所有檢查。您可以使用,而不是讓代碼拋出一個異常TryParse方法,它通常是更好的檢查會導致,而不是等待它發生錯誤的情況:

Dim yob As Integer 
System.Console.WriteLine("If you would as be kind as to input your year of birth then I will  tell you how old you are") 
Dim inputting As Boolean = True 
Do While inputting 
    Dim input As String = Console.ReadLine() 
    If Int32.TryParse(input, yob) Then 
    If yob <= 0 Or yob > DateTime.Today.Year Then 
     Console.WriteLine("You entered a number that is either zero or a date in the future.") 
     Console.WriteLine("You can't be born in the future. C'mon son") 
     Console.WriteLine("Try again") 
    Else 
     inputting = False 
    End If 
    Else 
    Console.WriteLine("that is not a number, try again.") 
    End If 
Loop 

當我用了一年測試使我94,第二If聲明正常工作。然而,它只能檢驗下限,所以如果我進入一個讓我150歲的年份,它仍然會說我出生在二十多歲。

另外,介於90到100之間並不意味着你出生在二十多歲,但是在85到95​​之間。你可能想用實際出生年份在這種狀態下,而不是年齡:

If yob >= 1920 And yob <= 1929 Then 

邊注:只有出生年份是不夠準確判斷年齡。如果我1994年出生,我不確定我是20歲,如果今年還沒有過我的生日,我仍然是19歲。

+0

要準確確定確切的年齡,我將不得不考慮閏年等。 Console.Writeline表示「你今年或將要年齡」 –

+0

@TimTheLearner:如果你是計算,你只需要考慮閏年年齡在幾天或幾周內,否則如果生日未在今年發生,你只需從年齡中減去一個年齡。改變信息將準確地告訴程序做了什麼計算,所以如果你不想改變它也接受生日,那是最好的解決方案。 – Guffa

2

您要循環的代碼必須位於Do循環中。

Do 
Try 
    yob = Int32.Parse(Console.ReadLine()) 
Catch ex As SystemException 
    Console.WriteLine("that is not a number, try again.") 
    GoTo loops 
Finally 
End Try 
Loop Until yob > 0 And yob < DateTime.Today.Year 
+0

這不會改變什麼,結果與以前相同 –

1

你的代碼有兩個問題。 (好吧,如果我也計算goto這三個) 第一個是空的do while,如果你鍵入一個大於當前年份的值,將會永久循環,如上面註釋中指出的那樣。第二個問題是兩個輸出之間缺少else if。如果我有超過100年的時間,那麼我也有超過90年的時間,並且你寫這兩個陳述。

的第一個問題是固定刪除所有try/catch塊和do while循環與

While True 
    if Int32.TryParse(Console.ReadLine(), yob) then 
     if yob > 0 And yob < DateTime.Today.Year then 
     Exit While 
     else 
     Console.Writeline("Enter a number between 0 and " & DateTime.ToDay.Year) 
     End if 
    else 
     Console.Writeline("This is not a number") 
    End if 
End While 

注意的TryParse最好簡單的解析,因爲如果輸入的不是一個數字,將返回false它不會拋出異常。

第二個問題是簡單地修復添加適當的else if(並使用控制檯。Readline不一定要退出,當用戶按下回車)

If Age > 100 Then 
    ..... 
    Console.ReadLine() 
else If Age > 90 Then 
    .... 
    Console.ReadLine() 
End If 

但是請記住,計算人的年齡並不是一個簡單的任務,因爲它似乎。
Look at this question