JavaRush /Java блог /Архив info.javarush /Кухня(); Задание N7.
terranum
28 уровень
Milan

Кухня(); Задание N7.

Статья из группы Архив info.javarush
Кухня(); Задание N7. - 1 Правила [Одномерные массивы] Дана последовательность действительных чисел a1, a2, ..., an. Заменить все ее члены, большие данного Z, этим числом. Подсчитать количество замен.
Комментарии (8)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
RabenokDmitry Уровень 21
5 февраля 2015
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;
    }

Реализовал на int'ах, правда)
Docktor91 Уровень 40
23 августа 2014
///
Voronblack Уровень 17
22 августа 2014
public static void replaceArrayValue(double z, double...arr)
    {

        int count = 0;
        if (arr.length == 0 )
            throw new IllegalArgumentException("Bad args");
        for(int i = 0; i < arr.length; i++)
        {
            if(arr[i] > z)
            {
                arr[i] = z;
                count++;
            }
        }

        for (Double ar : arr)
        {
            System.out.println(ar);
        }
        System.out.println(count);


    }
zharenkov Уровень 30
22 августа 2014
как насчет параллельного решения?) Собственно идея в чем:
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;
    }