2015-11-04 48 views
-1

即时通讯Java初学者! 我正在解决问题集。这需要4个字符串,并按照字典顺序进行排序。我最初使用JAVA Sorting 4字符串按字母顺序排列

List<String> strings = new ArrayList<String>(); 

strings.add(first); 
strings.add(second); 
strings.add(third); 

Collections.sort(strings); 

这工作,但我的老师坚持使用条件。 ( 我花了最后2个小时试图使用compareTo()方法。我的代码正在编译,但似乎有一个逻辑错误。我希望有人能指出它,并给我一个解释原因。

此外,我是新来的,我很努力让自己的代码容易阅读,如果有任何提示,请发送给我,另外,如果有任何规则或我没有做的事情请告诉我。也感谢

编辑:香港专业教育学院一直在努力,并试图将此代码粘贴堆栈只是不让它发生

这是我的要点:https://gist.github.com/mattmccarthy11/b8b5315493fe43efb42c

+2

你真的让它过于复杂。 –

+0

为什么不采取阵列和比较职位? –

+0

我的老师迫使我们使用条件:(:(见后)我最初做了一个数组并对其进行分类,非常令人沮丧,我知道了, – XeXVeX

回答

0
public class LexicographicalOrder { 
     public static void main(String args[]){ 

      String[] mystr = {"Jack","Fortran","Amon","Cpp","Phaser"}; 

      for(int i=0;i<mystr.length-1;i++){ 
       for(int j=i+1 ;j<mystr.length;j++){ 

        if(mystr[i].compareTo(mystr[j]) > 0){ 
         String tmp = mystr[i]; 
         mystr[i]= mystr[j]; 
         mystr[j]=tmp; 
        } 
       } 
      } 

      // print array 
      for(int i=0;i<mystr.length;i++){ 
       System.out.println(mystr[i]); 
      } 

     char[] mychar = {'A','B','C','D','E','F','G','H','I'}; 

     for(int i=0;i<mychar.length;i++){ 
      System.out.println((int)mychar[i]); // print ascii value 
     } 

     } 
} 

//输出

  • 阿蒙
  • .cpp的
  • 的Fortran
  • 杰克
  • 移相器

这是一个简单的解决方案,希望这有助于。

+0

非常感谢,就像我在评论中提到的,我最初去循环它,但我的老师迫使我们使用(真的很糟糕,因为我一直在使用rails 6个月:( – XeXVeX

+0

基本上这个想法是ascii值'A'的ascii值大于'B','0'的ascii值为48,所以可以与零比较。我已经编辑了答案,请检查这一点。 –

+0

为交换价值mystr [i]和mystr [j],这里是tmp帮助变量 –

0

您正在使用导致组合爆炸的逻辑,即对于添加的每个新字符串,都必须添加许多条件。更好的方法可能如下:

List<String> strings = new ArrayList<String>(); 

strings.add(first); 
strings.add(second); 
strings.add(third); 
    for (int i = 0; i < strings.size(); i++) { 
    int tIndex = i; 
    for (int j = i; j < strings.size(); j++) { 
     if(strings.get(j).compareTo(strings.get(tIndex))<0){ 
      tIndex = j; 
     } 

    } 
    String tString = strings.get(i); 
    strings.set(i, strings.get(tIndex)); 
    strings.set(tIndex, tString); 

}