Dan*_*rro 30 c# unassigned-variable
我一直收到annualRate,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();
}
}
}
Run Code Online (Sandbox Code Playgroud)
Jac*_*cob 56
编译器不够聪明,不知道至少会有一个if块被执行.因此,它没有看到annualRate无论如何都会分配变量.以下是如何使编译器理解:
if (creditPlan == "0")
{
// ...
}
else if (creditPlan == "1")
{
// ...
}
else if (creditPlan == "2")
{
// ...
}
else
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
编译器知道使用if/else块,其中一个块保证会被执行,因此如果您在所有块中分配变量,它将不会给编译器错误.
顺便说一句,您也可以使用switch语句而不是ifs来使代码更清晰.
Kyl*_*man 15
将您的声明更改为:
double lateFee = 0.0;
double monthlyCharge = 0.0;
double annualRate = 0.0;
Run Code Online (Sandbox Code Playgroud)
导致错误是因为代码中至少有一条路径,这些变量最终没有设置为任何东西.
Pet*_*ete 11
因为如果if语句都没有计算为true,那么将取消分配局部变量.在那里抛出else语句,并在if语句不计算为true的情况下为这些变量赋值.如果不能使错误消失,请回到此处.
另一种选择是在代码开头声明变量时将变量初始化为某个默认值.
给他们一个默认值:
double lateFee=0.0;
double monthlyCharge = 0.0;
double annualRate = 0.0;
Run Code Online (Sandbox Code Playgroud)
基本上,所有可能的路径都不会初始化这些变量.
小智 5
使用关键字“默认”!!!
string myString = default;
double myDouble = default;
if(!String.IsNullOrEmpty(myString))
myDouble = 1.5;
return myDouble;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
187317 次 |
| 最近记录: |