Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.05.2019
Сообщений: 110

Поток случайных чисел и поток AVG

04.10.2021, 18:44. Показов 619. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Всем привет. Почему у меня выскакивает NullPointerException? Не, я понимаю, что прога думает, что массив (My_Array) типа пустой, но как это исправить?
Нужно, чтобы один поток заполнял массив случайными числами, а второй — находил среднеарифметическое
значение в массиве.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.company;
 
import java.util.OptionalDouble;
import java.util.stream.IntStream;
 
import java.util.Random;
 
public class Main
{
    static int My_Array[];
    static class My_Thread_1 extends Thread
    {
        My_Thread_1(String name)
        {
            super(name);
        }
 
        public void run()
        {
            System.out.printf(Thread.currentThread().getName() + " started!\n");
            try
            {
                Random random = new Random(); My_Array = new int[10];
                for (int i = 0; i < My_Array.length; i++)
                { My_Array[i] = random.nextInt(); }
                for (int i = 0; i < My_Array.length; i++)
                { System.out.print(My_Array[i] + " "); } System.out.print("\n");
 
                Thread.sleep(500);
            }
            catch(InterruptedException e)
            { System.out.println("Thread has been interrupted"); }
            System.out.printf(Thread.currentThread().getName() + " fiished!\n");
        }
    }
 
    static class My_Thread_2 extends Thread
    {
        My_Thread_2(String name)
        {
            super(name);
        }
 
        public void run()
        {
            System.out.printf(Thread.currentThread().getName() + " started!\n");
            try
            {
                double average = 0;
                if (My_Array.length > 0)
                { double sum = 0;
                for (int j = 0; j < My_Array.length; j++) { sum += My_Array[j]; }
                average = sum / My_Array.length; }
                System.out.println(average);
                /*OptionalDouble count = IntStream.of(My_Array).average();
                System.out.println(count);*/
                Thread.sleep(500);
            }
            catch(InterruptedException e)
            { System.out.println("Thread has been interrupted"); }
            System.out.printf(Thread.currentThread().getName() + " fiished!\n");
        }
    }
 
    public static void main(String[] args)
    {
        new My_Thread_1("My_Thread_1").start();
        new My_Thread_2("My_Thread_2").start();
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.10.2021, 18:44
Ответы с готовыми решениями:

Создал поток. В нем выделил буффер. Поток выполнился, но из за буфера ругнулся.
В функции треда создал буфер char tbuf;но после того как тред выполнился выскочила ошибка Run-Time Check Failure #2 - Stack around the...

Поток освобождается, но переменная, которой был присвоен этот поток, не очищается
Мне интересно, вот поток отработал, стоит FreeOnTerminate:=True; Поток освобождается, но переменной которой было присвоен этот поток, не...

Очень надо. Создать поток который выполняет арифметический поток
k=a max E A; A-&gt;L(альфа) Ai } i=1,15 Напишите пример...

2
3582 / 2182 / 571
Регистрация: 02.09.2015
Сообщений: 5,510
04.10.2021, 21:24
Цитата Сообщение от PavelIks Посмотреть сообщение
Почему у меня выскакивает NullPointerException? Не, я понимаю, что прога думает, что массив (My_Array) типа пустой, но как это исправить?
Воспользуйся синхронизацией либо используй Concurrent коллекции.
0
0 / 0 / 0
Регистрация: 09.05.2019
Сообщений: 110
04.10.2021, 21:39  [ТС]
Я так вот сделал:
Работает так.

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
package com.company;
 
import java.util.Arrays;
import java.util.stream.IntStream;
 
public class Main
{
    static int My_Array[];
 
    static class My_Array_Thread extends Thread
    {
        public void run()
        {
            try
            {
                My_Array = new int[20];
                for (int i = 0; i < My_Array.length; i++) { My_Array[i] = (int)(Math.random()*11); }
                for (int i = 0; i < My_Array.length; i++) { System.out.print(My_Array[i] + " "); } System.out.print("— массив (диапазон — 0-10)" + "\n");
 
                Thread.sleep(500);
            }
            catch(InterruptedException e)
            {
                System.out.println(e);
            }
        }
    }
 
    static class My_Average_Thread extends Thread
    {
        public void run()
        {
            try
            {
                double avg = Arrays.stream(My_Array).average().orElse(Double.NaN);
                System.out.println(avg + " — среднее арифметическое массива");
 
                Thread.sleep(500);
            }
            catch(InterruptedException e)
            {
                System.out.println(e);
            }
        }
    }
 
    static class My_Sum_Thread extends Thread
    {
        public void run()
        {
            try
            {
                int count = IntStream.of(My_Array).sum();
                System.out.println(count + " — сумма массива");
 
                Thread.sleep(500);
            }
            catch(InterruptedException e)
            {
                System.out.println(e);
            }
        }
    }
 
    public static void main(String[] args) throws InterruptedException
    {
        new My_Array_Thread().start();
        Thread.sleep(1000);
        new My_Average_Thread().start();
        new My_Sum_Thread().start();
    }
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
04.10.2021, 21:39
Помогаю со студенческими работами здесь

Ошибка-Текущий поток должен быть задан как поток однопоточного контейнера STA
Значит модуль в нем классы.Я создаю свое гуи.Так вот при вызове процедуры котрая копирует текст(в буфер) вылезает эта ошибка я уже с ней...

Разработать программу, в которой основной поток, принимает поток ввода и контролирует созданные потоки.
что-то не-то с кодом. 2 дня ломаю голову :( //#define _REENTRANT #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; #include...

Написать программу, которая создает новый поток. Поток должен генерировать ряд Фибионаччи из 10-ти членов
Написать программу, которая создает новый поток. Поток должен генерировать ряд Фибионаччи из 10-ти членов, используя итерационный алгоритм.

OpenFileDialog и потоки: Текущий поток должен быть задан как поток однопоточного контейнера (STA)
Со стартового окна запускаю формы вот так: new Thread(() =&gt; { ...

Описать два потока: первый поток записывает данные в буферную память, а второй поток – считывает
Как написать на языке С программу, которая содержит две функции, описывающие два потока? Первый поток записывает некоторые данные в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru