Почему то валидатор не принимает, хотя выводит все верно, и последние три пункта использованы.
package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
/*
Задача по алгоритмам
*/
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 == null || s.isEmpty()) break;
list.add(s);
}
sort(list);
String[] array = list.toArray(new String[0]);
for (String x : array) {
System.out.println(x);
}
}
public static void sort(ArrayList<String> list) {
ArrayList<Integer> num1 = new ArrayList<>();
ArrayList<String> str1 = new ArrayList<>();
for (int i = 0; i < list.size();i++)
{
if (isNumber(list.get(i)))
num1.add(Integer.parseInt(list.get(i)));
else
str1.add(list.get(i));
}
int nums = num1.size();
Integer[] num = num1.toArray(new Integer[0]);
while (true)
{
int count = 0;
for (int i = 1; i < nums; i++)
{
if (num[i] > num[i-1])
{
int temp = num[i];
num[i] = num[i-1];
num[i-1] = temp;
count++;
}
}
if (count == 0){
break;
}
}
String[] str = str1.toArray(new String[0]);
while (true)
{
int count = 0;
for (int i = 1; i < str.length; i++)
{
if (isGreaterThan(str[i-1],str[i]))
{
String temp = str[i];
str[i] = str[i-1];
str[i-1] = temp;
count++;
}
}
if (count == 0)
{
break;
}
}
ArrayList sortedList = new ArrayList(Arrays.asList(str));
for (int i = 0; i < num.length; i++)
{
sortedList.add(num[i]);
}
for (int i = 0; i < list.size(); i++)
{
list.remove(i);
i--;
}
for (int i = 0; i < sortedList.size(); i++)
{
//list.remove(i);
list.add((sortedList.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;
}
}