java类的实例化实验报告_回顾大学--大一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类:

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

类的结构如下图:

e8dfe8999f31640e0b1ca351adb9ac8a.png

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

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

还是上我的类图:

3d84b7d259c89ddef33bdb19e50174a7.png

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值