Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [java]превратить много for в один


Автор: akary 7.5.2011, 19:48
Пожалуйста кто знает
как здесь можно for сделать  одной формулой или так чтобы можно было изменять само  количество циклов for 
постоянно  менять  в ручную их количество нельзя,  и в строку они должны добавляться именно в такой последовательности
 или может можно в другом цикле??? while? do-while?


Код

 for (int i = 0; i < tokens.length; i++) {
            for (int j = i; j < tokens.length; j++) {
                for(int k=j, j<tokens.length; k++){ 
                       ...
                         ...
                           ...

  String combination = "[" + tokens[i] + "  " + tokens[j] + "  "+tokens[k]  ...    /* (столько сколько циклов) */ ..."]";
                System.out.println("  " + combination);
            }
        }
}



Автор: ИванМ 10.5.2011, 13:12
Как вариант через рекурсию. Вызывать саму себя, пока не достигнешь конечного цикла.

Автор: LSD 12.5.2011, 11:19
Код

import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class Combinations {
    public static final int COMBINATION_COUNT = 4;

    public static void main(String[] args) throws IOException {
        String[] tokens = {"a", "b", "c", "d", "e", "f", "g"};
        System.out.println("Tokens: " + Arrays.toString(tokens));

        System.out.println("Combinations:");
        for (String token : getCombinations(tokens, 0, COMBINATION_COUNT)) {
            System.out.println("    " + token);
        }
    }

    private static String[] getCombinations(final String[] tokens, final int from, final int combinationCount) {
        if (combinationCount == 1) {
            return Arrays.copyOfRange(tokens, from, tokens.length);
        } else {
            List<String> combinations = new ArrayList<String>();
            for (int i = from; i < tokens.length; i++) {
                String token = tokens[i];
                String[] subCombinations = getCombinations(tokens, i, combinationCount - 1);
                for (String subCombination : subCombinations) {
                    combinations.add(token + subCombination);
                }
            }
            return combinations.toArray(new String[combinations.size()]);
        }
    }
}

Автор: akary 12.5.2011, 21:14
 smile Спасибки))))

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)