Answer:
See explaination for program code
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();
}
}