2016-03-11 4 views
0

Я нахожусь на своем конце, и я уверен, что это простая ошибка. Я искал это, и я видел эту аналогичную проблему, представленную несколько раз, но мой код похож на то, что я видел, поэтому я все еще не могу понять, что я сделал неправильно.Значения, не соответствующие правилу в массиве 2d

Я работаю над домашним заданием для класса, который просит пользователя о количестве продуктов, съеденных тремя обезьянами в течение недели, а затем сохраняет эти записи в массиве 2d.

Прошу простить мои ужасные имена переменных, я собираюсь изменить их, как только я разбиваю это на разные функции, но я хотел сначала запустить его в главном. Я протестировал его, и моя сумма, средняя, ​​наименьшая и большинство операторов работают, но по какой-то причине данные, которые я вводил в массив, пропускают числа или перезаписывающие числа (я также опубликовал вывод ниже).

Когда я запускаю код: #include // КИН, соиЬ, ENDL #include #include с использованием патезраса;

const int DAYS_WEEK = 7; 
    const int MONKEYS = 3; 


    int main() 
    // main function       
    { 
     // One dimensional array just to prove I could do it. Also it holds   the names of the days of the week, for the cout statement below that asks for input 
     string dayOfWeek[] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri",   "Sat" }; 
     //2d array that will store the food eaten by each monkey as it is entered in by the user below 
     double foodEaten[DAYS_WEEK][MONKEYS]; 
     //value to store the sum of all the food eaten by all monkeys 
     double total = 0; 
     //count to keep track of how many times the sum loop runs below, so   I can use it as the divisor to find the average 
     int count = 0; 
     //value to hold the average once found 
     double average = 0; 
     //value to hold the least amount of food eaten 
     double least = 0; 
     //value to hold the highest amount of food eaten 
     double most = 0; 

     //This nested loop asks for input from the user and should input the   values entered into the two dimensional array 
     for (int monkey = 0; monkey < MONKEYS; monkey++) 
     { 
      for (int day = 0; day < DAYS_WEEK; day++) 
      { 
       cout << "Enter pounds of food eaten by monkey " 
        << (monkey + 1) 
        << " on " << dayOfWeek[day] << ": " ; 
       cin >> foodEaten[monkey][day]; 
       //This will double check that the user hasn't entered a   negative number and if they have throw them back into the loop 
       while (foodEaten[monkey][day] < 0) 
       { 
        cout << "Enter a non-negative amount: "; 
        cin >> foodEaten[monkey][day]; 
       } 
      } 
      cout << endl; 
     } 

     //This should display the table of how much food was eaten after it is all entered 
     cout << setw(6) << "Monkey" 
      << setw(5) << "Sun" 
      << setw(5) << "Mon" 
      << setw(5) << "Tue" 
      << setw(5) << "Wed" 
      << setw(5) << "Thu" 
      << setw(5) << "Fri" 
      << setw(5) << "Sat" << endl; 
     for (int monkeyLord = 0; monkeyLord <= 2; monkeyLord++) 
     { 
      cout << setw(6) << (monkeyLord + 1) << setw(5) <<   foodEaten[monkeyLord][0] << setw(5) << foodEaten[monkeyLord][1] << setw(5) <<   foodEaten[monkeyLord][2] << setw(5) << foodEaten[monkeyLord][3] << setw(5) <<   foodEaten[monkeyLord][4] << setw(5) << foodEaten[monkeyLord][5] << setw(5) << foodEaten[monkeyLord][6] << endl; 
     } 

     //This should sum all the amounts of food eaten by the monkeys 
     for (int monkeyTotal = 0; monkeyTotal <= 2; monkeyTotal ++) 
     { 
      for (int dayTotal = 0; dayTotal <= 6; dayTotal ++) 
      { 
       total = total + foodEaten[monkeyTotal][dayTotal]; 
       count++; 
      } 
     } 

     //This should find the average amount of food eaten 
     average = total/count; 
     cout << "The average food eaten per day by all monkeys  :" <<   setw(6) << average << " pounds" << endl; 

     //This shoud find the least amount of food eaten 
     least = foodEaten[0][0]; 
     for (int monkeyLeast = 0; monkeyLeast <= 2; monkeyLeast ++) 
     { 
      for (int dayLeast = 0; dayLeast <= 6; dayLeast ++) 
      { 
       if (foodEaten[monkeyLeast][dayLeast] < least) 
        least = foodEaten[monkeyLeast][dayLeast]; 
      } 
     } 
     cout << "The least amount of food eaten by any monkey  :" <<   setw(6) << least << " pounds" << endl; 

     //This should find the highest amount of food eaten 
     most = foodEaten[0][0]; 
     for (int monkeyMost = 0; monkeyMost <= 2; monkeyMost ++) 
     { 
      for (int dayMost = 0; dayMost <= 6; dayMost ++) 
      { 
       if (foodEaten[monkeyMost][dayMost] > most) 
        most = foodEaten[monkeyMost][dayMost]; 
      } 
     } 
     cout << "The largest amount of food eaten by any monkey  :" <<   setw(6) << most << " pounds" << endl; 
     return 0; 
    } 

