Java 不使用array.sort()或compareTo()按字母顺序排列字符串数组?
我在课堂上做了一个练习,你从用户那里取名字并按字母顺序输出。我不允许使用Java 不使用array.sort()或compareTo()按字母顺序排列字符串数组?,java,arrays,string,sorting,alphabetical,Java,Arrays,String,Sorting,Alphabetical,我在课堂上做了一个练习,你从用户那里取名字并按字母顺序输出。我不允许使用Array.sort()或compareTo()。我似乎已经让它在很大程度上发挥了作用。。。除了输入类似于aaaa的内容外,它会按以下顺序输出: aaa aa a 我真的希望能够按以下顺序输出: a aa aaa 这就是我到目前为止所做的: public static void main(String args[]) throws IOException { BufferedReader key = n
Array.sort()
或compareTo()
。我似乎已经让它在很大程度上发挥了作用。。。除了输入类似于aaaa
的内容外,它会按以下顺序输出:
aaa
aa
a
我真的希望能够按以下顺序输出:
a
aa
aaa
这就是我到目前为止所做的:
public static void main(String args[]) throws IOException {
BufferedReader key =
new BufferedReader(new InputStreamReader(System.in));
System.out.println("Alphabetizing names\n");
System.out.println("Enter names separated by spaces:");
StringTokenizer names1 = new StringTokenizer(key.readLine());
int tokens = names1.countTokens();
String[] names2 = new String[tokens];
String y;
for (int a = 0; a < tokens; a++) {
names2[a] = names1.nextToken();
}
System.out.println("\nSorted names:");
for (int a = 0; a < tokens; a++) {
for (int b = a + 1; b < tokens; b++) {
if(alphabetize(names2[a], names2[b])) {
y = names2[a];
names2[a] = names2[b];
names2[b] = y;
}
}
}
for (int c = 0; c < tokens; c++) {
System.out.println(names2[c]);
}
}
static boolean alphabetize(String a, String b) {
for(int c = 0; ; c++) {
if((c == a.length()-1) && (c == b.length()-1)) {
return false;
}
if(c == a.length()-1) {
return true;
}
if(c == b.length()-1) {
return false;
}
if((a.toLowerCase().charAt(c) - b.toLowerCase().charAt(c)) > 0) {
return true;
}
}
}
publicstaticvoidmain(字符串args[])引发IOException{
缓冲读取键=
新的BufferedReader(新的InputStreamReader(System.in));
System.out.println(“按字母顺序排列的名称\n”);
System.out.println(“输入用空格分隔的名称:”);
StringTokenizer names1=新的StringTokenizer(key.readLine());
int tokens=name1.countTokens();
字符串[]名称2=新字符串[标记];
弦y;
for(int a=0;a0){
返回true;
}
}
}
请帮忙!!谢谢大家! 提示1:查看输出。发生了什么事 提示2:根据提示1得出的明显结论。。。查看
按字母顺序排列的方法。。。找出你所看到的原因
元提示:我认为你这里的问题是你没有一个一致的思维模式来决定字母顺序应该做什么;i、 e.结果的预期含义。原因有两个:
方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
你的方法不是做这两件事
是的。。。方法名非常重要
您没有任何注释来解释该方法应该返回什么。最好的做法是为任何非平凡的方法编写javadoc
注释,该方法与调用该方法的代码之间形成“契约”。在本例中,您需要一条注释,类似于“如果X、Y或Z,此方法返回true
,否则返回false
”
提示1:查看输出。发生了什么事
提示2:根据提示1得出的明显结论。。。查看按字母顺序排列的方法。。。找出你所看到的原因
元提示:我认为你这里的问题是你没有一个一致的思维模式来决定字母顺序应该做什么;i、 e.结果的预期含义。原因有两个:
方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
你的方法不是做这两件事
是的。。。方法名非常重要
您没有任何注释来解释该方法应该返回什么。最好的做法是为任何非平凡的方法编写javadoc
注释,该方法与调用该方法的代码之间形成“契约”。在本例中,您需要一条注释,类似于“如果X、Y或Z,此方法返回true
,否则返回false
”
提示1:查看输出。发生了什么事
提示2:根据提示1得出的明显结论。。。查看按字母顺序排列的方法。。。找出你所看到的原因
元提示:我认为你这里的问题是你没有一个一致的思维模式来决定字母顺序应该做什么;i、 e.结果的预期含义。原因有两个:
方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
你的方法不是做这两件事
是的。。。方法名非常重要
您没有任何注释来解释该方法应该返回什么。最好的做法是为任何非平凡的方法编写javadoc
注释,该方法与调用该方法的代码之间形成“契约”。在本例中,您需要一条注释,类似于“如果X、Y或Z,此方法返回true
,否则返回false
”
提示1:查看输出。发生了什么事
提示2:根据提示1得出的明显结论。。。查看按字母顺序排列的方法。。。找出你所看到的原因
元提示:我认为你这里的问题是你没有一个一致的思维模式来决定字母顺序应该做什么;i、 e.结果的预期含义。原因有两个:
方法的名称是不透明的。单词“字母顺序”不是一个动词,它的意思与你试图执行的动作对应。链接上说:
你的方法不是做这两件事
对
alphabetize (ˈælfəbəˌtaɪz) or alphabetise. vb (tr)
1. to arrange in conventional alphabetical order
2. to express by an alphabet
static boolean alphabetize(String a, String b) {
char ca;
char cb;
for(int c = 0; ; c++) {
ca = a.toLowerCase().charAt(c);
cb = b.toLowerCase().charAt(c);
if((c == a.length()-1) && (c == b.length()-1)) {
return (ca - cb) > 0;
} else if(c == a.length()-1) {
return false;
} else if(c == b.length()-1) {
return true;
} else if (ca - cb != 0) { //if are not equals
return (ca - cb) > 0;
}
}
}
aaa ccc arc abr ald old mal ald aaaa bbbb aaaa car cro arc dsjd qhjk hdjgsdaj asidasiodu asi