![](/img/trans.png)
[英]Using the compareTo(String) to alphabetize strings in an array?
[英]Alphabetize a string array without using Array.sort() or compareTo()?
我在課堂上做一個練習,您在該練習中從用戶那里取名字並按字母順序輸出它們。 我不允許使用Array.sort()
或compareTo()
。 我似乎大部分時間都可以使用它...除了當我輸入a aaa aa
類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;
}
}
}
請幫忙!! 謝謝!
提示1:查看輸出。 它看起來像什么?
提示2:基於提示1得出的明顯結論……看一下alphabetize
方法……並弄清楚為什么會導致您看到的內容。
Meta提示:我認為您的問題在於,對於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
” 。 問題在於字母順序:
提示:僅當您讀取的字符等於時,循環才應繼續,
這里是如何解決您的問題的:
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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.