我目前正在完成一项家庭作业,遇到了一个我无法在书中或网上找到答案的问题。我没有找人来修改我的代码,我只需要指出正确的方向。
我目前正在尝试在try块中创建一个对象。在尝试阻止之前,我要求用户输入4个数字。这4个数字是我试图在try块中创建的对象的参数。我不确定如何将这些数据从用户传递到try块。
我的问题是,我应该如何在try块中创建一个对象?我知道我的当前代码一旦到达try块就会将所有内容重置为0。
static void Main(string[] args)
{
string choice;
//Input once choice is made----------------------------------------------
do
{
Console.WriteLine("**********************************************");
Console.WriteLine("Create Checking Account \"C\"");
Console.WriteLine("Create Checking Account \"S\"");
Console.WriteLine("Quit the Application \"Q\"");
Console.WriteLine("**********************************************");
Console.Write("Enter choice: ");
choice = Convert.ToString(Console.ReadLine());
if (choice != "Q")
{
switch (choice)
{
case "C":
Console.Write("Enter a name for the Account: ");
CA.setAccountName(Convert.ToString(Console.ReadLine()));
Console.Write("Enter an account Number: ");
CA.setAccountNumber(Convert.ToInt32(Console.ReadLine()));
Console.Write("Enter an initial balance: ");
CA.setBalance(Convert.ToDecimal(Console.ReadLine()));
Console.Write("Enter the fee to be charged per transcation: ");
CA.setFeeCharged(Convert.ToDecimal(Console.ReadLine()));
try
{
CheckingAccount CA = new CheckingAccount("",0,0,0);
CA.PrintAccount();
}
catch (Negative ex)
{
Console.WriteLine("**********************************************");
Console.WriteLine(ex.Message);
}
break;
答案 0 :(得分:1)
你不能做的是在你宣布它之前引用一个对象。在引用CA
之前,您甚至会在这些调用之前声明并创建它们。
关于try
块上的问题并创建对象:在try
块之外创建指针并将其分配到`try块中。然后,您可以在try块外部访问它,假设没有处理过的异常。
// outside of try
CheckingAccount CA = null;
try
{
CA = new CheckingAccount("",0,0,0);
/* Rest of the code unchanged*/
答案 1 :(得分:1)
您有一个名为CA的对象实例。 在try块之前放入数据,在try块中创建一个具有相同名称的新实例,这将覆盖旧实例并且数据丢失。 为什么要在try块中添加新实例?
答案 2 :(得分:0)
除了伊戈尔的回答:
您需要先存储值,以便稍后将它们传递给对象的构造函数,而不是直接设置刚刚读取的值。
而不是
CA.setAccountName(Convert.ToString(Console.ReadLine()));
使用
// You probably don't even need the Convert.ToString() here,
// since the read line is already a string.
string accountName = Convert.ToString(Console.ReadLine());
以后
// Do the same for the other values and replace the 0s.
CA = new CheckingAccount(accountName,0,0,0);
答案 3 :(得分:0)
在try块外部创建的变量仍然可以在其中使用。所以你可以这样做:
var accountName = Console.ReadLine();
var accountNumber = Int.Parse(Console.ReadLine());
var balance = Decimal.Parse(Console.ReadLine());
var feeCharged = Decimal.Parse(Console.ReadLine());
try
{
var CA = new CheckingAccount(accountName,accountNumber,balance,feeCharged);
CA.PrintAccount();
}
catch
{
// stuff
}
如果您需要在try块之后使用该帐户,请先申报。即 CheckingAccount CA = null;尝试阻止之前的某个地方。
注意:我也会将用户输入处理到try块中。用户输入无法转换为数字的内容是您可能想要处理的例外情况。