Мой вопрос в том, как мне отсортировать массивы имен и массив загрузок, чтобы они располагались в порядке возрастания, и каждое имя соответствовало соответствующему количеству загрузок. Я пытался 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]));
}
}
}
Большое спасибо за ответ, я новичок в программировании, поэтому мне трудно понять, что вы предложили, но я все равно попробую
да, я пытаюсь заставить его работать, используя только массивы




Я бы начал создавать класс 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
Кто-нибудь захочет объяснить, как вводить вводимые пользователем данные и помещать их в поле «Загрузки» и «Название песни» для типа песни.
спасибо за ответ, поэтому я решил, что могу использовать цикл 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
}
вы обязаны использовать с массивом или мы можем использовать любую коллекцию?