2015-04-12 3 views
0

у меня есть это:Refactor избегать использования для ... далее несколько раз

For k = 1 to 100 
    Statement 1 
Next 

For j = 1 to 100 
    Statement 2 
Next 

For l = 1 to 100 
    Statement 3 
Next 

Я хотел бы поставить все три заявления в одном сингле For ... Next

For k = 1 to 100 
    Statement 1 
    Statement 2 
    Statement 3 
Next 

однако Я не могу, потому что циклы необходимо запускать последовательно для каждого оператора (сначала нужно запустить оператор 1 для всех значений от 1 до 100, затем то же самое, но для Statement 2 и т. Д.). Есть ли способ упростить это? Я уверен, что должно быть. Благодаря!

+0

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

ответ

0
For n=1 to 3 
For k = 1 to 100 
    If n=1 Then Statement 1 
    If n=2 Then Statement 2 
    If n=3 Then Statement 3 
Next 
Next 

Но на самом деле ваш первый пример опрятнее и положить все операторы внутри одного цикла не просто вещи вообще ...

+0

как, это было легко. большое спасибо! – David

+0

Итак, вы отправляете OP вниз по этой кроличьей норе ... –

1

Я отвергаю основную направленность этого вопроса.

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

Чтобы более точно ответить на ваш вопрос: есть ли способ упростить это?

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

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

Например, ваша процедура высокого уровня будет выглядеть следующим образом:

Dim n As Long 
n = 100 
DoThing1 n 
DoThing2 n 
DoThing3 n 

процедуры нижнего уровня:

Sub DoThing1(ByVal n As Long) 
    Dim i As Long 
    For i = 1 To n 
     Statement1 
    Next i 
End Sub 

и похож на два других.

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