Изначально отложил эту задачу, потом закончив 10 уровень решил вернуться, появилась свежая идея. Написал код, проверял и на их варианте, и на собственных вариантах с большим количеством входных данных, менял слова и цифры местами, всё работает и сортируется как надо, числа от большего с меньшему, слова по алфавиту сверху вниз. Подскажите что не так? Последняя задача в Java Syntax, 308/309... Очень не хочется оставлять 1 хвост перед переходом к Core...
package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
/*
Задача по алгоритмам Ӏ Java Syntax: 9 уровень, 11 лекция
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> list = new ArrayList<>();
while (true) {
String s = reader.readLine();
if (s.isEmpty()) {
break;
}
list.add(s);
}
String[] array = list.toArray(new String[0]);
sort(array);
for (String x : array) {
System.out.println(x);
}
}
public static void sort(String[] array) {
// напишите тут ваш код
ArrayList<Object> list = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (isNumber(array[i])) {
list.add(Integer.parseInt(array[i]));
} else {
list.add(array[i]);
}
}
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (list.get(i) instanceof Integer && list.get(j) instanceof Integer) {
if ((int) list.get(i) > (int) list.get(j)) {
Collections.swap(list, list.indexOf(list.get(i)), list.indexOf(list.get(j)));
}
}
}
}
for (int i = 0; i < list.size(); i++) {
for (int j = 0; j < list.size(); j++) {
if (list.get(i) instanceof String && list.get(j) instanceof String) {
if (!isGreaterThan(list.get(i).toString(), list.get(j).toString())) {
Collections.swap(list, list.indexOf(list.get(i)), list.indexOf(list.get(j)));
}
}
}
}
for (int i = 0; i < array.length; i++) {
array[i] = list.get(i).toString();
}
}
// Метод для сравнения строк: 'а' больше чем 'b'
public static boolean isGreaterThan(String a, String b) {
return a.compareTo(b) > 0;
}
// Переданная строка - это число?
public static boolean isNumber(String s) {
if (s.length() == 0) {
return false;
}
char[] chars = s.toCharArray();
for (int i = 0; i < chars.length; i++) {
char c = chars[i];
if ((i != 0 && c == '-') // Строка содержит '-'
|| (!Character.isDigit(c) && c != '-') // или не цифра и не начинается с '-'
|| (chars.length == 1 && c == '-')) // или одиночный '-'
{
return false;
}
}
return true;
}
}
Хорошо бы в коде комментарии были - чтобы было понятнее что и зачем делается. По вашему коду подсказать не могу - я сразу по другому решала - просто складывала числа и строчки в разные списки