Я по пунктам расписал свои действия. вывод на экран почему то из числ 18, из слов яблоко.
package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.*;
/*
Задача по алгоритмам
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> list = new ArrayList<>();
int c = 0;
while (true) {
String s = reader.readLine();
if (c == 7) {
break;
}
list.add(s);
c++;
}
String[] array = list.toArray(new String[list.size()]);
sort(array);
for (String x : array) {
System.out.println(x);
}
}
public static void sort(String[] array) {
// 1) orderint создаем
boolean[] orderint = new boolean[array.length];
for (int i = 0; i < array.length; i++) {
orderint[i] = isNumber(array[i]);
}
// 2) создаем numbers и words
ArrayList<Integer> numbers = new ArrayList<>();
ArrayList<String> words = new ArrayList<>();
for (int i = 0; i < array.length; i++) {
if (orderint[i]) {
numbers.add(Integer.parseInt(array[i]));
}
else {
words.add(array[i]);
}
}
// 3a) sort numbers
int max = numbers.get(0);
int index = 0;
for (int m = 0; m < numbers.size(); m++) {
index = m;
for (int n = 0 + m; n < numbers.size(); n++) {
if (numbers.get(n) > max) {
max = numbers.get(n);
index = n;
}
}
numbers.set(index, numbers.get(m));
numbers.set(m, max);
}
// 3b) sort words
String max2 = words.get(0);
for (int m = 0; m < words.size(); m++) {
index = m;
for (int n = 0 + m; n < words.size(); n++) {
if (isGreaterThan(words.get(n), max2)) {
max2 = words.get(n);
index = n;
}
}
words.set(index, words.get(m));
words.set(m, max2);
}
Collections.reverse(words);
// 4) все записываем обратно в array
int countint = 0;
int count = 0;
for (int i = 0; i < array.length; i++) {
if (orderint[i]) {
array[i] = "" + numbers.get(countint);
countint++;
}
else {
array[i] = words.get(count);
count++;
}
}
}
// Метод для сравнения строк: 'а' больше чем '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;
}
}