Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2015, 15:51   #1
Алисочка
 
Регистрация: 06.12.2013
Сообщений: 5
По умолчанию Stream в JAVA

всем привет
по заданию необходимо написать программу, лениво вычисляющую дисперсию плавающего окна из бесконечной последовательности чисел.
Идея такова: пользователь вводит размер окошка N, программа берёт это значение и генерирует N рандомных чисел. Далее эти числа засовываются в стримовскую функцию, лениво вычисляющую дисперсию, и выдающую результат.
Была написана функция, генерирующая рандомные числа. далее эта функция считала стрим и дисперсию. Однако, необходимо её декомпозировать. По требованию препода - необходимо, чтобы одна функция генерировала числа в заданном окошке, а другая функция принимала на вход количество величин, а возвращала стрим (сумму, т.е. саму дисперсию)

Код:
package laba1;

import java.util.Random;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.stream.IntStream;
import java.util.stream.*;
import java.util.*;
import java.util.stream.Collectors;

public class Laba1 {
 
    private static final Random RANDOM = new Random();
//генерация рандомных чисел   
    private static int nextInt(int minInclusive, int maxExclusive) {
        return minInclusive + RANDOM.nextInt(maxExclusive - minInclusive);
    }
//сама функция
//на вход - размер окна, на выходе - число
    private static Stream<Double> dis(int w, Stream<Double> n)
    {
//генерируем
        Stream<Double> randomDoubles = Stream.generate(Math::random);
    
        randomDoubles.limit(w)
                     .forEach(System.out::println);
//что бесконечно генерировалось
       n=Stream.generate(new AtomicInteger(1)::incrementAndGet)
                .map(p->IntStream.range(1, w+1)
                                .asDoubleStream() // к даблам
//подсчёт дисперсии
                                .map(i -> (nextInt(1, 100) + nextInt(1, 100)) * (nextInt(1, 100) + nextInt(1, 100)) / (w + 1)) // пересчёт
                                .peek(System.out::println) // это просто вывод промежуточных результатов на экран
                                .sum())
                .peek(System.out::println)
                .limit(5);
         System.out.println(n.collect(Collectors.toList())); 
        return null;
    }
   
        public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in); 
        System.out.print("Введите замеры окна: ");
        int w=sc.nextInt();
        Stream<Double> n=null;
        dis(w,n);
}
    
    /**
     * @param args the command line arguments
     */
}

задание с универа, уже третий вариант делаю, постоянно препод даёт всякие поправки (
Алисочка вне форума Ответить с цитированием
Старый 03.05.2015, 16:07   #2
Алисочка
 
Регистрация: 06.12.2013
Сообщений: 5
По умолчанию

вот декомпозировала, однако ничего не работает(
что делать?
Код:
public class Laba1 {
 
    private static final Random RANDOM = new Random();
   //генерация рандомных чисел
    private static int nextInt(int minInclusive, int maxExclusive) {
        return minInclusive + RANDOM.nextInt(maxExclusive - minInclusive);
    }
    private static Stream<Double> randok(int w)
    {
         Stream<Double> randomDoubles = Stream.generate(Math::random);    
        randomDoubles.limit(w);
        return randomDoubles;
    }
    
    private static Stream<Double> doHust (int w, Stream<Double> randomDoubles)
    {
        randomDoubles.map(i -> ((i + i) * (i + i) / (w + 1))); 
        //сохранение стрима
        return randomDoubles;
    }

    private static Stream<Double> dis(int w, Stream<Double> randomDoubles)
    {
      Stream<Stream<Double>>  n=Stream.generate(new AtomicInteger(1)::incrementAndGet)
                .map(p->randomDoubles)
                .limit(5);
         System.out.println(n.collect(Collectors.toList())); 
        return null;
    }
    // но так без вывода, из-за отсутствия терминирующих функций. а они - это collect 
        public static void main(String[] args) {
        
        Scanner sc = new Scanner(System.in); 
        System.out.print("Введите замеры окна: ");
        int w=sc.nextInt();
        Stream<Double> n=null;
        dis(w,doHust(w,randok(w)));
}
Алисочка вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Stream MorgunZ C# (си шарп) 5 10.04.2015 22:12
stream в C++ artush1984 Общие вопросы C/C++ 6 30.01.2013 20:19
работа с stream Wi1D Общие вопросы C/C++ 4 29.12.2009 21:13
Variant to Stream & Variant from Stream Oreol Общие вопросы Delphi 1 24.03.2009 13:14
Socket vs Stream JoanM Работа с сетью в Delphi 1 01.04.2008 10:10