java - 在 Java 中对数组进行排序 soicanpost
问题描述
我的问题是如何对 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]));
}
}
}
解决方案
我将开始创建一个包含歌曲名称和下载次数的歌曲(例如)类:
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 类中实现 setter 方法并创建一个不带参数的构造函数,这样你就可以在读取它们时设置值。
推荐阅读
- javascript - 在一个简单的 Web 应用程序中保存单选按钮的最后状态。我需要数据库吗?
- node.js - 如何让 Passport.js 在 Adonis 框架中工作
- php - YouTube API v3 抓取时间
- php - 如何将值(条目)从 WPForm Wordpress 存储到 PhpAdmin 数据库
- entity-framework - 如何隐藏已删除的实体
- javascript - Dynamodb 条件更新根据条件添加或删除
- docker - 如何在 docker 文件中传递这一行。[/runjd.sh installjdk -Dname=javaversion]
- python - 将方法放在views.py中的类中
- python - 使用 Python 将 OpenCV cv.Rectangle(img, pt1, pt2) 转换为 NumPy 数组
- css - 创建具有视差效果的图像的 css 网格