不知道哪里错了??

不知道哪里错了??

package com.imooc.weather;


public class Weather 

{

// 封装温度和湿度的属性

private int temperature;

private int humidity;

// 用于判断是生成还是读取天气信息

private boolean flag = false;


// 无参构造

public Weather() 

{


}


// 带参构造方法

public Weather(int temperature, int humidity) 

{

// super();

this.temperature = temperature;

this.humidity = humidity;

}


// getter和setter方法

public int getTemperature() 

{

return temperature;

}


public void setTemperature(int temperature) 

{

this.temperature = temperature;

}


public int getHumidity() 

{

return humidity;

}


public void setHumidity(int humidity) 

{

this.humidity = humidity;

}


// 生成数据的方法

public synchronized void generate()

{

try 

{

// 如果flag为真,则生成数据方法阻塞

if (flag) 

{

wait();

else 

{

// 执行生成数据的操作

this.setTemperature((int) (Math.random() * 40));

this.setHumidity((int) (Math.random() * 100));

System.out.println("生成天气数据[温度:" + this.getTemperature() + ",湿度:" + this.getHumidity() + "]");

// 已经生成数据将flag设置为true

flag = true;

// 唤醒其他的线程

notifyAll();

}

catch (InterruptedException ex) 

{

ex.printStackTrace();

}

}


// 读取数据的方法

public synchronized void read()

{

try 

{

// 如果flag为真,则读取数据方法阻塞

if (!flag) 

{

wait();

else 

{

System.out.println("读取天气数据[温度:" + this.getTemperature() + ",湿度:" + this.getHumidity() + "]");

// 已经生成数据将flag设置为true

flag = false;

// 唤醒其他的线程

notifyAll();

}

catch (InterruptedException ex) 

{

ex.printStackTrace();

}

}


//重写toString方法

@Override

public String toString() 

{

return "天气信息[温度:" + temperature + ", 湿度:" + humidity + "]";

}


}



package com.imooc.weather;


public class GenerateWeather extends Thread

{

//模拟一个天气

    Weather weather;

    public GenerateWeather(Weather weather)

    {

        this.weather=weather;

    }

    

    //重写run方法

    @Override

    public void run() 

    {

       for(int i=0;i<100;i++)

       {

            weather.generate();

            try 

            {

Thread.sleep(5000);

            catch (InterruptedException e)

            {

e.printStackTrace();

}

    

       }

    }

}



package com.imooc.weather;


public class ReadWeather extends Thread

{

//模拟一个天气

    Weather weather;

    public ReadWeather(Weather weather)

    {

        this.weather=weather;

    }

    

    //重写run方法

    @Override

    public void run() 

    {

         

    for(int i=0;i<100;i++)

    { 

    weather.read();

       try 

       {

Thread.sleep(100);

       catch (InterruptedException e) 

       {

e.printStackTrace();

}

     

        }

    }

}

 

package com.imooc.weathertest;


import com.imooc.weather.GenerateWeather;

import com.imooc.weather.ReadWeather;

import com.imooc.weather.Weather;


public class WeatherTest {


public static void main(String[] args) 

{

        new Thread(new GenerateWeather(new Weather())).start();

        new Thread(new ReadWeather(new Weather())).start();

}


}


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
姜饼 2017-03-30 17:29:23

你好,请问报什么错呢?请将报错信息发上来

  • 提问者 慕仰1951493 #1
    没有报错啊!就是只有一行数据输出 按道理是100行的
    2017-03-30 18:02:18
  • 姜饼 回复 提问者 慕仰1951493 #2
    是只有一行吗?还是过几秒在出一行
    2017-03-30 18:21:24
  • 提问者 慕仰1951493 回复 姜饼 #3
    只生成一行 然后就没了
    2017-03-30 18:22:56
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师