0

私はまだ2D配列に慣れていませんが、これを処理するためにいくつかの例外処理を取得しようとしています。

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ループは私にはあまり意味がありません-「foreachemployee」が必要ですか?私はそう思う-もしそうなら、より近い解決策は:

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

しかし、それでも完全には正しくありません。現在、ageインデックスはその配列の範囲外です。ここでの論理がわかりません-なぜ1人の従業員に複数の年齢が関連付けられているのでしょうか?アレイが現在のように、それぞれ4つの年齢の3人の従業員がいるように見えます。推測して、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 に答える