2016-04-09 1 views
1

私は1000の文字列を含むArrayListを持っています。私はそのArrayListをループし、単語を見つけ出し、それらから四角形を形成しようとしています。たとえば、次のようにそれが動作しているが、それは、ネストされたループの多くが含まれますし、私は正方形の4×4を形成しようとしています。このインスタンス内のループをハードコーディングしていますパラメータの入力に応じてループを減らしたり、大きくしたりします。

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

私は、例えば5x5または6x6などの正方形のサイズで渡す柔軟性を持っていて、それに応じてループを探しています。それをどうやって行うことができますか?

これは単なるループだった場合、私はちょうど整数を渡して、その整数に応じてループします。しかし、私は入れ子になっているので、必要なForループの数は異なるので混乱します。

私が4x4の四角形を形成しているとき、各ループが異なる部分文字列をチェックして正しい正方形を導出するところで4回ループします。 5x5が必要な場合は、チェックを行うために5ループが必要です。私は、多くのForループを作成せずにパラメータ/またはループする方法に応じて減少ループを増やすという問題を解決することを意味します。私はこれに関するいくつかのガイダンスを得ることができますか?

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

問題を解決してください。 1つは単語を見つける方法、もう1つは単語を表示する方法です。 –

答えて

0

私は私はあなたの質問の権利を得た場合、完全にわからないが、あなたは、あなたが任意のサイズの正方形を構築することができるようにあなたのコードをより柔軟にする方法を探しているなら、あなたの主な問題は方法あなたです文字列を格納しています。

ループは定義する文字列の数に依存するため、文字列変数をハードコードすることで自分自身を制限します。 またあなたは、単にそのような配列の行列内のテキストを格納することができ:

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

これは、あなたが任意のサイズの正方形を構築することができ、さらにあなたがsupposinglyあまりにも、パフォーマンスが向上しますどのような、もはやこれらすべてのsubstring()の呼び出しを必要としません。

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); 
     } 

    } 
} 
関連する問題