我是编程新手,我正在尝试使用Visual Studio中的Windows窗体应用程序创建密码管理程序。基本上可以添加,编辑和保存帐户。
我添加了一个Account类,其中我使用了addAccount方法。但它给了我一个错误,表示并非所有代码路径都返回一个值。为什么会这样?请跟我走慢我是新人。
namespace thePass
{
class Account
{
int numAccount;
string[] AccountName;
string[] Email;
string[] Username;
string[] Password;
//constructors
public Account(string in_AccountName, string in_Email, string in_Username, string in_Password)
{
numAccount = 0;
AccountName = new string[] { in_AccountName };
Email = new string[] { in_Email };
Username = new string[] { in_Username };
Password = new string[] { in_Password };
//NOT DONE KEEP GOING HERE CHECK NOTES FOR HELP maybe i leave as default?
}
public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
bool isFound = false;
bool isAdded = false;
for (int i = 0; i < numAccount; i++)
{
if (AccountName[i].CompareTo(in_Account) == 0)
{
isFound = true;
break;
}
if (isFound == false)
{
AccountName[numAccount] = in_Account;
numAccount++;
isAdded = true;
}
Email[numAccount] = in_Email;
Username[numAccount] = in_Username;
Password[numAccount] = in_Password;
return isAdded;
}
}
答案 0 :(得分:3)
您在for
结构中返回,根据条件,可能无法访问。你可以通过这样做来解决这个问题:
public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
bool isFound = false;
bool isAdded = false;
for (int i = 0; i < numAccount; i++)
{
if (AccountName[i].CompareTo(in_Account) == 0)
{
isFound = true;
break;
}
if (isFound == false)
{
AccountName[numAccount] = in_Account;
numAccount++;
isAdded = true;
}
Email[numAccount] = in_Email;
Username[numAccount] = in_Username;
Password[numAccount] = in_Password;
}
return isAdded;
}
要实现的重要一点是(只是添加这个,因为你说你是编程的初学者)只是因为你确定这样的条件(给定你的逻辑)永远不会发生,编译器无法知道这一点。简单地说,编译器的任务是强制执行,无论数据中出现什么异常,无论执行路径是什么,您的方法都会返回bool
值。
答案 1 :(得分:0)
addAccount
需要返回bool
,但问题是您的循环可能永远不会执行。你的循环条件是for (int i = 0; i < numAccount; i++)
;如果numAccount
开始时会发生什么,例如-1
?
您需要做的是返回循环外的<{1}} 。只需移动这一行:
isAdded
到循环的右括号下方。
答案 2 :(得分:0)
方法
public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
...
for (int i = 0; i < numAccount; i++)
{
...
return isAdded;
}
}
你在循环内返回值,但是你没有在循环外返回值,有错误。
你把PK置于代码中的低位,然后循环返回。 我认为应该是:
public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
...
for (int i = 0; i < numAccount; i++)
{
...
}
return isAdded;
}
答案 3 :(得分:0)
尝试此代码。您的部分问题是您在for循环中返回值。除非您运行代码,否则编译器无法知道您编写正确逻辑的天气。此外,'return'类型表示相应块或方法的结尾,因此您无法为您的每个条件返回一个值。所以那只是假,因此编译时错误。
public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
bool isFound = false;
bool isAdded = false;
for (int i = 0; i < numAccount; i++)
{
if (AccountName[i].CompareTo(in_Account) == 0)
{
isFound = true;
break;
}
if (isFound == false)
{
AccountName[numAccount] = in_Account;
numAccount++;
isAdded = true;
}
Email[numAccount] = in_Email;
Username[numAccount] = in_Username;
Password[numAccount] = in_Password;
}
return isAdded;
}
答案 4 :(得分:0)
你在for循环中返回boolean,但是如果方法没有进入for循环,它将无法返回任何值。这就是你的情况:
在构造函数中,您已声明numaccount = 0
现在,在您的方法调用中,您没有为numaccount分配任何值,因此它为0, 所以,它永远不会进入循环。如
public bool addAccount(string in_Account, string in_Email, string in_Username, string in_Password)
{
bool isFound = false;
bool isAdded = false;
for (int i = 0; i < numAccount; i++) // here i = numAccount = 0, hence this for loop will never execute
{
/* rest codes*/
return isAdded;
}
/* No return statement added here, hence the error*/
}