Правила[Одномерные массивы]Дана последовательность действительных чисел a1, a2, ..., an. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество замен.
0
Комментарии (8)
популярные
новые
старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
public static int changeValueMoreThenKey(int key, int... array) {
int countChange = 0;
if (array.length == 0)
throw new IllegalArgumentException("Последовательность нулевой длинны");
for (int value : array) {
if (value < key) {
value = key;
countChange++;
}
}
return countChange;
}
А почему в for each, ar приходит как объект Double а не примитив? Сам массив я бы выводил на экране в main-e, как я понял это для проверки, можно выводить через:
System.out.println(Arrays.toString(arr));
Варарг по уму, имя метода не придраться, все ровно и аккуратно, радует глаз. Так держать!
как насчет параллельного решения?) Собственно идея в чем:
1. Задаем количество нитей, которые будут менять массив.
2. Выделяем стандартный кусок массива, который будем обрабатывать и остаток, который мог бы остаться необработанным, т.к. размер массива может быть некратен числу нитей. Этот остаток отдадим нулевой нити.
3. Далее в цикле запускаем нити, который будут менять свои куски.
4. Ну и смотрим кол-во замен (статическая переменная count) и сам получившийся массив.
класс Solution
public class Solution {
public static int count=0;
public static int numberOfThreads=6;
public static void main(String[] args) throws InterruptedException {
double[] arr=new double[100];
Arrays.fill(arr,6.0); // заполняем массив
double z = 5;
//выделяем каждой нити кусок и остаток, который отдадим нулевой нити
int step = arr.length/numberOfThreads;
int additionalElements = arr.length%numberOfThreads;
//нулевой нити отдатся обычный кусок + остаток
int firstIndex=0;
int lastIndex=step+additionalElements;
for (int i=0;i<numberOfThreads;i++){
new ReplaceThread(arr,firstIndex,lastIndex,z).run();
firstIndex=lastIndex; //далее каждой последующей нити будет отдаваться стандарный кусок массива
lastIndex+=step;
}
Thread.sleep(500);
System.out.println(count);
System.out.println(Arrays.toString(arr));
}
}
класс ReplaceThread
public class ReplaceThread extends Thread {
private int firstIndex;
private int lastIndex;
private double z;
private double[] arr;
public ReplaceThread(double[] arr,int firstIndex,int lastIndex,double z){
this.arr=arr;
this.firstIndex=firstIndex;
this.lastIndex=lastIndex;
this.z=z;
}
Круто! Слушай прикольно выходит, погоди так а что будет если массив дадут меньше 6?
Без пробелов тяжеловато читается, а так отличный пример для подражания. Тема интересная, надо развивать, лично мне параллельное программирование дается с трудом, парой даже не вспоминаю о нем. А надо бы! :)
Реализовал на int'ах, правда)
Варарг по уму, имя метода не придраться, все ровно и аккуратно, радует глаз. Так держать!
1. Задаем количество нитей, которые будут менять массив.
2. Выделяем стандартный кусок массива, который будем обрабатывать и остаток, который мог бы остаться необработанным, т.к. размер массива может быть некратен числу нитей. Этот остаток отдадим нулевой нити.
3. Далее в цикле запускаем нити, который будут менять свои куски.
4. Ну и смотрим кол-во замен (статическая переменная count) и сам получившийся массив.
класс Solution
класс ReplaceThread
Без пробелов тяжеловато читается, а так отличный пример для подражания. Тема интересная, надо развивать, лично мне параллельное программирование дается с трудом, парой даже не вспоминаю о нем. А надо бы! :)