我对于yearRate,monthlyCharge和lateFee不断收到此错误。
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace Lab_5___Danny_Curro { class Program { static void Main(string[] args) { string firstName; string lastName; int accNumber; string creditPlan; double balance; string status; Boolean late = false; double lateFee; double monthlyCharge; double annualRate; double netBalance; Console.Write("Enter First Name: "); firstName = Console.ReadLine(); Console.Write("Enter Last Name: "); lastName = Console.ReadLine(); Console.Write("Enter Account Number: "); accNumber = Convert.ToInt32(Console.ReadLine()); Console.Write("Enter Credit Card Plan Number[Blank Will Enter Plan 0]: "); creditPlan = Console.ReadLine(); Console.Write("Enter Balance: "); balance = Convert.ToDouble(Console.ReadLine()); Console.Write("Is This Account Late?: "); status = Console.ReadLine().Trim().ToLower(); if (creditPlan == "0") { annualRate = 0.35; //35% lateFee = 0.0; monthlyCharge = balance * (annualRate * (1 / 12)); return; } if (creditPlan == "1") { annualRate = 0.30; //30% if (status == "y") { late = true; } else if (status == "n") { late = false; } if (late == true) { lateFee = 25.00; } monthlyCharge = balance * (annualRate * (1 / 12)); return; } if (creditPlan == "2") { annualRate = 0.20; //20% if (status == "y") { late = true; } else if (status == "n") { late = false; } if (late == true) { lateFee = 35.00; } if (balance > 100) { monthlyCharge = balance * (annualRate * (1 / 12)); } else { monthlyCharge = 0; } return; } if (creditPlan == "3") { annualRate = 0.15; //15% lateFee = 0.00; if (balance > 500) { monthlyCharge = (balance - 500) * (annualRate * (1 / 12)); } else { monthlyCharge = 0; } return; } netBalance = balance - (lateFee + monthlyCharge); Console.WriteLine("Name: \t\t\t {0} {1}", firstName, lastName); Console.WriteLine("Account Number: \t{0}", accNumber); Console.WriteLine("Credit Plane: \t\t{0}",creditPlan); Console.WriteLine("Account Late: \t\t{0}", late); Console.WriteLine("Balance: \t\t{0}", balance); Console.WriteLine("Late Fee: \t\t{0}", lateFee); Console.WriteLine("Interest Charge: \t{0}", monthlyCharge); Console.WriteLine("Net Balance: \t\t{0}",netBalance); Console.WriteLine("Annual Rate: \t\t{0}", annualRate); Console.ReadKey(); } } }
编译器不够聪明,无法知道您的至少一个if块将被执行。因此,它不会看到像这样的变量annualRate无论如何都会被赋值。这是使编译器理解的方法:
if
annualRate
if (creditPlan == "0") { // ... } else if (creditPlan == "1") { // ... } else if (creditPlan == "2") { // ... } else { // ... }
编译器知道对于if / else块,可以保证其中一个块可以执行,因此,如果在所有块中分配变量,则不会产生编译器错误。
顺便说一句,您也可以使用switch语句代替ifs来使代码更整洁。
switch