现有class A 随机产生-100到100之内的整数.
class B 是一个计数器,当A  产生的是正数的时候+1,当A为负数的时候-1.
请问,如何在class B 中接受class A产生的整数? 

解决方案 »

  1.   

    class A {
    }class B {
       A a;
    }
      

  2.   


    问题补充:
     
    package A;import java.util.*;class B  {    public static void main(String[] args) {        A sim_a=new A();        int count = 0;        int b;        sim_a.start();             // 启动线程A        for(int j=0;j<100;j++){    //运行100次            b = sim_a.getA();      //取得线程A产生的随机值            if(b >= 0)                count++;            else count--;            System.out.print(b+"\t");            System.out.println(count);        }    }}class A extends Thread{    int a ,i;    public void run(){            Random rand = new Random();        a=rand.nextInt()%100;    // 产生-100到100之内的随机数        yield();    }    public void setA(int a){        this.a = a;    }    public  int getA(){        return this.a;    }}为什么不能正确得到 计算器的记数?
      

  3.   

    主线程start子线程之后,主线程继续执行,当执行到 b   =   sim_a.getA();时,因为子线程虽然start,但他只是加入了cpu竞争队列,还没有得到执行,而且sim_a中a的初值为0,所以这里b第一次得到的很可能是0
    一段时间之后,子线程得到cpu时间片,产生随机数并赋给a,这时主线程就得到了产生的随机数了
      

  4.   

            public   void   run(){                         Random   rand   =   new   Random();                 a=rand.nextInt()%100;         //   产生-100到100之内的随机数                 yield(); //这里不要yield()就可以得到计数器的值了,只不过可能不是你期望的值        } 
      

  5.   

    你的sim_a只运行了一次,然后就挂起了还怎么产生随机数啊
      

  6.   


    class A
    {
        int count=0;
        public static void main(String[] args)
        {
             A a=new A();
             B b=new B(a);
             Thread t=new Thread(b);
             b.start();
             b.join();
             System.out.println("a.count="+a.count);
        }
    }
    class B implements Runnable
    {
        A a;
        public B(A a)
        {
           this.a=a;
        }
        Random rd=new Random();
        public void run()
        {
           for(int i=0;i<100;i++)//假设运行100次
           {
               int rand=rd.nextInt()%100;
               if(rand<0)
                  a.count--;
               else if(rand>0)
                  a.count++;
           }
        }
    }
      

  7.   

    修正下t.start();
    t.join();
      

  8.   

    谢谢6楼的回答
    但是在netbeans下调试时
    把 class B implements Runnable{
    改成  class B extends Thread{并且要添加 java.util.Random 包
      

  9.   

    其实lz的程序5楼的tuoxie007 说的很对,他只是调用了一次sim_a,只要B中多run几次就可以了,
    直接调用run()方法,不会创建新的调用栈,也就不会有创建过多的线程之忧                for(int   j=0;j <100;j++){         //运行100次                         b   =   sim_a.getA();             //取得线程A产生的随机值                         if(b   >=   0)                                 count++;                         else   count--;                         System.out.print(b+ "\t ");                         System.out.println(count); 
                            sim_a.run();//在此加上一个run                }