我刚刚看到这个代码用于我应该上交的实验室作业。代码的作用是,它输入一个" .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++)
答案 0 :(得分:1)
我认为这是冒泡排序的基本实现。您可以在wiki上找到此算法的解释。
简而言之,该算法将检查每对并在需要时将其反转。为了获得完全排序的结果,他们需要在最坏的情况下解析数组n*n
ot n2
而不是n*2
。
顺便说一下,Arrays.sort(words);
已对您的数组进行排序。
答案 1 :(得分:0)
需要外部循环,因为可能需要多次迭代循环才能对数组进行完全排序。
您可以通过将words.length * 2替换为不同的硬编码值来轻松地显示此行为,这样您就可以看到在编写数组时排序可能需要多次迭代。
words.length * 2确保对数组进行了足够的迭代以正确排序...(在冒泡排序中,外部循环必须对数组中的每个元素迭代一次,因此words.length应该足够)