代码之家  ›  专栏  ›  技术社区  ›  csse

我怎样才能找到观察的平均值?

  •  1
  • csse  · 技术社区  · 7 年前

    我真的很难处理这个类,它生成一个随机数并更新观察者的类。我怎样才能找到生成的所有这些随机数的平均值?(observations\u avg)并将其传递给观察员

    A类

    public abstract class A implements Observer {
         public abstract String disp();
         public abstract void update(Observable subject, Object o);
    }
    

    B类

    public class B extends A {
    
        public double limit;
        public B(double limit) {
             this.limit = limit;
        }
        public void update(Observable o, Object arg) {
             if (observations_avg >= limit) {
                  System.out.println(disp());
             }
        }
        public String disp() {  
        // observations_avg = sum of all observation, and divide it by the    quantity of them
             String d = "WARNING avg exceeded limit: " + observations_avg;
             return d;
        }
    }
    

    C类

    public class C extends A {
    
        Avg avg = new Avg(10);
        public void update(Observable subject, Object o) {
            System.out.println(disp());
        }
        public String disp() { 
            String d = "avg is " observations_avg+ ; // i want to display the average of all the random numbers
            return d;
        }
    }
    

    生成随机数并更新观察员类平均值

    public class Avg extends Observable {
    
        private int seed;
        Random random = new Random();
        public Avg(int seed) {
            this.seed = seed;
            random.setSeed(this.seed);
        }
        public double getRandom() {
            double r = random.nextDouble()*10;
            return r;
        }
        public void read() {
            setChanged();
            notifyObservers();
        }
    }
    

    主要

    public class Main {
        public static void main(String[] args) {
    
            Avg avg = new Avg(10);
            // create observers and add them
            B B_obj = new B(8);
            C C_obj = new C();
            avg.addObserver(B_obj);
            avg.addObserver(C_obj);
    
            try {
                while (true) {
                    avg.read();
                    Thread.sleep(1000);
                }
            } catch (InterruptedException e) {
                e.printStackTrace();
            }   
        }
    }
    

    提前谢谢你。

    1 回复  |  直到 7 年前
        1
  •  0
  •   Maarten Folkers    7 年前

    您需要在Avg对象中创建一个类似getAverage()的方法,然后在观察Avg时检索该值:

    public void update(Observable o, Object arg) {
        Avg avg = (Avg) o; 
        double observations_avg = avg.getAverage();
        if (observations_avg >= limit) {
              System.out.println(disp());
         }
    }