-2

私は、与えられた情報(どのチェックボックスを選択するか(貯蓄(7%)、企業(5%)、またはその両方)、次に選択した年(2015、2016、2017)、そして最後に)でバランスを計算するプログラムを作成しています。残高を入力するために合図されたときに入力した金額(これは、最初のステップで選択したアカウントの種類に基づいています)。両方のアカウントの種類を選択した場合を除いて、すべての合計が正しく表示されます(普通預金)。私にとっては、両方が選択された場合に2つの合計を加算するだけの行である必要がありますが、そうではありません。少なくとも私にとってはそうではありません。

普通預金に2000ドルの残高を入力し、2015年を選択した場合の合計は2289.80ドルです。これは正しいです。次に、企業アカウントに2015を選択し、1000ドルを入力した場合、合計は1102.50ドルになります。したがって、両方のアカウントを選択して同じ番号を入力し、両方のチェックボックスをオンにすると、$ 3434.70が得られますが、$3392.30が得られるはずです。

これが私が持っているコードです、どんな助けでも大歓迎です!(文字通り1行のコードである可能性があり、私を殺していると思います!)

Public Class Form1

Private Sub btnMediaEstimatedFund_Click(sender As Object, e As EventArgs) Handles btnMediaEstimatedFund.Click

    Dim interestRate, initialBalanceSavings, initialBalanceCorporate, finalBalance, year, theYear, subTotal As Double
    Dim savingsInterestRate As Double = 0
    Dim corporateInterestRate As Double = 0
    Dim savingsSubTotal As Double = 0
    Dim corporateSubTotal As Double = 0

    txtBoxEstimatedBudget.Enabled = False
    txtBoxAgenciesNeeded.Enabled = False


    If radButtonTraditional.Checked Then

        txtBoxAgenciesNeeded.Text = 3

    ElseIf radButtonEMedia.Checked Then

        txtBoxAgenciesNeeded.Text = 2

    End If


    If checkBoxSavings.Checked Then

        savingsInterestRate = 0.07

    ElseIf checkBoxCorporate.Checked Then

        corporateInterestRate = 0.05
    End If


    If checkBoxSavings.Checked = False And checkBoxCorporate.Checked = False Then

        MsgBox("Please chose an account type to proceed!", MsgBoxStyle.Critical, "Error")

    End If


    If radButton2015.Checked Then

        theYear = 2015

    ElseIf radButton2016.Checked Then

        theYear = 2016

    ElseIf radButton2017.Checked Then

        theYear = 2017

    End If


    Dim inputtedData As String

    If checkBoxSavings.Checked Then
        Do

            inputtedData = InputBox("Please enter a balance for SAVINGS account between $500.00 and $3000.00", "Initial Savings Balance", "0.00")

            If inputtedData = "" Then

                MsgBox("User chose to cancel calculation!")

                Exit Sub

            Else

                initialBalanceSavings = CType(inputtedData, Single)

                If initialBalanceSavings > 3000 Or initialBalanceSavings < 500 Then MsgBox("Please enter a balance for SAVINGS account equal to or above $500.00 and no more than $3000.00", MsgBoxStyle.Critical, "Error")

            End If

        Loop Until initialBalanceSavings >= 500 And initialBalanceSavings <= 3000

    End If

    If checkBoxCorporate.Checked Then

        Do

            inputtedData = InputBox("Please enter a balance for CORPORATE account between $500.00 and $3000.00", "Initial Corporate Balance", "0.00")

            If inputtedData = "" Then

                MsgBox("User chose to Cancel calculation!")

                Exit Sub

            Else

                initialBalanceCorporate = CType(inputtedData, Single)

                If initialBalanceCorporate > 3000 Or initialBalanceCorporate < 500 Then MsgBox("Please enter a balance for CORPORATE account equal to or above $500.00 and no more than $3000.00", MsgBoxStyle.Critical, "Error")

            End If

        Loop Until initialBalanceCorporate >= 500 And initialBalanceCorporate <= 3000

    End If


    savingsSubTotal = initialBalanceSavings
    corporateSubTotal = initialBalanceCorporate

    For year = 2013 To theYear - 1

        If savingsInterestRate > 0 Then

            savingsSubTotal = savingsSubTotal * (1 + savingsInterestRate)

        End If

        If corporateInterestRate > 0 Then

            corporateSubTotal = corporateSubTotal * (1 + corporateInterestRate)

        End If

    Next

    finalBalance = savingsSubTotal + corporateSubTotal
    txtBoxEstimatedBudget.Text = FormatCurrency(finalBalance)

End Sub
4

1 に答える 1

3

私は間違った論理がこのコードのブロックにあると信じています:

finalBalance = initialBalanceSavings + initialBalanceCorporate

For year = 2013 To theYear - 1
    subTotal = finalBalance * (1 + interestRate)
    finalBalance = subTotal
Next

このコードブロックと組み合わせる:

If checkBoxSavings.Checked Then
    interestRate = 0.07
ElseIf checkBoxCorporate.Checked Then
    interestRate = 0.05
End If

上記では、両方のチェックボックスをオンにしても金利は0.07に設定されているため、ループで誰かが2015を計算した場合は、最終的な合計を次のように計算します3000 * 1.07 * 1.07(2000 * 1.07 * 1.07) + (1000 * 1.05 * 1.05)

本質的に、金利を保持するために1つの変数のみを使用するため(および小計を保持するために1つの変数のみを使用するため)、コードは誰かが両方のアカウントを選択するシナリオを適切に説明できません。金利を保持するために2つの変数を用意することをお勧めします。

Dim savingsInterestRate as Double = 0
Dim corporateInterestRate as Double = 0

そして、小計を保持するための2つの変数:

Dim savingsSubTotal as Double = 0
Dim corporateSubTotal as Double = 0

そして、Forループで次のことを行います。

    savingsSubTotal = initialBalanceSavings
    corporateSubTotal = initialBalanceCorporate

    For year = 2013 To theYear - 1
        If savingsInterestRate > 0 Then
            savingsSubTotal = savingsSubTotal * (1 + savingsInterestRate)
        End If

        If corporateInterestRate > 0 Then
            corporateSubTotal = corporateSubTotal * (1 + corporateInterestRate)
        End If
    Next

    finalBalance = savingsSubTotal + corporateSubTotal

そして、金利チェックを次のように変更します。

If checkBoxSavings.Checked Then
    savingsInterestRate = 0.07
End If

If checkBoxCorporate.Checked Then
    corporateInterestRate = 0.05
End If

したがって、その人の選択を説明することができます(ElseIf両方をチェックすると、checkBoxSavings.Checkedすでに真であるため、企業レートが破棄されるという意味を使用して、ElseIfブロックに分類されることはありません)

于 2013-03-26T02:03:01.587 に答える