fork(1) download
  1. import java.util.Arrays;
  2. import java.util.concurrent.ExecutorService;
  3. import java.util.concurrent.Executors;
  4. import java.util.concurrent.TimeUnit;
  5.  
  6. class Ideone {
  7. public static void printUsage() {
  8. System.out.println("Compares a given set of integers and prints the maximum value and its location.\n"
  9. + "Usage:\n"
  10. + " Prog1 <int>, <int>, ...\n"
  11. + "Where <int> is any valid integer.");
  12. }
  13.  
  14. static ExecutorService newExecutorService() {
  15. return Executors.newFixedThreadPool(Runtime.getRuntime().availableProcessors());
  16. }
  17.  
  18. public static int[] parseInputParameters(final String[] args) {
  19. if ((args == null) || (args.length < 2)) {
  20. System.out.println("Not enough arguments. Cannot continue.");
  21. return null;
  22. }
  23.  
  24. final int[] result = new int[args.length];
  25. for (int i = 0; i < args.length; ++i) {
  26. try {
  27. result[i] = Integer.parseInt(args[i]);
  28. } catch (NumberFormatException e) {
  29. System.out.println("'" + String.valueOf(args[i]) + "' is not a valid integer. Cannot continue.");
  30. return null;
  31. }
  32. }
  33.  
  34. return result;
  35. }
  36.  
  37. public static String arrayToString(final int[] integers) {
  38. return Arrays.toString(integers).replaceAll("[\\[\\],]", "");
  39. }
  40.  
  41. static int[] createResultSet(final int[] inputValues) throws InterruptedException {
  42. final ExecutorService executor = newExecutorService();
  43. final int[] result = new int[inputValues.length];
  44. for (int i = 0; i < result.length; ++i) {
  45. final int index = i;
  46. executor.submit(new Runnable() {
  47.  
  48. @Override
  49. public void run() {
  50. result[index] = 1;
  51. }
  52. });
  53. }
  54. executor.shutdown();
  55. executor.awaitTermination(1, TimeUnit.SECONDS); // if those threads are not done 1 second after submitting them all, we assume a coding error and terminate
  56. return result;
  57. }
  58.  
  59. static void compareValues(final int[] inputValues, final int[] resultSet) throws InterruptedException {
  60. final ExecutorService executor = newExecutorService();
  61. int inc = 1;
  62. for (int i = 0; i < inputValues.length - 1; i++) {
  63. for (int j = inc; j < inputValues.length; j++) {
  64. final int indexLeft = i;
  65. final int indexRight = j;
  66. executor.submit(new Runnable() {
  67.  
  68. @Override
  69. public void run() {
  70. if (Integer.compare(inputValues[indexLeft], inputValues[indexRight]) < 0) {
  71. resultSet[indexLeft] = 0;
  72. } else {
  73. resultSet[indexRight] = 0;
  74. }
  75. }
  76. });
  77. }
  78. ++inc;
  79. }
  80. executor.shutdown();
  81. executor.awaitTermination(1, TimeUnit.SECONDS); // if those threads are not done 1 second after submitting them all, we assume a coding error and terminate
  82. }
  83.  
  84. static void printValues(final int[] inputValues, final int[] resultSet) throws InterruptedException {
  85. final ExecutorService executor = newExecutorService();
  86. for (int i = 0; i < resultSet.length; i++) {
  87. final int index = i;
  88. executor.submit(new Runnable() {
  89.  
  90. @Override
  91. public void run() {
  92. if (resultSet[index] == 1) {
  93. System.out.println("Maximum = " + inputValues[index] + " at index = " + index);
  94. }
  95. }
  96. });
  97. }
  98. executor.shutdown();
  99. executor.awaitTermination(1, TimeUnit.SECONDS); // if those threads are not done 1 second after submitting them all, we assume a coding error and terminate
  100. }
  101.  
  102. public static void main(String[] args) {
  103. final int[] inputValues = parseInputParameters(args);
  104. if (inputValues == null) {
  105. printUsage();
  106. return;
  107. }
  108.  
  109. try {
  110. final int[] resultSet = createResultSet(inputValues);
  111.  
  112. System.out.println("Input values: " + arrayToString(inputValues));
  113. System.out.println("Initialized result set: " + arrayToString(resultSet));
  114.  
  115. compareValues(inputValues, resultSet);
  116.  
  117. System.out.println("After comparison: " + arrayToString(resultSet));
  118.  
  119. printValues(inputValues, resultSet);
  120. } catch (InterruptedException e) {
  121. System.out.println("Operation interrupted.");
  122. }
  123. }
  124. }
Success #stdin #stdout 0.06s 380224KB
stdin
Standard input is empty
stdout
Not enough arguments. Cannot continue.
Compares a given set of integers and prints the maximum value and its location.
Usage:
  Prog1 <int>, <int>, ...
Where <int> is any valid integer.