2016-04-09 2 views
1

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

C A R D 
A R E A 
R E A R 
D A R T 

Это работает, но он включает в себя много вложенных циклах и я жесткое кодирование петли в этом случае, когда я стараюсь, чтобы сформировать квадрат 4х4.

Я ищу гибкость для прохождения в квадратном размере, например, 5x5 или 6x6 и т. Д. И, соответственно, петлю. Как я могу это сделать.

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

Когда я формирую квадрат 4x4, я заканчиваю цикл 4 раза, когда каждая петля проверяет разные подстроки, чтобы получить правильный квадрат. Когда требуется 5x5, мне понадобится 5 циклов для проверки. Я хочу решить проблему, когда я увеличиваю циклы уменьшения в зависимости от параметра/или пути к циклу, не создавая так много для циклов. Могу ли я получить некоторые рекомендации по этому поводу.

void makeWord(ArrayList<String> arr, int size){ //want to use this size to determine amount of loop 

    String first, second, third, fourth; 
    for (int i = 0; i < arr.size(); i++) { 

     first = arr.get(i); 

     for (int j = 0; j < arr.size(); j++) { 
      if(first.substring(1,2).equals(arr.get(j).substring(0,1)) && 
        (!first.equals(arr.get(j)))){ 
       second = arr.get(j); 
      } 
      else { 
       second = " "; 
      } 

      if (!second.trim().isEmpty()) { 
       for (int k = 0; k < arr.size(); k++) { 
        if (first.substring(2, 3).equals(arr.get(k).substring(0, 1)) && 
          second.substring(2, 3).equals(arr.get(k).substring(1, 2)) && 
          (!first.equals(arr.get(k)) && (!second.equals(arr.get(k))))) { 
         third = arr.get(k); 
        } else { 
         third = " "; 
        } 


       } 
      } 
     } 
    } 
} 
+0

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

+0

@ArtemioRamirez Отредактировал вопрос. Удаление выполняемых проверок только начнет задавать дополнительные вопросы о том, в чем суть этих циклов. – ksv99

+0

Препятствуйте проблеме вверх; один способ найти слова, другой - показать их. –

ответ

0

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

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

String[][] matrix = new String[size][size]; 

Это позволяет строить квадраты любого размера и, кроме того, вам не нужны все эти substring() звонков больше, что будет supposingly увеличить производительность тоже ,

0

Я думаю, что следующий код отрезала решает проблему:

public static void printSqaure(List<String> list, int size){ 
    for(int i=0; i< list.size(); i++){ 
     if(i <= size){ 
      String subStr = list.get(i).substring(0, size); 
      System.out.println(subStr); 
     } 

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