Вывод и сортировка массива

Мне нужно отсортировать ввести текстовый массив с клавиатуры и отсортировать все слова по возрастанию. Проблема: я ввожу размер массива с клавиатуры, но оно выводит на один меньше и сортирует неправильно. Помогите исправить) Вот код:

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));
→ Ссылка
Автор решения: Byb

Можно вместо sc.nextLine() использовать sc.next(), тогда всё отработает правильно.

→ Ссылка
Автор решения: Dodly Game

массив имеет 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]); //последнее значение массива
→ Ссылка