Как зациклить определенный шаблон? - PullRequest
2 голосов
/ 14 января 2011
dataValues[0][0] = dataValues_all[2];
dataValues[0][1] = dataValues_all[6];
dataValues[0][2] = dataValues_all[10];
dataValues[0][3] = dataValues_all[14];
dataValues[0][4] = dataValues_all[18];
dataValues[0][5] = dataValues_all[22];
dataValues[0][6] = dataValues_all[26];
dataValues[0][7] = dataValues_all[30];
dataValues[0][8] = dataValues_all[34];
dataValues[0][9] = dataValues_all[38];

dataValues[1][0] = dataValues_all[42];
dataValues[1][1] = dataValues_all[46];
dataValues[1][2] = dataValues_all[50];
dataValues[1][3] = dataValues_all[54];
dataValues[1][4] = dataValues_all[58];
dataValues[1][5] = dataValues_all[62];
dataValues[1][6] = dataValues_all[66];
dataValues[1][7] = dataValues_all[70];
dataValues[1][8] = dataValues_all[74];
dataValues[1][9] = dataValues_all[78];

dataValues[2][0] = dataValues_all[82];
dataValues[2][1] = dataValues_all[86];
dataValues[2][2] = dataValues_all[90];
dataValues[2][3] = dataValues_all[94];
dataValues[2][4] = dataValues_all[98];
dataValues[2][5] = dataValues_all[102];
dataValues[2][6] = dataValues_all[106];
dataValues[2][7] = dataValues_all[110];
dataValues[2][8] = dataValues_all[114];
dataValues[2][9] = dataValues_all[118];

Я пробовал это, но это не сработало

/*for(int k=0; k<3; k++){

for(int u=0; u<10;u++){

for(int t=2; t<120; t=t+4){ 

dataValues[k][u] = dataValues_all[t]; }}}*/

Ответы [ 6 ]

3 голосов
/ 14 января 2011
for (int k = 0; k < 3; k++) {
    for (int u = 0; u < 10; u++) {
        dataValues[k][u] = dataValues_all[2 + (k * 40) + (u * 4)];
    }
}
2 голосов
/ 14 января 2011

Один цикл также будет делать:

for (int i = 0; i < 30; i++) 
    dataValues[i / 10][i%10] = dataValues_all[i*4+2];

Маленькое уточнение:

i/3 - целочисленное деление на 3, поэтому оно генерирует 0,0,0,1,1,1,2,2,2, ...

i%3 возвращает остаток от деления на 3, поэтому он дает: 0,1,2,0,1,2,0,1,2

2 голосов
/ 14 января 2011
int t = 2;
for (int k = 0; k < 3; k++)
    for (int u = 0; u < 10; u++) {
        dataValues[k][u] = dataValues_all[t];
        t = t + 4;
    }

Решает ли это вашу проблему?

1 голос
/ 14 января 2011

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

for(int k=0; k<3; k++) {
    for(int u=0; u<10;u++) {
        for(int t=2; t<120; t=t+4) {
            dataValues[k][u] = dataValues_all[t];
            System.out.println("k = " + k + ", u = " + u + ", t = " + t);
        }
    }
}

Посмотри, что он делает. Это почти наверняка покажет вам, в чем проблема.

В качестве альтернативы используйте отладчик и пошагово просматривайте эти переменные.

РЕДАКТИРОВАТЬ: Другие люди дали вам ответы, которые выглядят правильно; Мое намерение здесь состоит в том, чтобы описать, как отлаживать подобные ситуации в будущем, а не просто дать вам конкретный ответ на имеющуюся проблему. Я надеюсь, что вы найдете это полезным!

1 голос
/ 14 января 2011
for(int k=0; k<3; k++)
  for(int u=0; u<10;u++)
    dataValues[k][u] = dataValues_all[k*40 + u*4 + 2];
0 голосов
/ 14 января 2011

Чтобы ваше решение работало, в одном цикле должны быть увеличены две переменные (u и t). Вы делаете отдельные циклы для каждого из них, поэтому ваши итерации выглядят примерно так.

dataValues[0][0] = dataValues_all[2];
dataValues[0][0] = dataValues_all[6];
dataValues[0][0] = dataValues_all[10];
dataValues[0][0] = dataValues_all[14];
dataValues[0][0] = dataValues_all[18];
dataValues[0][0] = dataValues_all[22];

Код, размещенный выше (автор Марк-Франсуа), выглядит как правильное решение вашей проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...