Здравствуйте. Помогите разобрать и ткнуть в мои ошибки, в теории у меня (возможно) все продумано, но на практике не выходит результат. Что то я в ужасе когда вижу объем моего "кодинга".😱
package com.javarush.task.task09.task0930;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;

/*
Задача по алгоритмам Ӏ Java Syntax: 9 уровень, 11 лекция
*/

public class Solution {
    public static int countString;
    public static int countInteger;

    public static void main(String[] args) throws Exception {
//        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
//
        ArrayList<String> list = new ArrayList<>();//**********
//
//        String line = reader.readLine();
//        while (!line.isEmpty()) {
//            list.add(line);
//            line = reader.readLine();
//        }
        list.add("Вишня");
        list.add("1");
        list.add("Боб");
        list.add("3");
        list.add("Яблоко");
        list.add("22");
        list.add("Арбуз");


        String[] array = list.toArray(new String[0]);
        sort(array);

        for (String x : array) {
            System.out.println(x);
        }
    }

    public static void sort(String[] array) {
        // напишите тут ваш код
        boolean[] booleansArray = new boolean[array.length]; //для соблюдения последовательности true: число, false: строка;

        //Заполнение этой последовательности;
        for (int i = 0, j = 0; i < array.length; i++, j++){
            String str = array[i];
            if(isNumber(str)) {
                booleansArray[j] = true;
                //j++;
                countInteger++;
            }
            else {
                booleansArray[j] = false;
                //j++;
                countString++;
            }

        }
        //Создание листов для хранения чисел и строк.
        ArrayList<String> listString = new ArrayList<>();
        ArrayList<Integer> listInt = new ArrayList<>();

        //Заполнение 2х листов числами и строками;
        for (int j = 0; j < array.length; j++) {
            if (isNumber(array[j])) {
                listInt.add(Integer.parseInt(array[j]));
            }
            else {
                listString.add(array[j]);
            }
        }
        //Сортировка чисел в обратном порядке;
        Collections.sort(listInt, Collections.reverseOrder());

        //Сортировка строк;
        for(int i = 0; i < listString.size(); i++){
            for (int j = i; j < listString.size(); j++){
                if (isGreaterThan(listString.get(i), listString.get(j))){
                    String value = listString.get(i);
                    listString.add(i,listString.get(j));
                    listString.add(j,value);
                }
                else{
                    continue;
                }
            }

        }
        //лист для добавления итогового результата;
        ArrayList<String> arrayListOutput = new ArrayList<>();
        // Счетчики для цикла;
        int count = 0;

        // Добавление в лист строк и чиел исходя из последовательности;
        while(true){
            if(booleansArray[count]) {
                String strP = "" + listInt.get(0);
                arrayListOutput.add(strP);
                listInt.remove(0);
                count++;
            }
            else {
                arrayListOutput.add(listString.get(0));
                listString.remove(0);
                count++;
            }
            if(listInt.isEmpty()  && listString.isEmpty())
                break;
        }
        //копирование массива в исходный  ?вовзвращаемый массив "array"?;
        String[] array1 = arrayListOutput.toArray(new String[0]);
        for(int i = 0; i < arrayListOutput.size()-1; i++){
            array[i] = array1[i];
        }

    }

    // Метод для сравнения строк: 'а' больше чем 'b'
    public static boolean isGreaterThan(String a, String b) {
        return a.compareTo(b) > 0;
    }

    // Переданная строка - это число?
    public static boolean isNumber(String text) {
        if (text.length() == 0) {
            return false;
        }
        char[] chars = text.toCharArray();
        for (int i = 0; i < chars.length; i++) {
            char character = chars[i];

            // есть '-' внутри строки
            if (i != 0 && character == '-') {
                return false;
            }
            // не цифра и не начинается с '-'
            if (!Character.isDigit(character) && character != '-') {
                return false;
            }
            // одиночный '-'
            if (chars.length == 1 && character == '-') {
                return false;
            }
        }
        return true;
    }
}