2017-10-11 69 views
-1

此代碼應該採取一個數字,並找到它的主要因素。程序與特定數字凍結

爲什麼此代碼可以使用像2345這樣的數字(它返回5,7,67就像它應該的那樣),但它不適用於像500和800這樣的數字?

編輯:當我說它不起作用時,程序根本不做任何事情和/或凍結按鈕單擊。然後我必須停止vb中的程序。

Dim number As Double = txtNum.Text 
    Dim var As Double = 2 
    Dim result As Double 
    If number > 1 Then 
     lst1.Items.Clear() 
     lst1.Items.Add("The prime factors of " & number & ":") 
     Do While number > 1 
      result = number/var 
      If result = Int(result) Then 
       lst1.Items.Add(var) 
       number = result 
      End If 
      var = var + 1 
     Loop 
    Else 
     lst1.Items.Clear() 
     lst1.Items.Add("Let try that again...") 
    End If 
+0

定義「不起作用」。它有什麼作用?你期望它做什麼?爲什麼?當你在調試器中逐步完成時,實際行爲首先與預期行爲有什麼不同?當這種情況發生時,變量的值是什麼? – David

+0

A)請閱讀[問] B)參加[旅遊] C)設置'選項Strict On' D)如果是VB.NET,它不能是vba E)更好地描述問題 – Plutonix

+1

''和/或凍結「 - 這是熟悉使用調試器的好時機。使用調試器,您可以逐行執行代碼,執行代碼並觀察運行時值和行爲。 – David

回答

1

的問題造成的,因爲500除以2爲250,除以5是50 ...然後程序通過由6劃分的,而不是試圖通過再次參照圖5來劃分繼續。一旦var達到10,number成爲5,並且不再有任何分裂允許它達到1 - 因此創建了無限循環。

通過改變

If result = Int(result) Then 
    lst1.Items.Add(var) 
    number = result 
End If 
var = var + 1 

If result = Int(result) Then 
    lst1.Items.Add(var) 
    number = result 
Else 
    var = var + 1 
End If 

它正確地由同一個主要因素,必要時由多個部門。