我一直在尝试解决此错误,但是我无法解决它。以下程序的目的是使用冒泡排序按字母顺序排列名称数组。例如,如果名称为[“ Bob Joe”,“ Bob Frank”和“ Bob Johnson”],则正确排序的数组将为[“ Bob Frank”,“ Bob Joe”,“ Bob Johnson”]。
我面临的主要挑战是比较name.charAt(0)之后的任意两个字符串。如果仅在1个特定的索引点比较任何2个字符串的字符,则我的代码有效。但是,如果如果两个字符串的索引0彼此相等,如果我试图使比较移到索引0以上,则我的程序将不再起作用。
下面概述了代码
public static void sortAlpha (String names[])
{
for (int i = 0 ; i < names.length - 1 ; i++)
{
for (int a = 0 ; a < names.length - 1 - i ; a++)
{
int length1 = names [a].length ();
int length2 = names [a + 1].length ();
int min = 1;
if (length1 > length2)
{
min = length2;
}
else
{
min = length1;
}
for (int b = 0 ; b < min ; b++)
{
if ((int) names [a].toLowerCase ().charAt (b) > (int) names [a + 1].toLowerCase ().charAt (b))
{
String tempName = names [a];
// sort:
names [a] = names [a + 1];
names [a + 1] = tempName;
break;
}
}
}
}
}
如果我只是将最小值默认设置为1,则代码将运行并完成其预期的工作。但是,如果最小值保持动态,程序将无法运行。我试图找出为什么会这样,以及解决方法是什么。任何帮助,将不胜感激!
检查此。
public static void sortAlpha(String names[]) {
for (int i = 0; i < names.length - 1; i++) {
for (int a = 0; a < names.length - 1 - i; a++) {
int length1 = names[a].length();
int length2 = names[a + 1].length();
int min = length1 > length2 ? length2 : length1;
for (int b = 0; b < min; b++) {
if ((int) names[a].toLowerCase().charAt(b) > (int) names[a + 1].toLowerCase().charAt(b)) {
String tempName = names[a];
// sort:
names[a] = names[a + 1];
names[a + 1] = tempName;
break;
} else if ((int) names[a].toLowerCase().charAt(b) == (int) names[a + 1].toLowerCase().charAt(b)) {
// if the letter is the same go for the next
continue;
} else {
// if it's already in the right position - stop.
break;
}
}
}
}
}