Java soicanpost中的数组排序

Java soicanpost中的数组排序,java,arrays,Java,Arrays,我的问题是如何对arrayofnames和arrayofdownloads进行排序,使它们按升序排列,并且每个名称都与相应的下载次数相匹配。我已经试了4个小时了,但我似乎无法控制自己 谢谢 import java.util.*; import java.util.stream.*; public class short6 { public static void main(String[] args) { String[] arrayofnames

我的问题是如何对arrayofnames和arrayofdownloads进行排序,使它们按升序排列,并且每个名称都与相应的下载次数相匹配。我已经试了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]));
        }
    }
}
import java.util.*;
导入java.util.stream.*;
公开课短6
{ 
公共静态void main(字符串[]args)
{
String[]arrayofnames=新字符串[4];
int[]arrayofdownloads=新int[4];
打印消息(arrayofnames、ArrayOfDownload);
详细信息(arrayofnames、ArrayOfDownload);
系统出口(0);
}
公共静态void打印消息(字符串[]arrayofnames,int[]ArrayOfDownload)
{
扫描仪=新的扫描仪(System.in);
整数=0;
for(int i=0;i
我将开始创建一个包含歌曲名称和下载次数的歌曲(例如)类:

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

        });
完成后,只需打印对象(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类中实现setter方法并创建一个不带参数的构造函数,这样您就可以在读取值时设置这些值。

谢谢您的回复,所以我想我可以使用for循环来询问有关歌曲名称和下载次数的问题。我发现最难的是将他们的响应从1-4放到每个数组中,并将dong name保存在歌曲记录的正确字段中,下载次数相同

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
    }
publicstaticvoidprintmessage(song[]arrayOfSongs)
{
扫描仪=新的扫描仪(System.in);
整数=0;
for(int i=0;i
您一定要使用array还是我们可以使用任何集合?非常感谢您的回复,我对编程非常陌生,所以我觉得很难理解您的建议,但我会尝试一下。是的,我正在尝试仅使用Arrays或更好地使用它:
Arrays.sort(arrayOfSongs,Comparator.Comparating(Song::getName))
绝对同意@benoit是否有人愿意解释如何接受用户输入并将其放入歌曲类型的下载和歌曲名称字段中。
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
    }