Форум программистов, компьютерный форум, киберфорум
Наши страницы
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
sew960i
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 9
1

Потоки Java SE

02.10.2012, 20:58. Просмотров 765. Ответов 5
Метки нет (Все метки)

Задание: Разработать программу на языке Java как в однопотоковом так и в многопотоковом вариантах. Программа должна позволять ввести с клавиатуры значения матрицы заданного размера, который не превышает Т(20,20). Отрицательные элементы матрицы записать в массив А(400) начиная снизу, а положительные - начиная сверху. Записи в массиве делать без пропусков элементов массива.
---------------------------------------------------------------
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
import java.util.Scanner;
import java.util.Arrays;
public class test {
public static void main(String[] args) {
//////Определяем основные переменные
int matrix,max,min,box,ln,c=0,h=0,u=0;
String str="",delim="",res="",ch, mx, mn;
/////////////////////////////////////
System.out.println("Введите размер матрицы T:");
Scanner in = new Scanner(System.in);
matrix = in.nextInt();
if(matrix<=20){  
int[][] T = new int[matrix][matrix]; 
int all=(matrix*matrix);
h=(all-1);
int[] A = new int[all];
int[] B = new int[all];    
System.out.println("Размер установлен в: "+matrix+"x"+matrix);
System.out.println("Колличество элементов матрицы: "+all);
System.out.println("");
System.out.println("-------------------------------------------------------------------------------");
/////////////////////
for(int i=0;i<matrix;i++){
for(int j=0;j<matrix;j++){
System.out.println("Введите "+i+","+j+" ("+c+") "+" элемент матрицы");
T[i][j] = in.nextInt(); 
B[c]=T[i][j];
if(T[i][j]>=0){A[u] = T[i][j]; u++;}else{A[h] = T[i][j]; h--;}
c++;
}}
///
Arrays.sort(B);
mn = Integer.toString(B[0]);
min=mn.length();
mx = Integer.toString(B[all-1]);
max=mx.length();
if(max>=min){box=max;}else{box=min;}
int l=((box*matrix)+(matrix+1));
for(int k=0;k<l;k++){delim+="-";}
///
System.out.println("-------------------------------------------------------------------------------");
System.out.println("");
System.out.println("Ваша матрица T:");
System.out.println(delim);
/////////////////////
for(int i=0;i<matrix;i++){
str+="|";
for(int j=0;j<matrix;j++){   
ch=Integer.toString(T[i][j]);
ln=ch.length();
if(ln<box){int razn=(box-ln); for(int g=0;g<razn;g++){str+=" ";}}
str+=Integer.toString(T[i][j]);
str+="|";}
System.out.println(str);
System.out.println(delim);
str="";}
/////////////////////
System.out.println("");
System.out.println("");
System.out.println("Ваш массив A:");
System.out.println("верх[+] ->         <- [-]низ");
for(int n=0;n<all;n++){res+=Integer.toString(A[n]); if(n<(all-1)){res+=",";}}
System.out.println(res);
/////////////////////
System.out.println("");
System.out.println("-------------------------------------------------------------------------------");
}else{System.out.println("Размер матрицы T должен быть не более, чем 20x20");}
}}
----------------------------------------------------
Я смог сделать задание только в однопотоковом виде (мой код выше)... Помогите эту программу переписать в многопотоковый вариант...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.10.2012, 20:58
Ответы с готовыми решениями:

Потоки в Java
Всем привет. Помогите решить пару задачек на яве с потоками. 1. Используя...

Потоки в java
Дали лабу на синхронизацию потоков. Стек. Один поток пополняет, другой удаляет...

Потоки в Java
Здравствуйте ребята! помогите пожалуйста разобраться с потоками ... как...

Java 2 потоки
Дополнительно к копированию в терминал вывести количество символов между...

Потоки Java
Доброго времени суток. проблема в следующем: Имеется один основной поток,...

