为了账号安全,请及时绑定邮箱和手机立即绑定

当前上下文中不存在此变量

当前上下文中不存在此变量

C#
红颜莎娜 2021-06-29 21:20:28
string[,] cusName = { { "John", "Smith" }, { "Will", "James"} , { "Bryan", "Doe" } };for (int x = 0; x < cusName.GetLength(x); x++){    for (int j = x + 1; j < cusName.GetLength(j); j++)    {        Console.Write("{0} ", cusName[x, j]);    }    Console.Write("{0} ", cusName[x, j]);}我的问题是最后一个Console.Write总是会产生错误。它表示该变量j在当前上下文中不存在。
查看完整描述

3 回答

?
慕仙森

TA贡献1827条经验 获得超7个赞

正如其他人在评论中已经指出的那样,您无法j在声明它的循环之外访问。因此,您要么必须在循环j 之前声明,要么以不同于重用的方式访问最后一个索引j。


话虽如此,目前还不清楚您想用代码做什么,而且您可能根本不想在Console.Write那里使用它。


顺便说一句,您的代码有一个大问题:


for (int x = 0; x < cusName.GetLength(x); x++)

x只要它小于 ,这个 for 循环就会递增cusName.GetLength(x)。Array.GetLength用于获取多维数组中某个维度的元素数。由于您的数组有两个维度,因此您可以进行的唯一有效调用GetLength 是GetLength(0)针对第一个维度和GetLength(1)第二个维度。有一个变量,尤其是在循环中递增的变量,很可能会中断。


我假设您最初想做这样的事情:


for (int x = 0; x < cusName.GetLength(0); x++)

{

    for (int j = 0; j < cusName.GetLength(1); j++)

    {

        Console.Write("{0} ", cusName[x, j]);

    }

}

如果你想在循环之后继续使用循环变量,你可以在之前声明它:


int j;

for (j = 0; j < cusName.GetLength(1); j++)

{

    …

}

Console.Write(j);

请注意,在循环之后,j具有值,cusName.GetLength(1)因为这是循环的工作方式:在每次循环迭代后,变量将递增,如果条件 ( j < cusName.GetLength(1)) 为真,则将执行循环体。所以 for 循环总是以循环变量的另一个增量结束。


这意味着如果您使用循环变量作为索引,那么该索引将在循环后超出数组的范围。所以如果你想重用变量,你应该记住这一点。


通常,如果您不使用循环变量而是再次单独计算最后一个索引,则会更容易和更清晰:


cusName[x, cusName.GetLength(1) - 1])


查看完整回答
反对 回复 2021-07-17
  • 3 回答
  • 0 关注
  • 191 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信