По какой-то причине это то, что выглядит мой выход, как:

 
Enter pounds of food eaten by monkey 1 on Sun: 1 
Enter pounds of food eaten by monkey 1 on Mon: 2 
Enter pounds of food eaten by monkey 1 on Tue: 3 
Enter pounds of food eaten by monkey 1 on Wed: 4 
Enter pounds of food eaten by monkey 1 on Thu: 5 
Enter pounds of food eaten by monkey 1 on Fri: 6 
Enter pounds of food eaten by monkey 1 on Sat: 7 

Enter pounds of food eaten by monkey 2 on Sun: 8 
Enter pounds of food eaten by monkey 2 on Mon: 9 
Enter pounds of food eaten by monkey 2 on Tue: 10 
Enter pounds of food eaten by monkey 2 on Wed: 11 
Enter pounds of food eaten by monkey 2 on Thu: 12 
Enter pounds of food eaten by monkey 2 on Fri: 13 
Enter pounds of food eaten by monkey 2 on Sat: 14 

Enter pounds of food eaten by monkey 3 on Sun: 15 
Enter pounds of food eaten by monkey 3 on Mon: 16 
Enter pounds of food eaten by monkey 3 on Tue: 17 
Enter pounds of food eaten by monkey 3 on Wed: 18 
Enter pounds of food eaten by monkey 3 on Thu: 19 
Enter pounds of food eaten by monkey 3 on Fri: 20 
Enter pounds of food eaten by monkey 3 on Sat: 21 

Monkey Sun Mon Tue Wed Thu Fri Sat 
    1 1 2 3 8 9 10 15 
    2 8 9 10 15 16 17 18 
    3 15 16 17 18 19 20 21 
The average food eaten per day by all monkeys  :12.7143 pounds 
The least amount of food eaten by any monkey  :  1 pounds 
The largest amount of food eaten by any monkey  : 21 pounds 

-------------------------------- 
Process exited after 19.28 seconds with return value 0 
Press any key to continue . . .

Вы можете увидеть, начинающийся в среду в первом ряду, что данные не зеркальное отображение того, что я вошел, и это происходит снова на второй ряд, но не третий.

Спасибо за любую помощь.

+0

Посмотрите еще раз на декларацию 'foodEaten', а затем на то, как вы ее используете. Где дни и где обезьяны в декларации по сравнению с тем, как вы ее используете? –

+1

Изменить 'foodEaten [обезьяна] [день];' to 'foodEaten [день] [обезьяна];' – Rabbid76

+0

Спасибо, это очень полезно. Я не понимал, что инициализирую его столбцами, а затем строками. Я планировал инициализировать его как строки, затем столбцы. ! –

ответ

2

Вы должны получить доступ к

foodEaten[day][monkey] 

не

foodEaten[monkey][day] 
0

Это решение: вы должны заменить эту строку: double foodEaten[DAYS_WEEK][MONKEYS]; с этим double foodEaten[MONKEYS][DAYS_WEEK];

здесь есть выход:

enter image description here

0

Проблема вы столкнулись в том, что: В действительности ваш массив является:

double foodEaten[7][3] 

Но когда вы получаете доступ к элементам она в следующем порядке:

foodEaten[Monkey][DayOfTheWeek] 

Всегда обеспечивайте логическую согласованность в вашем массиве, то есть, если ваши строки являются Days и d ваши столбцы Monkeys, убедитесь, что ваши итераторы тоже одного типа.

В других ответах уточнили, используя

foodEaten[DayOfTheWeek][Monkey] 

бы решить эту проблему.

Смежные вопросы