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
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);
}
}
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方法虽然复杂,但是很简单,这个程序比上一个日期的逻辑简单点。总的说完成这两个在大一时候应该能有很大的成就感吧。
现在看看也不是很轻松就能写完,看来水平还是不行啊!