Сортировка массивов в Java soicanpost

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

Благодарность

    import java.util.*;
import java.util.stream.*;

public class short6 
{ 
    public static void main(String[] args) 
    {
        String[] arrayofnames = new String[4];
        int[] arrayofdownloads = new int[4];

        printmessage(arrayofnames, arrayofdownloads);
        details(arrayofnames, arrayofdownloads);
        System.exit(0);
    }

    public static void printmessage(String[] arrayofnames, int[] arrayofdownloads)
    {
        Scanner scanner = new Scanner(System.in);
        int totalDownloads = 0;

        for (int i = 0; i < arrayofnames.length; i++) 
        {
            System.out.println("What is track " + (i + 1));
            arrayofnames[i] = scanner.nextLine();
            System.out.println("How many thousands of times has it been downloaded? ");
            arrayofdownloads[i] = Integer.parseInt(scanner.nextLine());
        }

        Arrays.sort(arrayofnames);
        Arrays.sort(arrayofdownloads);

        System.out.println("The track downloaded the most is " + arrayofdownloads[0]+".");
    }

    public static void details(String[] arrayofnames, int[] arrayofdownloads)
    {
        int totaldownloads = IntStream.of(arrayofdownloads).sum();
        System.out.println("The track downloaded the most is " + arrayofdownloads[0]+".");
        System.out.println("The total number of downloads of these 4 tracks was " + totaldownloads * 1000 +".");

        System.out.println("\nThe details of the downloads are");

        for (int i = 1; i < arrayofnames.length; i++) 
        {
            System.out.println(arrayofnames[i]);
            System.out.println((arrayofdownloads[i]));
        }
    }
}

вы обязаны использовать с массивом или мы можем использовать любую коллекцию?

Negi Rox 29.11.2018 14:42

Большое спасибо за ответ, я новичок в программировании, поэтому мне трудно понять, что вы предложили, но я все равно попробую

Virolite 29.11.2018 18:14

да, я пытаюсь заставить его работать, используя только массивы

Virolite 29.11.2018 18:15
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
3
44
2

Ответы 2

Я бы начал создавать класс Song (например), который содержит как название песни, так и количество загрузок:

public class Song {

  private String name;

  private int downloads;

  public Song(String name, int downloads) {
    this.name = name;
    this.downloads = downloads;
  }

  public String getName() {
    return this.name;
  }

  public int getDownloads() {
    return this.downloads;
  }

}

А затем создайте массив песен:

Song[] arrayOfSongs = new Song[4];

И загрузите его со входа:

arrayOfSongs[i] = new Song(scanner.nextLine(), Integer.parseInt(scanner.nextLine()));

Теперь вам просто нужно отсортировать его с помощью компаратора:

Arrays.sort(arrayOfSongs, new Comparator<Song> () {
            public int compare(Song o1, Song o2) {
                // Sorting by name              
                return o1.getName().compareTo(o2.getName());
            }

        });

Или, как сказал @Benoit в комментариях, это было бы еще проще (Java 8 или выше):

Arrays.sort(arrayOfSongs, Comparator.comparing(Song::getName));

И все готово, просто распечатав объекты (здесь может быть полезен метод toString), у вас есть отсортированная информация.

Обновлено: чтобы прочитать ввод, записывающий вопросы, вам просто нужно сохранить значения в переменных, например.

System.out.println("What is track " + (i + 1));
String songName = scanner.nextLine();
System.out.println("How many thousands of times has it been downloaded? ");
int songDownloads = Integer.parseInt(scanner.nextLine());
arrayOfSongs[i] = new Song(songName, songDownloads);

Или вы можете просто реализовать методы установки в классе Song и создать конструктор без параметров, чтобы вы могли устанавливать значения по мере их чтения.

Или даже лучше: Arrays.sort(arrayOfSongs, Comparator.comparing(Song::getName));

Benoit 29.11.2018 15:41

Абсолютно согласен @Benoit

raven1981 29.11.2018 15:47

Кто-нибудь захочет объяснить, как вводить вводимые пользователем данные и помещать их в поле «Загрузки» и «Название песни» для типа песни.

Virolite 29.11.2018 18:30

спасибо за ответ, поэтому я решил, что могу использовать цикл for, чтобы задавать вопросы о названии песни и количестве загрузок. Что мне сложно, так это поместить их ответ в каждый массив от 1 до 4 и сохранить имя донга в правильном поле записи песни и то же самое для количества загрузок?

public static void printmessage(song[] arrayOfSongs)
{
    Scanner scanner = new Scanner(System.in);
    int totalDownloads = 0;

    for (int i = 0; i < arrayOfSongs.length; i++) 
    {
        System.out.println("What is track " + (i + 1));
        // store in array x name field
        System.out.println("How many downloads does this track have? ");
        //store in array x downloads field
    }

Другие вопросы по теме