Как мне получить массив в цикле for, который фактически изменяет размер цикла for при каждом запуске?

#java

#java

Вопрос:

Я хочу, чтобы мой цикл for имел длину, изменяющуюся на число. Могу ли я это сделать?

Я действительно ничего не пробовал

 for (int i=0; i < colsAdd[i] ; i  ){            
   System.out.print("     0.0");    
}
  

На самом деле colsAdd[0] — это единственный размер.

Комментарии:

1. «Я действительно ничего не пробовал» Почему бы и нет? Также что вы подразумеваете под длиной? Как в i < colsAdd[i] разделе?

2. У вас есть реальный вариант использования … чего-то, чего вы хотите достичь здесь? Если вы спрашиваете, может ли colsAdd[i] изменяться во время цикла … конечно, может. Это выражение повторно вычисляется каждый раз в цикле, чтобы определить, должен ли цикл завершаться или нет. Этот тестовый оператор может быть вообще любым. — тот факт, что большинство циклов for, которые выглядят следующим образом, имеют постоянную «длину», которая тестируется и которая никогда не меняется, нет причин, по которым это не может быть невозможно…. как в вашем примере. Однако я не могу представить, как логика, которую вы показываете, когда-либо будет практичной. Но, возможно.

3. если colsAdd[0] является единственным значением в массиве colsAdd , и если его значение больше 0 , вы получите ошибку выхода индекса массива за пределы или что-то подобное после первой итерации вашего цикла, потому что вы будете пытаться обратиться к colsAdd[1] , которая не существует.

Ответ №1:

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

Если мы изменим код, который вы вставили выше, чтобы он соответствовал приведенной ниже диаграмме, правила станут очевидными.

 for (initialization; condition; updateCounter){            
   codeInsideLoop    
}
  

блок-схема цикла for

Любой код может входить в эти части цикла for, их даже можно оставить пустыми! Например, следующий код эквивалентен циклу while (true).

 for (;true;){            
   System.out.print("This will run forever!");    
}
  

Или этот цикл for увеличивается внутри цикла.

 for (int i=0; i < 10;){            
   System.out.print("This will print 10 times");  
   i  ;
}
  

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

 for (int i=0; keepLooping(i); i  ){            
   System.out.print("This will print 10 times");  
   i  ;
}
  

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

Комментарии:

1. Приятно! Я 1 сделал бы это очень хорошее представление о том, что делает оператор for. Мне действительно любопытно, поможет ли это оператору, или его непонимание намного более простое, чем это. В любом случае, кто-то, скорее всего, столкнется с этим и ему это поможет.

2. Спасибо! Я надеюсь, что это поможет ему, но трудно сказать без дополнительной информации.