我是一名初学Java程序员! 我正在研究一个问题集。这需要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
答案 0 :(得分: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);
}
答案 1 :(得分: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
- 杰克
- 移相
这是一个简单的解决方案,希望对此有所帮助。