2011-09-25 98 views
0

在我的教科书中有一个关于如何对字符串数组进行排序的例子,但我很难理解代码的逻辑。我们有以下的数组:在Java中对字符串数组进行排序

String[] words = {"so", "in", "very", "every", "do"}; 

的方法本身是如下:

public static void sortArray(Comparable[] compTab) { 
    for (int next=1; next < compTab.length; next++) { 
     Comparable value = compTab[next]; 
     int this; 
     for (this = next; this > 0 && value.compareTo(compTab[this-1]) < 0; this--) { 
      compTab[this] = compTab[this-1]; 
     } 
     compTab[this] = value; 
     writeArray(next + " run through: ", compTab); 
    } 
} 

这最后writeArray呼叫在下面的文本结果被印刷,用于通过第一奔跑:“1运行通过:在所以非常“

好的。就像我说的,我在这段代码中的逻辑有一些问题。如果我们通过循环的第一次,这是我所看到的情况:

  1. 我们有:Comparable value = compTab[1]。这意味着value =“in”。

  2. 我们用this = next(which == 1)开始内循环。因此,Java只会经历一次内部循环。事实证明,第一次运行value.compareTo(compTab[this-1])确实小于0.因此,我们有:compTab[1] = compTab[0]。这意味着过去在位置[1]的单词现在被替换为过去位于[0]的单词。因此,我们现在在数组[1]的位置上有“so”这个词。

  3. 该方法的下一步是:compTab[this] = value。这是我感到困惑的地方。这告诉我,因为这= 1,我们在这里得到compTab[1] = value。但是,在方法的前面我们定义了value =“in”。这告诉我阵列中的位置[1]再次呈现单词“in”。

  4. 我看到这个问题的方法,最后打印出来然后应是:

“1.运行通过:所以在非常每做”。换句话说,我遵循代码逻辑的方式,数组的最终打印输出与实施方法之前的输出完全相同!很明显,我的逻辑中有一部分是不正确的。例如 - 我不知道原来位置[1]中的单词现在位于[0]的位置。如果有人能帮我解释一下,我会非常感激!

+6

请不要做:'INT这一点;' – Howard

+1

使用'this'作为变量名是如果不是解析器本身来迷惑人阅读你的代码,一个很好的方式。 –

+0

谢谢。就像我提到的,这实际上不是我的代码。它来自我的教科书。 – Kristian

回答

1

的问题是以下语句内:

该方法中的下一个步骤是:compTab [此] =值。这是我 混淆。这告诉我,因为这= 1,我们在这里得到 compTab [1] =值。但是,在该方法的较早部分,我们定义了value = “in”。这告诉我阵列中的位置[1]再次假定 单词“in”。

既然你通过循环跑一次(看到你的发言2),也this--被执行一次,因此this==0

+0

非常感谢:)。我不知道在内部循环执行后,变量实际上是否降值。但是,当然,最终的印刷品非常有意义! – Kristian

1
public class A { 

static String Array[]={" Hello " , " This " , "is ", "Sorting ", "Example"}; 
String temp; 


public static void main(String[] args) 

{  

for(int j=0; j<Array.length;j++) 
{ 
    for (int i=j+1 ; i<Array.length; i++) 
    { 
     if(Array[i].trim().compareToIgnoreCase(Array[j].trim())<0) 
     { 
      String temp= Array[j]; 
      Array[j]= Array[i]; 
      Array[i]=temp; 


     } 
    } 

    System.out.print(Array[j]); 
} 
} 

}

相关问题