java - 计算歌曲评分的数组算法中的匹配项
问题描述
在过去的六个小时里,我一直在尝试解决这一小段代码,我真的很感激学习如何做到这一点。
到目前为止我有这个数组:
public static void main ()
{Song[] topTenSongs = {new Song("The Twist"),
new Song ("Smooth"),
new Song ("Mack the Knife"),
new Song ("How Do I Live"),
new Song ("Party Rock Anthem"),
new Song ("I Gotta Feeling"),
new Song ("Macarena (Bayside Boys Mix)"),
new Song ("Physical"),
new Song ("You Light Up My Life"),
new Song ("Hey Jude")
};
String[] tenSongNames = {"The Twist",
"Smooth",
"Mack the Knife",
"How Do I Live",
"Party Rock Anthem",
"I Gotta Feeling",
"Macarena (Bayside Boys Mix)",
"Physical",
"You Light Up My Life",
"Hey Jude"};
int [] songRatings = {2,8,10, 7,1,6,2,4,3,5};
我的目标是使用 for-each 循环来计算排名第二的歌曲数量,然后使用字符串变量和字符串连接来跟踪排名第二的歌曲标题。
我该怎么做呢?我目前有一些类似的东西:
for (Song s : topTenSongs) {
int count = 0;
if(s.getRating() == 2) {
System.out.println(count + 1);
}
}
但我觉得这是错误的。
谢谢!
解决方案
所以首先迭代 songRatings
数组以保持索引时的跟踪,从该索引的数组中value==2
获取歌曲topTenSongs
for循环
for(int i=0; i< songRatings.length; i++){
if(songRatings[i]== 2){
System.out.println("The song with rating 2 is :"+ tenSongNames[i]);
// In the same way you can get songs from `topTenSongs` array of specific index `topTenSongs[i]`
}
}
如果有兴趣学习 java-8,请使用IntStream
java-8 内部流
IntStream.range(0, songRatings.length).filter(i->songRatings[i]==2).forEach(s->System.out.println(tenSongNames[s]));
为每个
int count =0;
for(int i: songRatings){
count++;
if(i==2){
System.out.println("The song with rating 2 is :"+ tenSongNames[i]);
}
}
推荐阅读
- powershell - 基于文化的时间变量格式
- javascript - 如何使用 ajax 请求发送大于 1MB 的文件?
- windows - 使 localhost 上的 netty 服务器可通过 Internet 访问
- c# - .ApiClient.Model.Rate 无法序列化,因为它没有无参数构造函数?
- c# - C# 根据整数 ID 从自定义对象列表创建唯一校验和/哈希
- android - 测试环境中的 Google Play 集成错误“没有可用于此商家的可接受卡”
- websocket - 我应该如何使用 locust 为 WebSocket 编写压力测试
- jquery - ElementUI - 在 el-select 中无法转换为空格
- android - 由于 PackageList 自动生成的文件,React Native FBSDKPackage 在 React Native 0.60 版本上链接错误
- templates - 使用 Mixin 类扩展 Groovy MarkupTemplateEngine