首页 > 解决方案 > 计算歌曲评分的数组算法中的匹配项

问题描述

在过去的六个小时里,我一直在尝试解决这一小段代码,我真的很感激学习如何做到这一点。

到目前为止我有这个数组:

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

但我觉得这是错误的。

谢谢!

标签: javaarrays

解决方案


所以首先迭代 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]);
     }
   }

推荐阅读