回顾大学--大一JAVA实验--实验五 类的实例化与方法调用

本文介绍了两个Java程序设计实验:一是实现日期类MyDate,包括日期的增减、日期差计算等功能;二是彩票中奖模拟程序,涉及随机数生成、成绩统计等。

实验目的

1.掌握定义类、创建对象、使用类与对象。

2.掌握类及成员的修饰符的使用。

3.掌握构造函数的使用。

4.掌握如何定义方法和调用方法。

5.掌握形式参数与实际参数的结合过程。

实验内容

1.     编写一个Application程序MyDate.java,建立日期类,接受用户输入的年、月、日,完成日期增加若干天得到新的日期,日期推前若干天得到新的日期,日期与日期间相差多少天的计算。

2.     编写一个彩票中奖模拟程序,实现下述功能:创建六个筛子,每个筛子可以定制有多少个面(一般6-30);投掷六个筛子,得出六个开奖数值;模拟若干参与者,进行赌采,根据开奖数值,给出猜对的成绩。

特别提示

1.     自定义类及使用的步骤:

a)     首先,我们生成一个文件,文件名与类名相同如第一题,文件名为MyDate.java,那么类名也必须是MyDate,在类定义中定义其变量及其方法

b)     然后,在main方法中(这个方法我们可以写在上面的文件中,也可以重新生成一个文件,注意新生成的文件类名与文件名同样必须相同)我们生成MyDate类的对象,分两步:

                   i.             MyDate  date;//创建存储(MyDate对象)地址的变量

               ii.             date = new MyDate();  //为MyDate对象分配存储空间,并将其地址赋给date

c)     生成了对象以后,就可以利用date对象来调用MyDate类定义中的方法了,例如date.dayOfMonth(3);

下面的例子只是简单的说明其步骤,方法只有一个,而且方法中还没有任何代码。

publicclass MyDate {
public void dayOfMonth(int month){
       //添加代码
    }
    public static void main(String[] args){
       // TODO Auto-generated method stub
       MyDate date;
       date = new MyDate();
       date.dayOfMonth(3);
           }
}

2.      静态方法可以通过类名而不是通过对象来调用,所以若要在静态方法定义中调用非静态方法,必须先创建一个对象,并通过该对象来调用非静态方法。例如main方法是一个特殊的静态方法,不能直接调用非静态方法。

3.      闰年的计算方法:公元纪年的年数可以被4整除而不能被100整除即为闰年或者能被400整除的也为闰年。如2000年是闰年,而1900年不是。


—————————————————————————————————————————————————————————————————————————————

下面是我的代码 点此下载MyDate类     点此下载彩票中奖模拟程序

—————————————————————————————————————————————————————————————————————————————

1,首先是第一个MyDate类:

代码很长,我上传了,可以在这里下载

类的结构如下图:


MyDate类有三个私有变量:年-月-日

重要函数说明:

dayOfMonth(int m):返回m月总共有多少天。

	public int dayOfMonth(int month) {
		switch (month) {
		case 1:
		case 3:
		case 5:
		case 7:
		case 8:
		case 10:
		case 12:
			return 31;
		case 4:
		case 6:
		case 9:
		case 11:
			return 30;
		case 2:
			if (year % 4 == 0 && year % 100 != 0)
				return 29;
			else
				return 28;
		}
		System.out.println("error month!");
		return -1;
	}


daysOfDate(MyDate date): 返回date距离1年1月1日总共多少天。

	public int daysOfDate(MyDate date)
	{
		int y=date.getYear();
		int m=date.getMonth();
		int d=date.getDay();
		if (y < 1)
			System.out.println("error year!");
		else if (m < 1 || m > 12)
			System.out.println("error month!");
		else if (d < 1 || d > dayOfMonth(m))
			System.out.println("error day!");
		else {
			int difdays=365*(y-1)+((y-1)/4-(y-1)/100+(y-1)/400);
			for(int i=1;i<m;i++)
				difdays+=dayOfMonth(i);
			difdays+=d;
			return difdays;
		}
		return -1;
	}


difOfDate(MyDate date): 计算本日期与date的相差天数(思路是利用各自距离元年元月元日的天数,然后求差)

	public int difOfDate(MyDate date)
	{
		int days1=daysOfDate(this);
		int days2=daysOfDate(date);
		return (days1>days2)? days1-days2:days2-days1;
	}


incDay(int d):将本日期类增加d天。

	public void incDay(int d)
	{
		if(day+d<=dayOfMonth(month))
			day+=d;
		else{
			d-=(dayOfMonth(month)-day)+1;
			day=1;
			if(month+1<=12)
				month++;
			else
			{
				year++;
				month=1;
			}
			incDay(d);
		}
	}


