Practice Object-oriented programming (OOP) with authentic IB Computer Science (CS) exam questions for both SL and HL students. This question bank mirrors Paper 1, 2, 3 structure, covering key topics like programming concepts, algorithms, and data structures. Get instant solutions, detailed explanations, and build exam confidence with questions in the style of IB examiners.
Full details of the customers are stored as objects of the Customer class. This class is partially shown below:
public class Customer
{
private String memberId;
private String email; //email address (assume only 1 per customer)
public Customer(String a, String b)
{
memberId = a;
email = b;
}
public String getMemberId()
{
return memberId;
}
public String getEmail()
{
return email;
}
}
The objects can be accessed through the linked list allCustomerswhich is declared in the main (driver) class as follows:
LinkedList<Customer> allCustomers = new LinkedList<Customer>()
Outline why a linked list structure has been chosen for allCustomers.
Construct the method goldMails()that will return an ArrayListcontaining the email addresses of all current “Gold” members. You should make use of any previously defined methods.
A smartphone app is being developed to manage tasks and reminders. The app uses classes such as Task, Reminder, and Event, which inherit from a base class ScheduleItem.
Define the term polymorphism.
Explain one advantage of polymorphism in this app.
Describe two advantages of using libraries of objects in the development of this app.
A generic Event class is defined as follows:
class Event
{
private String eventID;
private int numberOfRaces;
private Race$$ races;
private Race finals;
public Event(String ID, int numberOfRaces)
{
eventID = ID;
races = new Race;
for(int i = 0; i < numberOfRaces; i++)
{
races = new Race();
}
finals = new Race();
}
public void addSwimmers()
{
// fills the qualifying heats with swimmers
}
public void fillFinals()
{
// fills the finals race with the best 8 from the qualifying heats
}
// more methods()
}
The Event class above assumes that the event has more than 8 swimmers and requires qualifying heats. However, an event with less than 9 swimmers has no qualifying heats, so the original Event class was inherited by a new class FinalsOnlyEvent.
The same method identifier addSwimmersis used in both classes Raceand Event.
Explain why this does not cause a conflict.
Outline two advantages of the OOP feature “inheritance”.
Outline how method overriding can help to create the new class FinalsOnlyEvent.
An image processing software needs to perform operations on a collection of pixels.
Explain the advantages of using library collections like ArrayList or LinkedList in this context.
Construct code to add a pixel to an ArrayList and iterate over all pixels to apply a filter.
Describe one situation where a LinkedList might be preferred over an ArrayList in this application.
An airline company is updating its reservation system, which includes classes like Seat, EconomySeat, and BusinessSeat. EconomySeat and BusinessSeat inherit from Seat.
Explain one advantage of polymorphism in this reservation system.
Explain two advantages of modularity in developing this system.
Define the term polymorphism.
In a text processing program, we need to count the occurrences of a specific character.
Construct code that uses a for loop to iterate through a string text and counts how many times the character 'e' appears.
Explain how the loop and selection statements work together in your code.
Define the term 'parameter variable' in the context of a method that performs this counting task.
A company provides car parking services in large cities and needs a computer system to keep track of the number of vehicles using its parking areas.
When a vehicle arrives, its registration plate is recorded on the system and it is allocated a number that identifies where it should park. When the vehicle leaves, that space is made available for other vehicles to use.
Vehicles are identified by their unique registration plate, which is an alphanumeric code of eight characters (e.g. X1234567). This is clearly displayed on the vehicle.
A programmer created the classes ParkingAreaandVehicleto model the above situation.
public class ParkingArea {
private Vehicle vehicles$$;
private String name;
ParkingArea(String name, int capacity) {
this.name = name;
if (capacity > 300) capacity = 300;
this.vehicles = new Vehicle$capacity$;
}
String getName() {
return name;
}
public int getCapacity() {
return vehicles.length;
}
public int findVehicle(String reg) {
//find where the vehicle is located in the array and
//return the index not yet written
}
}
public class Vehicle {
private String registration;
private byte colour;
private boolean broken;
public final static byte BLACK=1;
public final static byte WHITE=2;
public final static byte BLUE=3;
public final static byte RED=4;
public final static byte GREEN=5;
private final static double ADMIN\_FEE = 3;
public Vehicle() {}
public Vehicle(String registration) {
this.registration = registration;
}
public Vehicle(String registration, byte colour) {
this.registration = registration;
this.colour=colour;
}
public void setBroken(boolean broken) {
this.broken=broken;
}
public void setColour(byte colour) {
this.colour=colour;
}
public boolean getBroken() {
return broken;
}
public String getRegistration() {
return registration;
}
public double pay(int hours) {
// code to return admin fee - only if applicable
}
}
Construct code to create an instance of the Vehicleclass that has a registration of X1234567.
Outline why it is necessary to use the keyword thisin the setBrokenmethod of the Vehicleclass.
Construct code that sets the colour of the object created in part (i) as black.
Describe the relationship between the classes Vehicleand ParkingArea.
Outline one effect of using the modifier staticwhen declaring a variable.
A hotel chain has a loyalty scheme in which customers are awarded 1000 points for each day they stay in one of their hotels. With these points, customers can achieve one of three status levels: Gold, Silver or Bronze. The level will determine the extra services to which they are entitled.
The total number of points collected during the current year will determine which of the three status levels they are assigned for the following year: For example only the points collected in 2018 will determine the status level for 2019.
Occasionally, new customers receive additional bonus points as part of a promotion.
The Pointsclass keeps details of the points and status levels of each customer.
public class Points
{
private String memberId; // id of the hotel customer
private int totalPoints; // this year's points
private int bonusPoints; // any bonus points given to this year's new member
private String statusNow; // current(this year's)status
private String statusNextYear; // following year's status
private Visits$$ allVisits = new Visits;//details of each visit
// during this year
int y; // number of visits this year
public Points(String id) // constructor for new member
{
memberId = id;
bonusPoints = 0;
y = 0;
statusNow = 'Bronze';
}
//constructor for new member given bonus points (valid for current year only)
public Points(String id, int bp)
{
memberId = id;
bonusPoints = bp; // multiples of 1000 - maximum number is 5000
y = 0;
statusNow = 'Bronze';
}
// all the accessor and mutator methods are present but not shown
public Visits getAllVisits(int v)
{
return allVisits;
}
public void addVisit(Visits v) // adds a new Visit object to the array
{
allVisits = v;
y = y + 1;
}
isGold() {code missing}
calculateTotalPoints(){code missing}
daysMissing(){code missing}
}
The instance variables in the Pointsclass are preceded by the modifier private. The choice of modifier affects the way in which these variables are accessed or used.
The customers will be assigned one of three levels for the following year (Gold, Silver or Bronze) depending upon the current year’s total points as follows.
In 2018, Tim became a member for the first time and was awarded a bonus of 1000 points. So far, in 2018, Tim has stayed three times at one of these hotels. The first visit lasted 2 days, the second visit lasted 1 day and the third visit lasted 6 days.
The different Pointsobjects are stored in an array which is declared globally in the main (driver) class as follows:Points[] allPoints = new Points[10000];
With the use of two examples other than private, outline how the choice of this modifier affects the way in which these variables are accessed or used.
With reference to the two methods with the same name in the Pointsclass, explain the OOP feature that makes it possible to successfully implement either of these methods.
State the status level that Tim has been assigned, for 2019, following these visits.
State how an individual object can be identified using this array.
The attribute statusNowis assigned its correct value at the beginning of every year for existing members. It cannot be changed during the year.
Construct the method isGold()in the Pointsclass, which will return whether the current status is “Gold”.
A text editor needs to implement an undo functionality using stacks.
Describe how a stack can be used to implement the undo feature.
Construct code to push actions onto the stack when changes are made.
Construct code to pop actions from the stack to undo the last change.
A restaurant uses an object-oriented program to manage the cost of the food and drink consumed by customers. Everytime a table is occupied a Paymentobject is instantiated which will contain details of the items ordered. As each item is ordered, a FoodItemor a DrinkItemobject is added to the Paymentobject as appropriate.
public class Payment
{
private FoodItem[] fi = new FoodItem[100];
private int fiCount;
private static double foodTax = 0.2; // 20 % sales tax added to
// all food prices
private DrinkItem[] di = new DrinkItem[100];
private int diCount;
private static double drinkTax = 0.1; // 10 % sales tax added to
// all drink prices
public Payment()
{
fiCount = 0;
diCount = 0;
}
public DrinkItem getDi(int x)
{
return di[x];
}
// all other accessor and mutator methods are included
// addFoodItem() – this method adds a new FoodItem object
// addDrinkItem() – this method adds a new DrinkItem object
public static double findPrice(Item[] pl, String c)
{ //code missing }
// calculateBill() – This method returns the bill (the total value of
// the items consumed for a particular table)
}
public class FoodItem
{
private String itemCode;
private int quantity;
public FoodItem(String x, int y)
{
itemCode = x;
quantity = y;
}
// all accessor and mutator methods are included
}
The DrinkItemclass is defined in a similar way.
Whenever a Payment object is instantiated, the variables fiCount and diCount are initialized to 0 through the code in the constructor.
Outline an alternative method of initializing these variables that would not require the use of the code in the constructor.
State the implication of the use of the term staticin the Paymentclass.
With reference to two examples from the classes in the resource, explain the benefits gained by the use of different data types.
Describe the purpose of the following statement:
**private** FoodItem[] fi = **new** FoodItem[100]
The Paymentclass method addFoodItem()is passed a FoodItemobject as a parameter.
Construct the method addFoodItem().