2017-05-03 78 views
-1

我正在循環卡號找到所有的奇數並乘以卡位數。其種類很難解釋。我無法乘以奇數和卡號。這是我老師給我的一個例子。您將卡號1和奇數1相乘,等等。我沒有收到任何錯誤,只是有點凍結。先謝謝你。 和的
卡編號:1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6
倍數1 2 3 4 5 6 7 8
埃文斯:2 4 6 8 0 2 4 6 32 =薩姆1
賠率:1 6 15 28 45 6 21 40 162 = SUM 2通過一個字符串循環找到奇數VB

薩姆3:194 194 =薩姆3
步驟4:= 1 + 9 + 4 = 14
= 1 + 4 = 5 =校驗碼

Public Class Payment 
Private Sub OK_Click(sender As Object, e As EventArgs) Handles OK.Click 
    Dim Sum1 = 0 
    Dim Sum2 = 0 
    Dim Sum3 = 0 
    Dim ready As Boolean 
    Dim ccnumb = CardNumber.Text 
    Format(CardNumber.Text, "################") 
    Dim exp = Mid(ExpDate.Text, 1, 3) 
    Dim checkdigit = 0 
    If FullName.TextLength = 0 Or cardtype.Text.Length = 0 And ccnumb.Length <= 16 Or exp.Length = 2 Then 
     MessageBox.Show("Please enter all credit card information before proceeding.") 
     ready = False 
    Else ready = True 
    End If 
    If ready = True Then 
     For Each num As Char In ccnumb 
      If CInt(CStr(num)) Mod 2 <> 0 Then 
       Sum1 += CInt(CStr(num)) * CInt(CStr(num)) Mod 2 <> 0 
      Else 
       Sum2 += CInt(CStr(num)) 
      End If 
     Next 

     Sum3 = Sum1 + Sum2 
     Do While Sum3 > 10 
      For j = 0 To Sum3.ToString.Length - 1 
       For k = 1 To Sum3.ToString.Length - 1 
        Sum3 = j + k 
       Next 
      Next 
     Loop 
     Do While exp.Length > 1 
      checkdigit = Mid(ExpDate.Text, 1, 1) + Mid(ExpDate.Text, 1, 2) 
     Loop 
     If Sum3 = checkdigit Then 
      MessageBox.Show("Congratulations! Your payment was successful.") 
      CustInv.Show() 
     Else MessageBox.Show("The checkdigit," & Space(1) & Sum3 & Space(1) & "does not match the month code," & Space(1) & checkdigit & "." & Space(1) & "Please reenter your card information.") 
     End If 
    End If 
End Sub 
+0

這是任何特別的語言;如果是的話,什麼? –

+0

我正在使用Visual Baiscs – Rob

+0

[爲什麼接受答案?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work)。接受答案可以幫助其他有相同問題的人。 – Masoud

回答

1

「這種凍結」是俗話說「我的代碼輸入一個infinite loop」。

這看起來可疑:

Do While Sum3 > 10 
    For j = 0 To Sum3.ToString.Length - 1 
     For k = 1 To Sum3.ToString.Length - 1 
      Sum3 = j + k 
     Next 
    Next 
Loop 

要進入循環,Sum3必須大於10爲循環退出,Sum3必須不大於10,但你的代碼只增量Sum3,所以Sum3只能保持大於10.

這意味着一旦進入,此循環是無限的。

+0

謝謝你指出。我正在嘗試添加sum3的數字直到它們只有一個數字。說sum3是45或100,你加4 + 5或1 + 0 + 0來得到校驗位。我將如何解決它,所以它不是一個無限循環 – Rob

0

As @Bohemian提到你的循環需要被編輯。下面的代碼可以幫助你:

For d = 1 To Len(cstr(YourNumber)) 
     SumDigits = SumDigits + Val(Mid(cstr(YourNumber), d, 1)) 
Next d 
0

如果改變外環到內環不幫你

試試這個

Do While Sum3 > 10 and j < sum3  ' adding j < sum3 might stop the loop 
    For j = 0 To Sum3.ToString.Length - 1 
     For k = 1 To Sum3.ToString.Length - 1 
      Sum3 = j + k 
     Next 
    Next 
Loop 
相關問題