Guest User

Untitled

a guest
May 5th, 2016
67
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. import java.util.Scanner;
  2.  
  3. class Calculator extends Thread {
  4. int a = 1;
  5. double b = Math.pow(2, 1 / 2);
  6. void threadCalc(threads index, n)
  7. {
  8. double h = (b - a) / n;
  9. for (int i = 0; i < n-1; i++)
  10. {
  11. x [i] = a + i * h;
  12. double results[i] = (x[i] + h /2) * h ;
  13. }
  14. }
  15. public void run(n) {
  16. Thread[] threads = new Thread[n];
  17. for (int i = 0; i < n-1; i++)
  18. {
  19. threads[i] = new Thread(threadCalc);
  20. threads[i].start(i);
  21. }
  22. for (int i = 0; i < n-1; i++)
  23. {
  24. threads[i].Join();
  25. }
  26. result = 0;
  27. for (int i = 0; i < n-1; i++)
  28. {
  29. result += results[i];
  30. }
  31. }
  32.  
  33. }
  34. }
  35.  
  36. public class Main {
  37. public static void main(String[] args) {
  38. Scanner sc;
  39. System.out.print("Введите кол-во інтервалов: ");
  40. while (true) {
  41. sc = new Scanner(System.in);
  42. if (!sc.hasNextInt()) {
  43. System.out.print("Некорректный тип введенного числа! Повторите попитку: ");
  44. } else {
  45. int n = sc.nextInt();
  46. sc.close();
  47. return;
  48. }
  49. }
  50. }
  51. }
  52.  
  53. public class Calculator extends Thread{
  54.  
  55. int n;
  56. int a = 1;
  57. double b = Math.pow(2, 1 / 2);
  58. double results[];
  59. //Переменные объявленные в методах не сохраняются в объекте!
  60. //Как только закончится работа метода, такая переменная пропадет,
  61. //поэтому объявляем все тут.
  62. public Calculator(int n){
  63. this.n = n;
  64. }
  65. //Если ты создаешь поток переопределяя Thread, ты переопределяешь его метод run,
  66. //с которого начинается выполнение потока. Но ты не можешь добавить ему произвольные параметры!
  67. //Но можно передать индекс через параметры конструктора, что мы и сделали.
  68. //Так же я вставил сюда расчет чего-то там, раз он должен
  69. private void threadCalc(){
  70. results = new double[n];
  71. double h = (b - a) / n;
  72. for (int i = 0; i < n-1; i++)
  73. {
  74. double x = a + i * h;
  75. results[i] = (x + h /2) * h ;
  76. }
  77. }
  78. //В параметрах метода все очень строго (тип_переменной имя, тип_переменной имя) а не та билиберда, что ты написал.
  79. //Раз мы индекс вынесли в тело класса, то я его из параметров убрал
  80. public double getResult(){
  81. int result = 0;
  82. for (int i = 0; i < n-1; i++)
  83. {
  84. result += results[i];
  85. }
  86. return result;
  87. }
  88. //Чтобы итог из тела потока можно было бы получить, я вынес этот кусок кода в отдельный метод.
  89. @Override
  90. public void run() {
  91. threadCalc();
  92. Calculator[] threads = new Calculator[n];
  93. //Мы переопределили класс Thread, поэтому нам нужен именно калькулятор а не оригинал.
  94. for (int i = 0; i < n; i++)
  95. {
  96. threads[i] = new Calculator(i);
  97. threads[i].start();
  98. //возвращаясь к параметрам, это тебе не js или питон, ты не можешь передавать метод как объект,
  99. //Если тебе его надо выполнять в начале потока, то я поставил запуск метода в самом начале метода.
  100. //Как я говорил, в самом матане я не разберался, и не знаю какой индекс передавать, пусть будет номер перебора
  101. }
  102. for (int i = 0; i < n; i++)
  103. {
  104. try {
  105. threads[i].join();
  106. } catch (InterruptedException ex) {
  107. Logger.getLogger(Calculator.class.getName()).log(Level.SEVERE, null, ex);
  108. }
  109. //регистр в Java важен, а этот метод пишется с маленькой буквы
  110. //также, так как он может вернуть ошибку, тут есть обертка try/catch
  111. }
  112. //Вобще этот код вызывает у меня большие сомнения, run вызывается при запуске потока, тебе действительно нужно порождать еще потоки в каждом потоен?
  113. }
Add Comment
Please, Sign In to add comment