Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does "Use of unassigned local variable" mean?

I keep getting this error for annualRate, monthlyCharge, and 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();         }     } } 
like image 344
Daniel Curro Avatar asked Apr 19 '11 01:04

Daniel Curro


1 Answers

The compiler isn't smart enough to know that at least one of your if blocks will be executed. Therefore, it doesn't see that variables like annualRate will be assigned no matter what. Here's how you can make the compiler understand:

if (creditPlan == "0") {     // ... } else if (creditPlan == "1") {     // ... } else if (creditPlan == "2") {     // ... } else {     // ... } 

The compiler knows that with an if/else block, one of the blocks is guaranteed to be executed, and therefore if you're assigning the variable in all of the blocks, it won't give the compiler error.

By the way, you can also use a switch statement instead of ifs to maybe make your code cleaner.

like image 98
Jacob Avatar answered Sep 29 '22 11:09

Jacob