Вывод и сортировка массива
Мне нужно отсортировать ввести текстовый массив с клавиатуры и отсортировать все слова по возрастанию. Проблема: я ввожу размер массива с клавиатуры, но оно выводит на один меньше и сортирует неправильно. Помогите исправить) Вот код:
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Введите размер массива: ");
int size = sc.nextInt();
String[] array = new String[size];
sc = new Scanner(System.in);
System.out.println("Введите несколько слов: ");
for (int i = 0; i < array.length; i++) {
array[i] = sc.nextLine();
}
System.out.println("Введенный массив");
for(int i = 0; i < array.length; i++) {
System.out.print(" " + array[i]);
}
System.out.println();
Arrays.sort(array);
System.out.println("Отсортированный массив");
for(int i = 0; i < array.length; i++) {
System.out.print(" " + array[i]);
}
}
public void sort(String[] array)
{
Arrays.sort(array, Comparator.comparingInt(String::length));
}
}
Ответы (3 шт):
Первый nextLine() в цикле поглощал перевод строки после nextInt().
Объект сканера нужно создать заново. Сортировка работает.
import java.util.Arrays;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.print("Введите размер массива: ");
int size = sc.nextInt();
String[] array = new String[size];
sc = new Scanner(System.in); // создайте новый сканер
System.out.println("Введите несколько слов: ");
for (int i = 0; i < array.length; i++) {
array[i] = sc.nextLine();
}
System.out.println("Введенный массив");
for(int i = 0; i < array.length; i++) {
System.out.print(" " + array[i]);
}
System.out.println();
Arrays.sort(array);
System.out.println("Отсортированный массив");
for(int i = 0; i < array.length; i++) {
System.out.print(" " + array[i]);
}
}
}
Введите размер массива: 6
Введите несколько слов:
Иван
родил
девчонку
велел
тащить
пеленку
Введенный массив
Иван родил девчонку велел тащить пеленку
Отсортированный массив
Иван велел девчонку пеленку родил тащить
Дополнение. Порядок сортировки по длине слов можно переопределить через
Arrays.sort(array, Comparator.comparingInt(String::length));
Можно вместо sc.nextLine() использовать sc.next(), тогда всё отработает правильно.
массив имеет 1 интересное свойствo:
String[] abc = new String[15];
Вроде-бы всё правильно, но если потом написать:
String[15] = "hello";
То выбьет ошибку. Всё потому-что при создании массива, отсчёт массива будет на 1 меньше. Например:
int listLength = n;
String[] list = new String[listLength];
System.out.println(list[listLength-1]); //последнее значение массива