180k views
1 vote
A Musician class has been built that takes the name, number of albums sold, and number of weeks that artist has been on the Top40 list. The Musician class also has a boolean instance variable isPlatinum that determines if the musician has gone platinum, meaning they’ve sold over a million copies of the same record. The Billboard class currently has a top10 ArrayList that will store the top 10 musicians as a list. In the Billboard class, create an add method that will add a musician to the list if there are less than 10 musicians in the list, and if the musician has Platinum status. If there are 10 musicians in the list, then the method should call the replace method. Otherwise, a message should be displayed to the user that the musician could not be added to the top10 list. The replace method compares the total number of weeks that the musician has been on the top40 list. If the musician with the lowest number of weeks on the top40 is lower than the number of weeks on the top40 of the new musician, then the old musician is replaced by the new one. There should be a message to the user that the old musician has been replaced by the new one. Otherwise, the user should be notified that the new musician cannot be added because they don’t have enough weeks on the top40. This method should be created in the Billboard class. Use the BillboardTester class to test if the new musicians being added are being correctly replaced, or omitted from the Top 10.

1 Answer

1 vote

Answer:

See explaination for program code

Step-by-step explanation:

Java code below:

Musician.java :

public class Musician {

private String name;

private int weeksInTop40;

private int albumsSold;

private boolean isPlatinum;

public Musician(String name, int weeksInTop40, int albumsSold) {

this.name = name;

this.weeksInTop40 = weeksInTop40;

this.albumsSold = albumsSold;

setPlatinum(albumsSold);

}

public void setPlatinum(int albumsSold) {

if(albumsSold >= 1000000) {

isPlatinum = true;

}else {

isPlatinum = false;

}

}

public int getWeeksInTop40() {

return this.weeksInTop40;

}

public String getName() {

return this.name;

}

public boolean getIsPlatinum() {

return this.isPlatinum;

}

public String toString() {

return this.name;

}

}

Billboard.java :

import java.util.ArrayList;

public class Billboard {

private ArrayList<Musician> top10 = new ArrayList<Musician>();

public void add(Musician newMusician) {

if(this.top10.size()<10 && newMusician.getIsPlatinum()==true) {

/**

* Less than 10 musician are present in the list currently

* And also the newMusician is platinum

* */

this.top10.add(newMusician);

}else {

if(newMusician.getIsPlatinum()==false) {

System.out.println("The new musician "+newMusician+" cannot be added because not enough records are sold");

}else {

/**

* We need to call the replace method

* */

replace(newMusician);

}

}

}

public void replace(Musician newMusician) {

/**

* First we need to find what is the lowest number of weeks

* an musician was there in top40.

* */

int lowestOnTop40 = Integer.MAX_VALUE;

int index=-1;

for(int i=0;i<this.top10.size();i++) {

if(this.top10.get(i).getWeeksInTop40()<lowestOnTop40) {

lowestOnTop40 = this.top10.get(i).getWeeksInTop40();

index = i;

}

}

/**

* We have at what position the lowest number of week on top value in variable

* lowestOnTop40 at index

* We need to compare this value with newMusician's number of weeks on top 40

* */

if(lowestOnTop40 < newMusician.getWeeksInTop40()) {

System.out.println("The old musician "+this.top10.get(index)+" has been replaced by new musician "+newMusician);

this.top10.set(index, newMusician);

}else {

System.out.println("The new musician "+newMusician+" cannot be added because not enough weeks on top40.");

}

}

public void printTop10() {

System.out.println(top10);

}

}

BillboardTester.java :

public class BillboardTester {

public static void main(String[] args) {

Billboard top10 = new Billboard();

top10.add(new Musician("Beyonce", 316, 100000000));

top10.add(new Musician("The Beatles", 365, 600000000));

top10.add(new Musician("Drake", 425, 150000000));

top10.add(new Musician("Pink Floyd", 34, 250000000));

top10.add(new Musician("Mariah Carey", 287, 200000000));

top10.add(new Musician("Rihanna", 688, 250000000));

top10.add(new Musician("Queen", 327, 170000000));

top10.add(new Musician("Ed Sheeran", 536, 150000000));

top10.add(new Musician("Katy Perry", 317, 143000000));

top10.add(new Musician("Justin Bieber", 398, 140000000));

//This musician should not be added to the top10 because they don't have enough records sold

top10.add(new Musician("Karel the Dog", 332, 60));

//This musician should replace the artist

top10.add(new Musician("Tracy the Turtle", 332, 150000000));

//This musician should not replace an artist, but is a Platinum artist

top10.add(new Musician("Alex Eacker", 100, 23400000));

top10.printTop10();

}

}

User Leonyx
by
7.4k points