РЕДАКТИРОВАТЬ:
Итак, я действительно понял проблему .. сначала диапазон индекса был вне границ, потому что для моего while-l oop я не устанавливал counter = 0
в том случае, если charB2 > charA2
. Однако по какой-то причине использование ++counter
в моем индексе бесконечно зацикливает программу. Поэтому я сделал небольшое исправление:
Извините, если это с самого начала показалось ненужным, однако после публикации моего вопроса я получил много разных отзывов, которые заставили меня попробовать альтернативы, о которых я бы не подумал иначе .
int c = 1;
while (charA2 == charB2) {
charA = a.charAt(c);
charB = b.charAt(c);
c++;
charA2 = charA;
charB2 = charB;
if (charA2 > charB2) {
merged.set(j, b);
merged.set(j + 1, a);
}
Итак, мне даны два массива списков строк в java, и мне нужно написать метод без использования Collections.sort, чтобы объединить два списка и отсортировать их.
public static ArrayList<String> merged(ArrayList<String> lst1, ArrayList<String> lst2) {
int size = lst1.size() + lst2.size();
ArrayList<String> merged = new ArrayList<String>(size);
merged.addAll(lst1);
merged.addAll(lst2);
int counter = 0;
for (int i = 0; i < merged.size(); i++) {
for (int j = 0; j < merged.size() - 1; j++) {
String a = merged.get(j);
String b = merged.get(j + 1);
Character charA = a.charAt(counter);
Character charB = b.charAt(counter);
int charA2 = charA;
int charB2 = charB;
if (charA2 > charB2) {
merged.set(j, b);
merged.set(j + 1, a);
} else
if (charA2 == charB2) {
while (charA2 == charB2) {
charA = a.charAt(++counter);
charB = b.charAt(++counter);
charA2 = charA;
charB2 = charB;
if (charA2 > charB2) {
merged.set(j, b);
merged.set(j + 1, a);
counter = 0;
} else {
counter=0;
}
}
}
}
}
return merged;
}
Мой метод в основном преобразовывал строку с тем же индексом в символ, который затем я могу преобразовать в int-значение, и если целочисленное значение для текущего элемента больше, чем для следующего, я меняю местами их.
Итак, я решил, что если я просто переберу список и сравню каждый элемент со следующим элементом, я смогу в конечном итоге отсортировать его, но по какой-то причине я столкнулся с ошибкой, в которой говорится, что диапазон индекса выходит за пределы, когда charA2 == charB2
.