Здравствуйте. Помогите разобрать и ткнуть в мои ошибки, в теории у меня (возможно) все продумано, но на практике не выходит результат. Что то я в ужасе когда вижу объем моего "кодинга".😱
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;
}
}