diff --git a/src/BallVolume.java b/src/BallVolume.java new file mode 100644 index 0000000..2ab3a1d --- /dev/null +++ b/src/BallVolume.java @@ -0,0 +1,20 @@ + + +public class BallVolume extends ThreadSubscriber { + + String in; + @Override + public void notifySubscriber() { + in = topic.getInput(); + System.out.println("Ball Volume = " + execute()); + + } + + @Override + public String execute() { + double PI = 3.14159265359; + double diameter = Double.parseDouble(in); + double res = (4.0/3.0) * PI * Math.pow(diameter, 3.0); + return String.valueOf(res); + } +} diff --git a/src/Fibonacci.java b/src/Fibonacci.java new file mode 100644 index 0000000..0254460 --- /dev/null +++ b/src/Fibonacci.java @@ -0,0 +1,25 @@ +public class Fibonacci extends ThreadSubscriber{ + String input; + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("Result of Fibonacci series at "+input+": "+execute()); + } + @Override + public String execute() { + int num1 = 0; + int num2 = 1; + int sum = 0; + int n = Integer.parseInt(input); + if(n<=1) + sum = n; + for(int i=1 ; i < n ; i++) { + sum = num1 + num2; + num1 = num2; + num2 = sum; + } + String str = String.valueOf(sum); + + return str; + } +} \ No newline at end of file diff --git a/src/ISubscriber.java b/src/ISubscriber.java index d3a605c..ffc4729 100644 --- a/src/ISubscriber.java +++ b/src/ISubscriber.java @@ -1,4 +1,4 @@ - public interface ISubscriber { - public abstract void notifySubscriber(String input); + public abstract void notifySubscriber(); + public abstract String execute(); } diff --git a/src/Main.java b/src/Main.java index 9b8c2b0..51c6f0c 100644 --- a/src/Main.java +++ b/src/Main.java @@ -1,17 +1,29 @@ import java.util.Scanner; public class Main { - private static ISubscriber subscribers [] = { - new SimpleSubscriber(), - new ReallySimpleSubscriber(), - }; - public static void main(String[] args) { - Topic mathTopic = new Topic(); - for (ISubscriber sub : subscribers) { - mathTopic.addSubscriber(sub); - } - Scanner sc = new Scanner(System.in); - String input = sc.next(); - mathTopic.dispatchEvent(input); - } + + public static void main(String[] args) { + + while (true) { + ThreadSubscriber subscribers[] = { + new SphereCircumference(), + new multiplicationSeries(), + new BallVolume(), + new twoPowerN(), + new Fibonacci(), + new SphereArea(), + new SummationSeries() + }; + + Topic mathTopic = new Topic(); + for (ThreadSubscriber sub : subscribers) { + mathTopic.addSubscriber(sub); + sub.setTopic(mathTopic); + } + Scanner sc = new Scanner(System.in); + String input = sc.nextLine(); + mathTopic.setInput(input); + mathTopic.dispatchEvent(); + } + } } diff --git a/src/ReallySimpleSubscriber.java b/src/ReallySimpleSubscriber.java deleted file mode 100644 index fb1114a..0000000 --- a/src/ReallySimpleSubscriber.java +++ /dev/null @@ -1,8 +0,0 @@ - -public class ReallySimpleSubscriber implements ISubscriber { - @Override - public void notifySubscriber(String input) { - // TODO Auto-generated method stub - System.out.println("Hello, I am really a simple subscriber and I am notified with " + input); - } -} diff --git a/src/SimpleSubscriber.java b/src/SimpleSubscriber.java deleted file mode 100644 index 5b0e4aa..0000000 --- a/src/SimpleSubscriber.java +++ /dev/null @@ -1,10 +0,0 @@ - -public class SimpleSubscriber implements ISubscriber { - - @Override - public void notifySubscriber(String input) { - // TODO Auto-generated method stub - System.out.println("Hello, I am a simple subscriber and I am notified with " + input); - } - -} diff --git a/src/SphereArea.java b/src/SphereArea.java new file mode 100644 index 0000000..9bf1093 --- /dev/null +++ b/src/SphereArea.java @@ -0,0 +1,20 @@ + +public class SphereArea extends ThreadSubscriber{ + + String input; + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("Sphere Area = " + execute()); + } + + @Override + public String execute() { + double n = Integer.parseInt(input); + double pi = 3.14; + double sphereArea = 4 * pi * n * n; + return String.valueOf(sphereArea); + } + + +} diff --git a/src/SphereCircumference.java b/src/SphereCircumference.java new file mode 100644 index 0000000..a00628c --- /dev/null +++ b/src/SphereCircumference.java @@ -0,0 +1,15 @@ +public class SphereCircumference extends ThreadSubscriber{ + String input; + @Override + public void notifySubscriber() { + input =topic.getInput(); + System.out.println("Sphere Circumference = "+execute()); + } + + + @Override + public String execute() { + double result = Double.parseDouble(input)*2*3.14159265359; + return String.valueOf(result); + } +} diff --git a/src/SummationSeries.java b/src/SummationSeries.java new file mode 100644 index 0000000..27d0e39 --- /dev/null +++ b/src/SummationSeries.java @@ -0,0 +1,15 @@ +public class SummationSeries extends ThreadSubscriber { + String input; + @Override + public void notifySubscriber() { + input = topic.getInput(); + System.out.println("SummationSeries = " + execute()); + } + + @Override + public String execute() { + int in = Integer.parseInt(input); + int res = in * (in + 1) / 2; + return String.valueOf(res); + } +} diff --git a/src/ThreadSubscriber.java b/src/ThreadSubscriber.java new file mode 100644 index 0000000..5b06e74 --- /dev/null +++ b/src/ThreadSubscriber.java @@ -0,0 +1,24 @@ +public abstract class ThreadSubscriber extends Thread implements ISubscriber { + Topic topic; + + public ThreadSubscriber(){ + + } + + public Topic getTopic() { + return topic; + } + + public void setTopic(Topic topic) { + this.topic = topic; + } + + @Override + public abstract void notifySubscriber(); + public abstract String execute(); + + @Override + public void run() { + notifySubscriber(); + } +} diff --git a/src/Topic.java b/src/Topic.java index 8fa2e2e..d1336a2 100644 --- a/src/Topic.java +++ b/src/Topic.java @@ -2,24 +2,32 @@ import java.util.List; public class Topic { - - private List subscribers; - - public Topic() { - subscribers = new ArrayList(); - } - - public void addSubscriber(ISubscriber sub) { - subscribers.add(sub); - } - - public List getSubscribers() { - return subscribers; - } - - public void dispatchEvent(String input) { - for (ISubscriber sub : this.getSubscribers()) { - sub.notifySubscriber(input); - } - } + private List subscribers; + String input; + + public Topic() { + subscribers = new ArrayList(); + } + + public void addSubscriber(ThreadSubscriber sub) { + subscribers.add(sub); + } + + public List getSubscribers() { + return subscribers; + } + + public String getInput() { + return input; + } + + public void setInput(String input) { + this.input = input; + } + + public void dispatchEvent() { + for (ThreadSubscriber sub : this.getSubscribers()) { + sub.start(); + } + } } diff --git a/src/multiplicationSeries.java b/src/multiplicationSeries.java new file mode 100644 index 0000000..35d0cd4 --- /dev/null +++ b/src/multiplicationSeries.java @@ -0,0 +1,21 @@ +import java.util.Scanner; + +public class multiplicationSeries extends ThreadSubscriber{ + String input; + @Override + public void notifySubscriber() { + input =topic.getInput(); + System.out.println("MultiplicationSeries = "+execute()); + } + + + @Override + public String execute() { + int Number = Integer.parseInt(input); + int result = 1 ; + for (int i = 1; i <= Number; i++) { + result *= i; + } + return String.valueOf(result); + } +} diff --git a/src/twoPowerN.java b/src/twoPowerN.java new file mode 100644 index 0000000..cfe71a8 --- /dev/null +++ b/src/twoPowerN.java @@ -0,0 +1,25 @@ +public class twoPowerN extends ThreadSubscriber{ + String input; + @Override + public void notifySubscriber() { + input =topic.getInput(); + System.out.println("two power n = "+execute()); + } + + @Override + public String execute() { + int exponent = Integer.parseInt(input); + int product = 2; + + switch (exponent) { + case 0: + product = 1; + break; + } + + for (int i = 1; i < exponent; i++) { + product = product * 2; + } + + return String.valueOf(product) ; +}