根据参数输入

时间:2016-04-09 16:03:34

标签: java

我有一个ArrayList,其中包含大小为1000的字符串。我循环遍历该ArrayList并查找单词并尝试从中形成一个正方形。例如如下:

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

它正在工作,但它涉及大量的嵌套循环,我在这个实例中硬编码循环,我试图形成一个4x4的正方形。

我希望能够灵活地传递方形大小,例如5x5或6x6,依此类推。我该怎么做呢。

如果这只是一个循环,我会传入一个Integer并根据整数循环。但是由于我正在嵌套,所需的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 = "    ";
                    }


                }
            }
        }
    }
}

2 个答案:

答案 0 :(得分:0)

我不确定我的问题是否正确,但是如果您正在寻找一种方法来使您的代码更加灵活,以便您可以构建任何大小的方块,那么您的主要问题是您存储字符串的方式

由于您的循环取决于您定义的字符串数,因此您可以通过对字符串变量进行硬编码来限制自己。 或者,您可以简单地将文本存储在数组矩阵中,如下所示:

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

这允许您构建任意大小的方块,而且您不再需要所有这些substring()调用,这也会提高性能。

答案 1 :(得分:0)

我认为以下代码剪辑解决了您的问题:

nextResponder.becomeFirstResponder()