5
tolstyy
0 / 0 / 2
Регистрация: 30.09.2012
Сообщений: 21
02.10.2012, 21:32 2
Что то непонятно зачем здесь нужен второй поток.
0
sew960i
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 9
02.10.2012, 22:42  [ТС] 3
ну и мне не понятно зачем здесь 2й поток...
однако в задании требуется сделать многопоточный вариант...
помогите пожалуйста решить его...
0
Andrey96
1 / 1 / 0
Регистрация: 23.12.2010
Сообщений: 105
02.10.2012, 23:50 4
sew960i, мне кажеться вам в задании практически все описано: 1-ый поток положительные значения кот. не превышают Т(20;20) и 2-ой поток на отрицательные числа... Ну я не особо помню основные принципы многопоточности... Т.Е. паралленльно записывать значения в массивы... Как-то так по-нубски
0
mutagen
2565 / 2238 / 257
Регистрация: 14.09.2011
Сообщений: 5,185
Записей в блоге: 18
03.10.2012, 01:40 5
Вот Вам программа точно по Вашему условию исключая ввод данных:

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
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
import java.util.Arrays;
import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.atomic.AtomicInteger;
 
public class SyncArrayFill extends Thread {
    private volatile int[] arr;
    private AtomicInteger up;
    private AtomicInteger down;
    private int[][] matrix;
    private CountDownLatch latch;
    private boolean minus;
 
    public SyncArrayFill(int[] arr, AtomicInteger up, AtomicInteger down, int[][] matrix, CountDownLatch latch,
            boolean minus) {
        super();
        this.arr = arr;
        this.up = up;
        this.down = down;
        this.matrix = matrix;
        this.latch = latch;
        this.minus = minus;
    }
 
    boolean isMinus(int i) {
        return i < 0;
    }
 
    void writeValue(int idx, int val) {
        arr[idx] = val;
    }
 
    void write(int val) {
            if (minus) {
                if (val < 0) {
                    writeValue(down.getAndDecrement(), val);
                    latch.countDown();
                }
            }
            if (!minus) {
                if (val >= 0) {
                    writeValue(up.getAndIncrement(), val);
                    latch.countDown();
                }
            }
    }
 
    @Override
    public void run() {
        for (int i = 0; i < matrix.length; i++) {
            for (int j = 0; j < matrix[i].length; j++) {
                write(matrix[i][j]);
            }
        }
    }
 
    static class Test {
        public static void main(String[] args) throws InterruptedException {
            Random rnd = new Random();
            int size = 2;
 
            int[] a = new int[size * size];
            int[][] matrix = new int[size][size];
            for (int i = 0; i < matrix.length; i++) {
                for (int j = 0; j < matrix[i].length; j++) {
                    matrix[i][j] = 50 - rnd.nextInt(100);
                }
            }
            System.out.println("Исходный массив " + size + "х" + size);
            for (int i = 0; i < matrix.length; i++) {
                System.out.println(Arrays.toString(matrix[i]));
            }
 
            AtomicInteger up = new AtomicInteger(0);
            AtomicInteger down = new AtomicInteger(a.length - 1);
            CountDownLatch latch = new CountDownLatch(a.length - 1);
            SyncArrayFill s1 = new SyncArrayFill(a, up, down, matrix, latch, false);
            SyncArrayFill s2 = new SyncArrayFill(a, up, down, matrix, latch, true);
            s1.start();
            s2.start();
            latch.await();
 
            System.out.println("==============================================================");
            System.out.println("Результат раскладки");
            for (int i = 0; i < a.length; i++) {
                System.out.println("i=" + i + " a=" + a[i]);
            }
 
        }
    }
}
это программа жёстко под 2 потока
1
sew960i
1 / 1 / 0
Регистрация: 11.12.2011
Сообщений: 9
04.10.2012, 22:25  [ТС] 6
Спасибо!
0
04.10.2012, 22:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.10.2012, 22:25

Потоки в Java, вывод
добрый вечер. Помогите сделать задание с потоками, в котором нужно ввести...

Потоки, Java. Семафор
Доброго времени суток форумчане, недавно в обучении столкнулся с потоками,...

Потоки в Java апплете
Доброго времени суток! Есть задача. Разработать апплет, выводящий...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru