我仍然是二维数组的新手,但我正在尝试使用一些异常处理:
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
如果有人能提供帮助,那将非常感激。现在我想起来,我不认为我的陈述是有效的或必要的。
答案 0 :(得分: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]
已超出范围,可能会警告您。
答案 1 :(得分:1)
在第for(int i =0; i < employeesAge[employee][age]; i++)
行中,您将整数i
与employeesAge[3][4]
进行比较,但这些索引超出范围 - 在这种情况下,最大值为employeesAge[2][3]
。另外,你的for循环对我来说真的没有多大意义 - 你想要'foreach employee'吗?我怀疑 - 如果是这样的话,更接近的解决方案是:
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];
}
}
}
...可能更有意义,但我肯定会改变索引/数组名称以使其更具描述性。