Здравствуйте, я почти решил задачу, но у меня никак не получается отсортировать слова по возрастанию, чтобы я не менял, и как бы я не вникал, я не могу понять почему у меня это не получается.
Каждый раз когда я вношу КАЗАЛОСЬ БЫ правильные решения, у меня слова сортируются, но они выдвигают вперёд числа, а сами записываются в конец массива.
Пример:
22
3
1
0
Арбуз
Боб
Вишня
Яблоко
Сейчас в данный момент программа сортирует слова по убыванию.
Подскажите пожалуйста в чём проблема.
package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Задача по алгоритмам
Требования:
1. Программа должна считывать данные с клавиатуры. +
2. Программа должна выводить данные на экран. +
3. Выведенные слова должны быть упорядочены по возрастанию (используй готовый метод isGreaterThan). ?
4. Выведенные числа должны быть упорядочены по убыванию. ?
5. Метод main должен использовать метод sort. +
6. Метод sort должен использовать метод isGreaterThan. ?
7. Метод sort должен использовать метод isNumber. ?
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
ArrayList<String> list = new ArrayList<>();
// list.add("Вишня");
// list.add("1");
// list.add("Боб");
// list.add("3");
// list.add("Яблоко");
// list.add("22");
// list.add("0");
// list.add("Арбуз");
while (true) {
String s = reader.readLine();
if (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) {
// напишите тут ваш код
for (int i = 0; i < array.length; i++) {
if (isNumber(array[i])) {
// Если это число
// По убыванию числа
int minNumber = Integer.parseInt(array[i]); // Парсим слово в число, чтобы можно было сравнить величину.
int minIndex = i; // Записываем индекс минимального числа.
for (int j = i; j < array.length; j++) { // Selection Sort
if (isNumber(array[j])){
int number = Integer.parseInt(array[j]);
if (minNumber < number){
minIndex = j;
minNumber = number;
}
}
}
// Меняем местами когда найдём минимум.
String tmp = array[i];
array[i] = array[minIndex];
array[minIndex] = tmp;
}
else {
// Если это слово
// По возростанию слова
String maxValueStr = array[i]; // По Алфавиту первоочередное слово.
int maxIndex = i; // Индекс первоочередного слова.
for (int j = i; j < array.length; j++) { // Selection Sort
if (isGreaterThan(array[j], maxValueStr)){
maxValueStr = array[j];
maxIndex = j;
}
}
// Меняем местами когда найдём максимум.
String tmp = array[i];
array[i] = maxValueStr;
array[maxIndex] = tmp;
}
}
}
// Метод для сравнения строк: 'а' больше чем '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;
}
}