为什么我们在for循环中乘以2?

时间:2017-03-09 11:52:09

标签: java for-loop

我刚刚看到这个代码用于我应该上交的实验室作业。代码的作用是,它输入一个" .dat"包含单词列表(文件中的第一行是数据集的数量)。然后它检查" .dat"中每个单词的长度。文件并根据长度对其进行排序。字母数量最少,最高字母数量最后。这是代码。

Scanner scan = new Scanner(new File("words.dat"));

int dataSets = scan.nextInt();
scan.nextLine();

String[] words = new String[dataSets];
//int[] length = new int[dataSets];

for(int a=0; a<dataSets; a++)
{
    words[a] = scan.next();
}

Arrays.sort(words);

for(int a = 0; a < words.length * 2; a++) //what is the purpose of this forloop?
{
    for(int i = 0; i < words.length; i++)
    {
        if(i < words.length - 1)
        {
            if(words[i].length() > words[i + 1].length())
            {
                String temp = words[i];

                words[i] = words[i + 1];

                words[i + 1] = temp;
            }
        }
    }
}

for(String word : words)
{
    System.out.println(word);
}

我不知道为什么我们将第一个for循环乘以2。

 for(int a = 0; a < words.length * 2; a++)

2 个答案:

答案 0 :(得分:1)

我认为这是冒泡排序基本实现。您可以在wiki上找到此算法的解释。

简而言之,该算法将检查每对并在需要时将其反转。为了获得完全排序的结果,他们需要在最坏的情况下解析数组n*n ot n2而不是n*2

顺便说一下,Arrays.sort(words);已对您的数组进行排序。

答案 1 :(得分:0)

需要外部循环,因为可能需要多次迭代循环才能对数组进行完全排序。

您可以通过将words.length * 2替换为不同的硬编码值来轻松地显示此行为,这样您就可以看到在编写数组时排序可能需要多次迭代。

words.length * 2确保对数组进行了足够的迭代以正确排序...(在冒泡排序中,外部循环必须对数组中的每个元素迭代一次,因此words.length应该足够)