0

我仍然是二维数组的新手,但我试图让一些异常处理来处理这个问题:

const int employee = 3;   // number of employees
const int age = 4;      // number of ages
int employeesAge[employee][age] = { {50 , 0 , 45, 101}, {45, 6 ,7, 8} , {25 , 8,0, 35}}

for(int i =0; i < employeesAge[employee][age]; i++)
   if(employeesAge[employee][age] < 0 || employeesAge[employee][age] > 100)
   {
      try
       {
         throw employeesAge[employee][age];
       }
       catch(int param)
       {
          cout << "employee can't be under 0 age or over 100 to work here" << endl;
       }
    }

现在我什至不确定我所做的是否可能,但这是我得到的错误:

uninitialized local variable 'employeesAge' used

如果有人可以提供帮助,将不胜感激。现在我考虑一下,我认为我拥有的 for 语句不是有效或必要的。

4

2 回答 2

1

在该行for(int i =0; i < employeesAge[employee][age]; i++)中,您将整数i与进行比较employeesAge[3][4],但这些索引超出了范围 - 在这种情况下,最大值是employeesAge[2][3]。此外,你的 for 循环对我来说真的没有多大意义——你想要“foreach 员工”吗?我怀疑是这样 - 如果是这样的话,更接近的解决方案是:

for(int i = 0; i < employee; i++)
{
    if(employeesAge[i][age] < 0 || employeesAge[i][age] > 100) {
    ...
}

但即使这样也不完全正确,现在age索引超出了该数组的范围。我不确定这里的逻辑是什么——为什么一个员工会有多个年龄与他们相关联?正如您的阵列现在一样,看起来您有 3 名员工,每名员工有 4 个年龄。我猜一下,假设您有 3 组员工,每个组有 4 名成员。如果是这样的话,代码:

for(int i = 0; i < employee; i++)
{
    for(int j = 0; j < age; j++)
    {
        if(employeesAge[i][j] < 0 || employeesAge[i][j] > 100) {
            throw employeesAge[i][j];
        }
    }

}

...可能更有意义,但我肯定会更改索引/数组名称以更具描述性。

于 2012-08-13T22:54:50.240 回答
1

看看你的缩进和大括号(这不是错误,但我想指出它,因为它可能会咬你的屁股并导致你长时间痛苦的调试聚会):

for(int i =0; i < employeesAge[employee][age]; i++)
    if(employeesAge[employee][age] < 0 || employeesAge[employee][age] > 100) {
        try {
            throw employeesAge[employee][age];
        }
        catch(string param) {
            cout << "employee can't be under 0 age or over 100 to work here" << endl;
        }
    }

for循环没有左大括号或右大括号,如果你不小心的话肯定会导致问题)

但更重要的是你循环错了。你有for(int i =0; i < employeesAge[employee][age]; i++),但你从不使用i. 这是错误的,因为 1)employeesAge[employee][age]超出范围(只有索引[0][0]有效[employee - 1][age - 1]);和 2) 因为你从不使用i并继续使用employeesAge[employee][age]这表明你只是继续检查相同的值。您的编译器可能足够聪明,可以知道这employeesAge[employee][age]是超出范围的,并且可能会警告您。

于 2012-08-13T22:48:30.700 回答