Откладывал эту задачу как мог. Но пришло время :(
Вводим только цифры - сортирует, все ок.
Вводим только текст - сортирует, все ок.
Текст + цифры - NumberFormatException.
Exception in thread "main" java.lang.NumberFormatException: For input string: "Боб"
at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:68)
at java.base/java.lang.Integer.parseInt(Integer.java:652)
at java.base/java.lang.Integer.parseInt(Integer.java:770)
at com.javarush.task.task09.task0930.Solution.sort(Solution.java:51)
at com.javarush.task.task09.task0930.Solution.main(Solution.java:24)
т.е. получается он "Вишня" и "1" проходят штатно, но потом он зачем то пытается впихнуть не впихуемое в 51й строке. НО, какого он вообще пытается это сделать я не понимаю.
//Это не цифра
if (!isNumber(array[j]) {всякие манипуляции }
}
//если это не не цифра, то это цифра
else {
В довесок Валера ругается:
* Программа должна выводить данные на экран.
* Выведенные слова должны быть упорядочены по возрастанию (используй готовый метод isGreaterThan).
* Выведенные числа должны быть упорядочены по убыванию.
Короче говоря, я не понимаю.package com.javarush.task.task09.task0930;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
/*
Задача по алгоритмам Ӏ Java Syntax: 9 уровень, 11 лекция
*/
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.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) {
// ########################## SHIT CODE
for (int j = 0; j < array.length-1; j++){
if (!isNumber(array[j])) {
boolean needIteration = true;
while (needIteration) {
needIteration = false;
for (int i = 1; i < array.length; i++) {
if (isGreaterThan(array[j], array[i])) {
swapstring(array, i, i-1);
}
}
}
}
else{
boolean needIteration = true;
while (needIteration) {
needIteration = false;
for (int i = 1; i < array.length; i++) {
if (Integer.parseInt(array[i]) > Integer.parseInt(array[i - 1])) {
swapstring(array, i, i-1);
needIteration = true;
} } } }
}
}
// Метод для сравнения строк: 'а' больше чем '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;
}
private static void swapstring (String[] array, int AA, int BB) {
String XX = array[AA];
array[AA] = array[BB];
array[BB] = XX;
}
}