2011-01-13 3 views
2
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]; }}}*/ 
+4

Это не сработало, потому что вы прокомментировали все это? – skaffman

+0

Какова точная взаимосвязь между dataValues ​​[i] [j] и индексом в dataValues_all, который вы хотите? Что произошло при запуске кода? Пожалуйста, уточните в своих вопросах. – templatetypedef

ответ

3
for (int k = 0; k < 3; k++) { 
    for (int u = 0; u < 10; u++) { 
     dataValues[k][u] = dataValues_all[2 + (k * 40) + (u * 4)]; 
    } 
} 
+0

Отличный ответ! Я об этом не думал. –

+0

спасибо, он работает .. как у вас получилось 40? – razshan

+0

Ну, есть три набора из десяти заявлений; первый из каждого набора равен {2,42,82}. Каждые 40, кроме следующего значения. Мое решение по существу такое же, как и у Марка-Франсуа, за исключением того, что я обходится без промежуточной переменной и предварительно умножаю приращение 4 с максимальным значением внутреннего цикла, 10. – wmorrell

2
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
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

. переменные, операторы и числа. Это так уродливо. –

0

Для того, чтобы ваше решение, чтобы работать в одном цикле две переменные должны быть увеличен (U и Т). Вы делаете отдельные циклы для каждого из них, что заставляет ваши итерации выглядеть примерно так.

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]; 

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

2

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

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

+0

Смешные; Я просто читал вопрос + ответы программистов, говорящих о преждевременной оптимизации и компромиссе с читаемым кодом (http://programmers.stackexchange.com/questions/33020/when-is-optimization-not-premature-and-therefore-not -зло). Да, это умный и лаконичный, но не совсем легкий для чтения. –

+0

Да, но я также считаю, что другие не очень читаемы. – Rekin

+0

Хороший комментарий разрешит проблему. –

1

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

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); 
     } 
    } 
} 

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

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

EDIT: Другие люди дали вам ответы, которые выглядят правильно; мое намерение здесь состоит в том, чтобы описать, как отлаживать подобные ситуации в будущем, а не просто дать вам конкретный ответ на проблему. Надеюсь, вы сочтете это полезным!

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