0% found this document useful (0 votes)
10 views10 pages

Fop 2 2 Variant Solution

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
10 views10 pages

Fop 2 2 Variant Solution

Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 10

Problem 1:

import java.util.Iterator;

interface Work<T> extends Iterable<T> {

boolean noWork();

Work<T> addwork(T x);

T viewWork();

Work<T> removeWork();

Work<T> reverse();

default Iterator<T> iterator() {

return new WorkIterator<T>(this);

class WorkIterator<T> implements Iterator<T> {

private Work<T> l;

public WorkIterator(Work<T> l) {

this.l = l;

public boolean hasNext() {

return !l.noWork();

public T next() {

T result = l.viewWork();

l = l.removeWork();

return result;

}
}

class NoWork<T> implements Work<T> {

public NoWork() { }

public boolean noWork() {

return true;

public T viewWork() {

throw new RuntimeException("No work!");

public Work<T> removeWork() {

throw new RuntimeException("No work!");

public Work<T> addwork(T x) {

return new SomeWork<T> (x,this);

public Work<T> reverse() {

return new NoWork<T>();

class SomeWork<T> implements Work<T> {

public T data;

public Work<T> next;

public SomeWork(T x, Work<T> l) {

data = x; next = l;

public boolean noWork() {


return false;

public T viewWork() {

return this.data;

public Work<T> removeWork() {

return this.next;

public Work<T> addwork(T x) {

return new SomeWork<T> (x,this);

public Work<T> reverse() {

Work<T> result = new NoWork<T>();

for(T t: this) result = new SomeWork<T>(t,result);

return result;

public class Doit {

public static void main(String[] arr) {

Work<String> work = new NoWork<>();

for(String s: arr) work = work.addwork(s);

for(String s: work.reverse()) System.out.println(s);

}
Problem 2:
import java.util.*;

class LibraryItem {

private static int nextId = 1;

private final int id;

private final String title;

private boolean available;

public LibraryItem(String title) {

this.id = nextId++;

this.title = title;

this.available = true;

public int getId() {

return id;

public String getTitle() {

return title;

public boolean isAvailable() {

return available;

}
public void setAvailable(boolean available) {

this.available = available;

public void checkOut() {

if (available) {

available = false;

System.out.println("Item checked out: " + getTitle());

} else {

System.out.println("Item is not available for checkout: " + getTitle());

public void checkIn() {

available = true;

System.out.println("Item checked in: " + getTitle());

@Override

public boolean equals(Object o) {

if (this == o) return true;

if (o == null || getClass() != o.getClass()) return false;

LibraryItem that = (LibraryItem) o;

return id == that.id;

@Override

public int hashCode() {


return title.hashcode() * 29 + id * 29 * 29;

@Override

public String toString() {

return "LibraryItem - ID: " + id + ", Title: " + title + ", Available: " + available;

class Library<T extends LibraryItem> {

private Map<Integer, T> itemMap;

private Set<T> checkedOutItems;

public Library() {

this.itemMap = new HashMap<>();

this.checkedOutItems = new HashSet<>();

public void addItem(T item) {

itemMap.put(item.getId(), item);

public void removeItem(T item) {

itemMap.remove(item.getId());

checkedOutItems.remove(item);

public void displayAvailableItems() {

System.out.println("Available Items:");
for (T item : itemMap.values()) {

if (item.isAvailable()) {

System.out.println(item);

public void displayCheckedOutItems() {

System.out.println("Checked Out Items:");

for (T item : checkedOutItems) {

System.out.println(item);

public void checkOutItem(int itemId) {

T item = itemMap.get(itemId);

if (item != null && item.isAvailable()) {

item.checkOut();

checkedOutItems.add(item);

} else {

System.out.println("Item with ID " + itemId + " is not available for checkout.");

public void checkInItem(int itemId) {

T item = itemMap.get(itemId);

if (item != null && !item.isAvailable()) {

item.checkIn();

checkedOutItems.remove(item);
} else {

System.out.println("Item with ID " + itemId + " is not checked out.");

class Book extends LibraryItem {

private String author;

public Book(String title, String author) {

super(title);

this.author = author;

public String getAuthor() {

return author;

public String getAuthorInfo() {

return "Author: " + author;

@Override

public String toString() {

return "Book - ID: " + getId() + ", Title: " + getTitle() + ", " + getAuthorInfo() + ", Available: " +
isAvailable();

}
class DVD extends LibraryItem {

private String director;

public DVD(String title, String director) {

super(title);

this.director = director;

public String getDirector() {

return director;

public String getDirectorInfo() {

return "Director: " + director;

@Override

public String toString() {

return "DVD - ID: " + getId() + ", Title: " + getTitle() + ", " + getDirectorInfo() + ", Available: " +
isAvailable();

}
Problem 3:
public static void main(String[] args) {
try {
int result = 10 / 0;
System.out.println("Result: " + result);
} catch (ArithmeticException e) {
System.out.println("Your Full Name");
e.printStackTrace();
} finally {
System.out.println("KIU");
}
}

You might also like