decDay(int d):将本日期类减少d天。

	public void decDay(int d)
	{
		if(day-d>0)
			day-=d;
		else{
			d-=day;
			if(month-1>0)
				month--;
			else
			{
				year--;
				month=12;
			}
			day=dayOfMonth(month);
			decDay(d);
		}
	}


最后利用shiyan5中的main方法实例化MyDate类,调用相应方法,完成实验要求。

这里只完成了第一个实验要求,第二个实验要求下次在这里更新。


第二个实验:

1.     编写一个彩票中奖模拟程序,实现下述功能:创建六个筛子,每个筛子可以定制有多少个面(一般6-30);投掷六个筛子,得出六个开奖数值;模拟若干参与者,进行赌采,根据开奖数值,给出猜对的成绩。

—————————————————————————————————————————————————————————————————————————————

下面是我的代码

—————————————————————————————————————————————————————————————————————————————



分析:看懂实验要求也是一种考验啊,我现在看就看的不是很明白需求内容,不过后来你就知道还有更加不清晰的需求,这个真的是特别的详细的啦。等以后给客户做项目的时候,需求分析是非常重要也是艰难的一个部分,要尽量去理解,然后沟通,最后再思考怎么实现。


我根据我自己的理解,是这样实现我的代码的:

首先创建一个筛子类,一个参与者类。然后总的shiyan5这个类中的main方法实例化6个筛子(这个是强制的),和3个参与者(3个是我自己定义的)

每个筛子可以定制有多少面,我就询问每个筛子的面数,让用户输入,然后参与者猜,最后根据结果,才对一个加1分,最初是0分。


下面是我的代码解析,还是可以下载,下载我的彩票中奖模拟程序shiyan5_.java


还是上我的类图:



首先是ShaiZi类:

class ShaiZi
{
	private int mian;
	public ShaiZi(int m)
	{
		mian=m;
	}
	public int GetNum()
	{
		return (int) (100*Math.random()%mian+1);
	}
}

然后是玩家Player类:

class Player
{
	int[] guess;
	int score;
	public Player(int mian[])
	{
		score=0;
		guess=new int[6];
		for(int i=0;i<6;i++)
		{
			guess[i]=(int) (100*Math.random()%mian[i]+1);
		}
	}
	public String toString()
	{
		String str=new String("");
		for(int i=0;i<6;i++)
		{
			str+=guess[i]+" ";
		}
		return str;
	}
}


这里用到了Math.random()方法,后来测试才记起来这个方法返回的随机数只是0-1的,所以我随意乘了100,然后模筛子的面数。


main方法虽然复杂,但是很简单,这个程序比上一个日期的逻辑简单点。总的说完成这两个在大一时候应该能有很大的成就感吧。

现在看看也不是很轻松就能写完,看来水平还是不行啊!


1.编写MyDate.java 2.该有如下构造方法 2.1 无参数构造方法public MyDate(),以当前的系统时间构造MyDate对象 2.2 public MyDate(int year, int month, int day), 以指定的年月日构造MyDate对象 3.该有如下属性 3.1 private int year ;//年 3.2 private int month; //月 3.3 private int day; //日 4.该有如下方法 4.1 public String after(int day); //返回当前对象代表的日期之后day天的日期,比如当前对象是2008-8-8,调用after(5)以后,应该返回2008-8-13,格式可自定义 4.2 public String before(int day); //返回当前对象代表的日期之前day天的日期,比如当前对象是2008-8-8,调用before(5)以后,应该返回2008-8-3,格式可自定义 4.3 public void setYear(int year); //设置年为指定值year 4.4 public void setMonth(int month); //设置月为指定值month 4.5 public void setDay(int day); //设置日为指定值day 4.6 public int getYear(); //返回当前对象的年 4.7 public int getMonth(); //返回当前对象的月 4.8 public int getDay(); //返回当前对象的日 4.9 public void set (int year, int month, int day); //设置年、月、日为指定的值year、month、day 4.10 public String toString();//以字符串形式返回当前对象的年月日,例如2008年08月08日,格式可自定义 4.11 public boolean equals(MyDate mydate);//当前对象另一个对象比较,如果两个对象的年月日均相等,则返回true,反之返回false 5.编写TestMyDate.java,在main方法中对MyDate的各个方法进行测试 6.按照编程规范为MyDate.java编写规范的代码 7.按照java doc API的要求,对代码编写规范的注释,然后利用javadoc.exe命令生成MyDate.java的API doc 8.撰写上机报告
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值