После ввода 20 строк с клавиатуры не переходит к сортировке, но можно и дальше бесконечно вводить строки....
package com.javarush.task.task08.task0830;
import java.io.BufferedReader;
import java.io.InputStreamReader;
/*
Задача: Введи с клавиатуры 20 слов и выведи их в алфавитном порядке. Каждое слово - с новой строки.
*/
public class Solution {
public static void main(String[] args) throws Exception {
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
String[] array = new String[20];
for (int i = 0; i < 20; i++) {
array[i] = reader.readLine();
}
sort(array);
// разделитель
System.out.println("------------------------------------------");
for (String x : array) {
System.out.println(x);
}
}
public static void sort(String[] array) {
boolean needIteration = true;
while (needIteration) {
needIteration = false;
for (int i = 0; i < array.length-1; i++) {
if (isGreaterThan(array[i],array[i+1])) {
swap(array[i],array[i+1]);
needIteration = true;
}
}
}
}
//Метод для сравнения строк: 'а' больше чем 'b'
public static boolean isGreaterThan(String a, String b) {
return a.compareTo(b) > 0;
}
//Метод для замены мест строк
public static void swap(String s, String p) {
String q;
if (isGreaterThan(s,p)) {
q = s;
s = p;
p = q;
}
}
}
Arjuna
9 уровень
бесконечное выполнение
Обсуждается
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Илья ГековMaster
14 марта 2019, 16:32
К сортировке код переходит и уходит в бесконечный цикл во время неё. Ваш метод swap ничего не меняет в массиве.
0
Arjuna
14 марта 2019, 16:37
но ведь если if не выполнеяется (массив отсортирован), то needIteration становится false и цикл while перестает работать?
Спасибо за быстрый ответ!
0
Илья ГековMaster
14 марта 2019, 16:39
Метод swap ничего не меняет в массиве, поэтому неотсортированный массив всегда будет выдавать needIteration = true
0
Arjuna
14 марта 2019, 17:01
Спасибо!!
0