2014-09-22 3 views
0

У меня проблема с увеличением 4 вложенных циклов. Скажем, у вас был массив типа double и множество целых чисел для увеличения циклов. Вот примерПриращение нескольких вложенных циклов while

private static double[] approxOfU(double w, double x, double y, double z, 
     double u) { 
    double a = 0, b = 0, c = 0, d = 0; 
    final double[] powerArray = { -5.0, -4.0, -3.0, -2.0, -1, (-1.0/2.0), 
      (-1.0/3.0), (-1.0/4.0), 0, (1.0/4.0), (1.0/3.0), 
      (1.0/2.0), 1, 2, 3, 4, 5 }; 
    double[] temp = new double[5]; 
    double approx; 
    int i = 0, j = 0, k = 0, l = 0; 

    while (i < powerArray.length) { 
     a = powerArray[i]; 
     while (j < powerArray.length) { 
      b = powerArray[j]; 
      while (k < powerArray.length) { 
       c = powerArray[k]; 
       while (l < powerArray.length) { 
        d = powerArray[l]; 
        approx = Math.pow(w, a) * Math.pow(x, b) 
          * Math.pow(y, c) * Math.pow(z, d); 
        if (Math.abs(approx - u)/u <= 0.01) { 
         temp[0] = a; 
         temp[1] = b; 
         temp[2] = c; 
         temp[3] = d; 
         temp[4] = approx; 

        } 
        l++; 

       } 
       k++; 
      } 
      j++; 
     } 
     i++; 
    } 

    return temp; 
} 

Где я могу поместить свои приращения, такие как i ++, j ++, k ++ и l ++? Назначение требует только, если в этой части проекта используются циклы. Для циклов части проекта я уже работал. Пожалуйста, поделись своими мыслями. Этот код не является реальным кодом для назначения, но я хочу понять логику обновления этих вложенных циклов и иметь возможность получать из них нужные данные. Когда я делаю вывод на экран с использованием переменных ниже, я получаю 0, поэтому что-то не так. Обычно я добавляю приращение на 1 (i ++, j ++, ... и т. Д.) В конце фигурной скобки для цикла. В этом случае этот метод не дает хороших результатов. Пожалуйста помоги! :)

+0

Как правило, вы не добавляете приращение ** в конец ** фигурной скобки для цикла, вы ставите его ** перед фигурной скобкой **, поэтому он находится в цикле и обновляется правильно, поэтому не происходит бесконечного цикла – nem035

+0

давайте немного изменим это, я собираюсь отредактировать его, потому что 0-й все еще появляются. –

+0

При запуске этого кода выше a, b, c и d в качестве нулей и так приблизительное значение, так что здесь что-то не так –

ответ

0

как то же, что и для цикла for, выполнить приращение в конце цикла.

double[] updateArray = new double[7]; 
double w,x,y,z; 
int i=0, j=0, k=0, l=0; 
while(i < updateArray.length) 
{ 
     w = updateArray[i]; 
    while(j < updateArray.length) 
    { 
     x = updateArray[j]; 
     while(k < updateArray.length) 
     { 
      y = updateArray[k]; 
      while(l < updateArray.length) 
      { 
        z = updateArray[l]; 
       l ++; 
      } 
     k ++; 
     } 
    j ++; 
    } 
i ++; 
} 
+0

Я попытался ответить, как вы видите в моем новом редактировании. К сожалению, хотя при попытке обновить этот расчет и получить правильные значения массива для каждого целого, кажется, сложно. Цикл for был намного проще, чем это, но только тогда, когда в этом случае разрешены циклы. –

0

Вы можете сделать это следующим образом.

double[] updateArray = new double[7]; 
double w,x,y,z; 
int i=0, j=0, k=0, l=0; 
while(i++ < updateArray.length -1) 
{ 
     w = updateArray[i]; 
    while(j++ < updateArray.length -1) 
    { 
     x = updateArray[j]; 
     while(k++ < updateArray.length -1) 
     { 
      y = updateArray[k]; 
      while(l++ < updateArray.length -1) 
      { 
        z = updateArray[l]; 
      } 
     } 
    } 

} 
+2

Посмотрите на свое предложение еще раз. Он выкинет ArrayIndexOutOfBoundsException. – Radiodef

+0

@Le Даи Хан 'Исключение в потоке«основной»java.lang.ArrayIndexOutOfBoundsException: 7 \t на com.test.Test23.main (Test23.java:15) ' –

1

Если вы не делаете никакой магии с индексами, и нужно только элемент массива в цикле (не индекс), то вы можете использовать улучшенный цикл:

double[] updateArray = new double[7]; 
/* fill your array */ 
for(double i : updateArray) { 
    for(double w : updateArray) { 
     for(double y : updateArray) { 
      for(double x : updateArray) { 
       // No incrementing or indices required :) 
      } 
     } 
    } 
} 
+0

, к сожалению, им делать расчеты и только тогда, когда петля допускается в эта часть –

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