Вот он код. Но на самом деле просто не врубаюсь, что тут вообще может быть не так.
Первый кусок метода сортирует переданный массив.
Второй кусок раскидывает отсортированные строки по двум спискам.
Третий присваивает ячейкам из изначального массива строки из двух списков. Что вообще не так?
public static void sort(String[] array) {
String[] sorted = array;
String reserve;
for (int y = 0; y < sorted.length - 1; y++) {
for (int i = 1; i < sorted.length; i++) {
if (isGreaterThan(sorted[y], sorted[i])) {
reserve = sorted[i];
sorted[i] = sorted[y];
sorted[y] = reserve;
}
}
}
//Разделение чисел и строк на два списка
ArrayList<String> stroke = new ArrayList<>();
ArrayList<String> numbers = new ArrayList<>();
for (int i = 0; i < array.length; i++){
if (isNumber(sorted[i]))
numbers.add(sorted[i]);
else stroke.add(sorted[i]);
}
//Внесение списков в основной массив
int str = 0;
int num = 1;
for (int i = 0; i < array.length; i++){
if (isNumber(array[i])) {
array[i] = numbers.get(numbers.size() - num);
num++;
}
else {
array[i] = stroke.get(i);
str++;
}
}
}
package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
/*
Задача по алгоритмам
*/
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);
}
String[] array = list.toArray(new String[0]);
sort(array);
for (String x : array) {
System.out.println(x);
}
}
public static void sort(String[] array) {
String[] sorted = array;
String reserve;
for (int y = 0; y < sorted.length - 1; y++) {
for (int i = 1; i < sorted.length; i++) {
if (isGreaterThan(sorted[y], sorted[i])) {
reserve = sorted[i];
sorted[i] = sorted[y];
sorted[y] = reserve;
}
}
}
//Разделение чисел и строк на два списка
ArrayList<String> stroke = new ArrayList<>();
ArrayList<String> numbers = new ArrayList<>();
for (int i = 0; i < array.length; i++){
if (isNumber(sorted[i]))
numbers.add(sorted[i]);
else stroke.add(sorted[i]);
}
//Внесение списков в основной массив
int str = 0;
int num = 1;
for (int i = 0; i < array.length; i++){
if (isNumber(array[i])) {
array[i] = numbers.get(numbers.size() - num);
num++;
}
else {
array[i] = stroke.get(i);
str++;
}
}
}
// Метод для сравнения строк: 'а' больше чем '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;
}
}