我在课堂上练习,你从用户那里取名并按字母顺序输出。我不允许使用Array.sort()
或compareTo()
。我似乎已经让它在大多数情况下工作了...除了输入类似a aaa aa
之类的内容之外,它按以下顺序输出:
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;
}
}
}
请帮忙!!谢谢!
答案 0 :(得分:3)
提示1:查看输出。它看起来是什么样的?
提示2:基于提示1的明显结论......看看alphabetize
方法......并弄清楚为什么会导致你所看到的。
Meta-hint:我认为你的问题在于你没有一个alphabetize
应该做的心理模型;即结果的预期含义。这有两个原因:
alphabetize (ˈælfəbəˌtaɪz) or alphabetise. vb (tr) 1. to arrange in conventional alphabetical order 2. to express by an alphabet
你的方法既没有做这些事情。
是的...方法名称 非常重要。
javadoc
注释被认为是最佳实践。在这种情况下,您需要一个注释,例如“如果X,Y或Z,则此方法返回true
,否则false
。答案 1 :(得分:0)
问题出现在alphabetizer中:
提示:只有当您读取的字符等于
时,循环才会继续以下是如何解决您的问题:
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