-1

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

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));
}

}

2 Answers2

0

Первый 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));
  • но оно неправильно сортирует: девчонку > пеленку – VWinner Nov 13 '22 at 11:37
  • @VWinner почему??? Сортировка по возрастанию "п" > "д", поэтому сначала "д", потом "п" – Алексей Р Nov 13 '22 at 11:39
  • а мне кажется, что задача состоит в сортировке по количестве символов в слове – VWinner Nov 13 '22 at 11:40
  • @VWinner что значит кажется? – Алексей Р Nov 13 '22 at 11:41
  • в задаче сказано по возрастанию, это можно воспринимать как по возрастанию числа символов в слове, а можно как вы. Я подумал, что по количеству символов – VWinner Nov 13 '22 at 11:43
  • 2
    @АлексейР не надо пересоздавать объект, достаточно написать так int size = sc.nextInt(); sc.nextLine(); – Виктор Nov 13 '22 at 11:44
  • @VWinner добавил ниже кода сортировку по длине – Алексей Р Nov 13 '22 at 11:47
  • Всем спасибо, решил проблему – VWinner Nov 13 '22 at 12:07
  • Вопрос закрыт)) – VWinner Nov 13 '22 at 12:11
0

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

Dodly Game
  • 39
  • 6
  • Вы хотите рассказать, что нумерация массивов идёт с нуля. Это хорошо, но к вопросу отношения не имеет. – MBo Nov 14 '22 at 08:31
  • В программе нет проблем с диапазоном массива. Там, всем известная проблема с методом nextInt() класса Scanner. Просто, после вызова метода nextInt() нужно вызвать метод nextLine() и нет необходимости, пересоздавать объект Scanner – Viktor Vdovichenko Feb 26 '23 at 19:08