2016-10-29 2 views
-1

Я нашел похожие вопросы, но не то, что хочу.Сплит-матрица в java

Мне нужно разделить матрицу 1024x1024 на 4 части в равных частях, но мне нужно потратить начало и конец каждой части для работы в другом классе с потоками. Я думал об использовании двух циклов, но я понятия не имею, как правильно изменить значение переменных, поскольку оно превышает максимальный.

Код:

private static final int MAX_MATRIX = 1024; 
private static final int NUM_THREADS = 4; 
int start_row = 0, end_row = 0, start_column = 0, end_column = 0; 
for (int i = 0; i < NUM_THREADS/2; i++){ 
end_row = start_row + (MAX_MATRIX/2);  
for (int j = 0; j < (NUM_THREADS/2); j++){ 
    end_column = start_column + (MAX_MATRIX/2); 
    myTask[i] = new TaskAnalyze(start_row, end_row, start_column, end_column, int_radom); 
    myThreads[i] = new Thread(myTask[i],"TASK " + i); 
}  
start_column += MAX_MATRIX/2;  
start_row += MAX_MATRIX/2; 
} 

int_random матрица.

Что должны иметь это:

myTask [0] = новый TaskAnalyze (0, 512, 0, 512, int_radom); (0, 512, 512, 1024, int_radom);

myTask [2] = новый TaskAnalyze (512, 1024, 0, 512, int_radom);

myTask [3] = новый TaskAnalyze (512, 1024, 512, 1024, int_radom);

Любые предложения?

+0

У вас есть ' j' loop, в котором вы не используете 'j'. –

+0

Ум ... Я сказал, потому что это может помочь изменить значения, я должен удалить его? – Kuru

ответ

0

Попробуйте это:

int MAX_MATRIX = 1024; 
int NUM_THREADS = 4; 
int start_row = 0, end_row = 0, start_column = 0, end_column = 0; 
for (int i = 0; i < NUM_THREADS/2; i++){ 
    start_row = i*MAX_MATRIX/2; 
    end_row = start_row + MAX_MATRIX/2; 
    for (int j = 0; j < NUM_THREADS/2; j++){ 
     start_column = j*MAX_MATRIX/2; 
     end_column = start_column + MAX_MATRIX/2; 
     System.out.println(start_row + "," + end_row + "," + start_column + "," + end_column); 
    } 
} 

, который должен дать вам следующий вывод:

0,512,0,512 
0,512,512,1024 
512,1024,0,512 
512,1024,512,1024 

Затем вы можете заменить System.out.println строку с текстом:

myTask[i] = new TaskAnalyze(start_row, end_row, start_column, end_column, int_radom); 
myThreads[i] = new Thread(myTask[i],"TASK " + i); 
+0

Омг, я не ожидал такой помощи. Я попробую, если это сработает с тем, что у меня есть. – Kuru

+0

Большое спасибо! Он решил большинство ошибок, но idk, почему теперь говорю «NullPointerException», когда я запускаю потоки после этого цикла. Это я делаю, ты мне очень помог. Еще раз спасибо. – Kuru