现在的位置: 首页 > 综合 > 正文

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

2013年08月04日 ⁄ 综合 ⁄ 共 3763字 ⁄ 字号 评论关闭

实验目的

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

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

抱歉!评论已关闭.