назначение для сортировки списков - PullRequest
0 голосов
/ 10 октября 2019

Мое назначение в главе 16. Это следующее.

Создайте приложение, которое

  • принимает пользовательский ввод строки или слов
  • печатает каждое слово обратнов алфавитном порядке
  • печатает общее количество набранных элементов

Пока у меня есть это

import java.util.Arrays;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Scanner;



public class Chapter16Assignment {
        public static void main(String[] args){

            Scanner input = new Scanner(System.in);


            String userInput = "";
            System.out.print(" Enter a line of words: ");
            userInput = input.nextLine();
            List<String> userString = Arrays.asList(userInput);
            String[]userInput
            //userString.add(userInput);
            //.split
            Collections.sort(userString);
            System.out.println(userString);
            //System.out.println("Frequency of words: " + Collection.frequency(userString));

            }



    }

Мне нужно использовать split или что-то еще. я думал, что мог бы использовать метод сортировки и частоту для части 3.

Я ожидаю, что вывод будет вводить строку слов, а затем печатать эти слова в алфавитном порядке, а затем количество слов. на данный момент это не делает ничего из этого. хотя он получает информацию от пользователей.

1 Ответ

1 голос
/ 10 октября 2019

Вот как вы можете использовать метод split для преобразования строки в массив строк. Я не пользуюсь списком, так как хочу показать вам немного другой подход к решению этой проблемы.

Я удаляю пробелы и преобразовываю все в нижний регистр. Это зависит от вас, если вы хотите сделать это.

Scanner input = new Scanner(System.in);
String userInput;
System.out.print("Enter a line of words: ");
userInput = input.nextLine().replace(" ", "").toLowerCase();
String[] userInputSplit = userInput.split(""); // Splits array
Arrays.sort(userInputSplit); // Sorts array
System.out.println(Arrays.toString(userInputSplit)); // Prints sorted array
// Checks for frequency of each letter using maps
Map<String, Integer> countMap = Arrays.stream(userInputSplit)
        .collect(Collectors.toMap(Function.identity(), v -> 1, Integer::sum));
// Prints map
System.out.println("Frequency of words: " + countMap.toString());

Вывод:

Enter a line of words: The quick brown fox jumps over the lazy dog
[a, b, c, d, e, e, e, f, g, h, h, i, j, k, l, m, n, o, o, o, o, p, q, r, r, s, t, t, u, u, v, w, x, y, z]
Frequency of words: {a=1, b=1, c=1, d=1, e=3, f=1, g=1, h=2, i=1, j=1, k=1, l=1, m=1, n=1, o=4, p=1, q=1, r=2, s=1, t=2, u=2, v=1, w=1, x=1, y=1, z=1}

Редактировать:

Нравится @AndyTurner Предложено Вы также можете использовать Collectors.counting(), которыйнемного упрощает понимание синтаксиса, но он возвращает Long вместо Integer

Map<String, Long> countMap = Arrays.stream(userInputSplit)
                .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));

Collectors.counting по сути

Map<String, Integer> countMap = Arrays.stream(userInputSplit)
        .collect(Collectors.toMap(Function.identity(), v -> 1L, Long::sum));

Использование HashSet и Collections.frequency:

HashSet<String> uniqueValues = new HashSet<String>(userInputList);
for (String value : uniqueValues) {
    System.out.println("Frequency of " + value + " is: " + Collections.frequency(userInputList, value));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...