package projsamples;
import java.util.Collection;
import java.util.List;
import java.util.Scanner;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
public class FactorialUsingThreads {
public static void main(String[] args) throws InterruptedException,ExecutionException{
Scanner reader = new Scanner(System.in);
int number = reader.nextInt();
ExecutorService es = Executors.newSingleThreadExecutor();
Future<Integer> result=es.submit(new FactorialCalc(number));
System.out.println("result value after calc is: "+ result);
int finalResult =(int)result.get();
System.out.println("The result of the factorial calculation for the"+number+"is: "+finalResult);
}
}
class FactorialCalc implements Callable<Integer>{
private int number;
public FactorialCalc(int number) {
super();
this.number = number;
}
@Override
public Integer call() throws Exception {
// TODO Auto-generated method stub
return factorial(number);
}
private Integer factorial(int number2) throws InterruptedException {
// TODO Auto-generated method stub
int number = number2;
int result = 1;
while(number2 !=0){
result = number*result;
number=number-1;
Thread.sleep(100);
}
System.out.println("result"+result);
return result;
}
}
In the above code what I am trying to do is, I want to find the factorial number for any number entered by user. The result returned is the object when I try to typecast the integer object and the get the value is not happening. I know this could be a very basic thing which I am not able to do.any small heads up on this would be helpful.
Thanks a lot in advance for all the kind people who can help.
This has to do with multithreading. You just need
number2infactorialmethod, and remember decrement it.