Java构造方法——乌鸦喝水场景描述

上次博客中学习了类与对象,这次便用其来描述一个乌鸦喝水的案例吧!
在这里插入图片描述

1、场景简介:

一只乌鸦口渴了,到处找水喝。乌鸦看见一个瓶子,瓶子里有水。可是瓶子里水不多,瓶口又小,乌鸦喝不着水,怎么办呢?
乌鸦看见旁边有许多小石子,想出办法来了。
乌鸦把小石子一个一个地放进瓶子里。瓶子里的水渐渐升高,乌鸦就喝着水了

2、对象分析

  1. 将故事中的场景、对象简化,抽象出实体。
    主要有乌鸦、水瓶、石头。各自属性以及方法如下:
对象属性方法
乌鸦名字、(被叼的)石头、(盛水的)水瓶叼石头
水瓶编号、瓶高、底面积、水位高……
石头编号、数量、大小……
  1. 不同对象之间的关系以及方法步骤如下:

在这里插入图片描述

3、 对象创建

本次对石头、水瓶、乌鸦等的属性需要进行一个预设,这样便不需要在主方法中对石头、水瓶、乌鸦等类的各个具体对象的属性再依次赋值,而是在新建类的对象时直接给出其具体参数,即在创建对象的时候,给对象进行初始化的操作。

下面介绍构造方法的使用。

3.1 构造方法

需要用到的基本语法是构造方法。其基本格式如下:

创建对象的格式:
类名 对象名 = new 类名(构造方法);

创建构造方法的格式:
public 类名(参数类型 参数名, ……) {
需要执行的内容 }

注意:

  1. 系统会给没有构造方法的类,自动提供一个无参的构造方法
  2. 变量的作用域在自己所属的代码块中,局部变量和属性同名,则局部变量优先显示。
  3. this指的是当前类的自己对象

3.2 类的创建

根据上述分析,给出石头、水瓶、乌鸦等类的 创建。主要代码如下:

  1. 石头类的创建
public class stone {
	//属性
	public String name;
	public double size;
	public double number;
	
	//方法
	public stone(String name,double size,double number){
		this.name = name;
		this.size = size;
		this.number = number;
	}
}
  1. 水瓶类的创建
public class bottle {
	//属性
	public String name;
	public double waterlevel;
	public double basearea;
	public double height;

	//构造方法
	public bottle(String name,double waterlevel,double height,double basearea ){
		this.name = name;
		this.height = height;
		this.waterlevel = waterlevel;
		this.basearea = basearea;
	} 
}
  1. 乌鸦类的创建
public class crow {
	//属性
	public String name;
	public String pickstone;
	public String waterbottle;
	
	//构造方法
	public crow(String name,String pickstone,String waterbottle){
		this.name = name;
		this.pickstone = pickstone;
		this.waterbottle = waterbottle;
			}

	//方法:叼石头
	public void pickupstones(stone astone, bottle abottle){
		int i;
		//判断水位是否达标?
		for(i = 1;i < astone.number; i++){
			
				//乌鸦叼石头,石头数量减少,水瓶水位升高
				astone.number --;
				abottle.waterlevel += (astone.size/abottle.basearea);
				
				//控制小数点位数
				DecimalFormat df = new DecimalFormat("0.00");
				String astonesize = df.format(astone.size); 
				String waterlevel = df.format(abottle.waterlevel); 
				
				//输出
				System.out.println();
				System.out.println("这回石头大小是"+astonesize);
				System.out.println("乌鸦叼了"+i+"颗石头,现在石头数量还有"+astone.number+"颗,水位是"+waterlevel);
				
		}
	}
}

4、主方法调用以及结果

编辑主方法,创建对象,赋值,并求解如下:

public static void main(String[] args){
		//创建乌鸦、石头、水瓶等对象;
		double r = Math.random();
		stone thestone = new stone("thestone",r,20);
		bottle abottle = new bottle("astone",1,10,6);
		crow acrow = new crow("acrow","astone","abottle");
		
		
		//乌鸦叼石头来喝水
		if(abottle.waterlevel <= (abottle.height-2)){
			acrow.pickupstones(thestone,abottle);
		}
	}

最终结果如下:
在这里插入图片描述可怜的乌鸦没有喝到水。。。

5、 总结

本次所采用的石头、水瓶等数值都是随机设置,并不强具有代表标性。另外,还可以试着把场景再复杂化,增大训练难度。游戏的搭建便是一个个场景的切换。
本篇仅为关于类与对象中“构造方法”的学习总结,欢迎小伙伴们的批评指正和热情点赞!!!
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值