Problema 35

import java.util.ArrayList;

import java.util.Iterator;

abstract class Task{

public abstract int execute();

}

class SimpleTask extends Task{

private int timpExecutie;

public SimpleTask(int timpExecutie){

this.timpExecutie=timpExecutie;

}

public void changeTime(int timpExecutie){

this.timpExecutie=timpExecutie;

}

public int execute(){

return this.timpExecutie;

}

public String toString(){

return "SimpleTask("+this.timpExecutie+")";

}

}

class ConditionalTask extends Task{

private Task task1, task2;

public ConditionalTask(Task task1, Task task2){

this.task1=task1;

this.task2=task2;

}

public int execute(){

if(Math.random()<0.5)

return 5+task1.execute();

else

return 5+task2.execute();

}

public String toString() {

return "ContitionalTask( "+task1.toString()+", "+task2.toString()+")";

}

}

class BlockTask extends Task{

private ArrayList<Task> tasks=new ArrayList<>();

public void insert(Task task){

if(task==null){

throw new NullPointerException("Task-ul nu poate fi null");

}

else{

tasks.add(task);

}

}

public int execute(){

int sum=0;

for(Task task:tasks){

sum=sum+task.execute();

}

return sum;

}

public String toString() {

StringBuilder result=new StringBuilder();

result.append("Block(");

Iterator<Task> it=tasks.iterator();

result.append(it.next().toString());

while(it.hasNext()){

result.append(",").append(it.next().toString());

}

result.append(")");

return result.toString();

}

}

public class Main {

public static void main(String[] args) {

Task block=new BlockTask();

((BlockTask)block).insert(new SimpleTask(5));

((BlockTask)block).insert(new SimpleTask(4));

Task task=new ConditionalTask(new SimpleTask(155),block);

System.out.println(task);

System.out.println(task.execute());

}

}