北京信息科技大学Java语言程序设计类和对象.docx
- 文档编号:10182808
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:16
- 大小:179.88KB
北京信息科技大学Java语言程序设计类和对象.docx
《北京信息科技大学Java语言程序设计类和对象.docx》由会员分享,可在线阅读,更多相关《北京信息科技大学Java语言程序设计类和对象.docx(16页珍藏版)》请在冰豆网上搜索。
北京信息科技大学Java语言程序设计类和对象
【实验名称】实验2类和对象
【实验目的】
1、学习和掌握Java创建对象的方法。
2、学习和掌握通过创建对象、使用类的方法。
3、学习和掌握Java类定义的方法。
4、了解类设计的一般原则。
【实验内容】
1、(JavaAPI类的应用)使用java.util.Random类,创建种子是1000的Random对象,然后使用nextInt(100)方法显示0到100之间前50个随机整数。
说明:
⑴题目来源编程练习8.4(P238)。
⑵请查阅JavaAPI文档,了解java.util.Random的功能和使用方法。
【实验预习】
1、输出0-100之间的50个随机整数。
2、建立种子为1000的random对象,返回0-100之间的随机整数型值,再输出这些值。
3、技术支持:
用了java.util.random类,及循环语句。
【附:
程序代码】
publicclassRandomProgram{
publicstaticvoidmain(String[]args){
//以1000构造random对象
java.util.Randomrandom=newjava.util.Random(1000);
//输出0-100内的50个随机整型值
for(inti=0;i<50;i++)
System.out.print(random.nextInt(100)+"");
}
}
【实验过程及结果记录】
在实验中遇到的问题:
忘记写特定种子,这样使用的就是当前时间作为种子构造random对象。
2、(使用StackOfIntegers类,显示素数因子)编写一个程序,提示用户输入一个正整数,然后以降序显示它的所有最小因子。
例如:
如果整数为120,那么显示的最小因子为5、3、2、2、2。
使用StackOfIntegers类存储因子(如:
2、2、2、3、5),获取之后按倒序显示这些因子。
说明:
⑴题目来源编程练习10.5(P296)。
⑵StackOfIntegers类实现,参见10.9“堆栈类设计”、类图10-11(P288)。
⑶求素数因子算法,参考编程练习4.16(P117)。
【实验预习】
1.输出一个正整数的所有素数因子。
2.输入:
用scanner输入一个正整数。
处理:
当改正整数能被2以上整除时,将除数放入栈中,商赋给除数,否则除数加1,循环上述步骤,知道被除数为1停止。
输出:
将栈中的数一次输出。
3:
技术支持:
创建了StackOfIntegers类,使用了堆栈类设计方法,使用了循环语句,条件语句,输出语句等。
【附:
程序代码】
publicclasstestStacksOfIntegers{
publicstaticvoidmain(String[]args){
//创建StacksOfIntegers类
StackOfIntegersstack=newStackOfIntegers();
//输入一个正整数
Scannerinput=newScanner(System.in);
intlimit=input.nextInt();
intk,s,i=2;
s=limit;
//判断除数是否为该整数的素数因子
do
{
k=s%i;
if(k==0)
{
s=s/i;
stack.push(i);
}
else
i++;
}while(s!
=1);
//输出栈中的数,即素数因子
while(!
stack.empty())
System.out.print(stack.pop()+"");
}
}
//创建StacksOfIntegers类
PublicclassStackOfIntegers{
privateint[]elements;
privateintsize;
publicstaticfinalintDEFAULT_CAPACITY=16;
//构建一个默认容量为16的空栈
publicStackOfIntegers(){
this(DEFAULT_CAPACITY);
}
//构建一个指定容量的空栈
publicStackOfIntegers(intcapacity){
elements=newint[capacity];
}
//将一个整数存储到栈顶
publicvoidpush(intvalue){
if(size>=elements.length){
int[]temp=newint[elements.length*2];
System.arraycopy(elements,0,temp,0,elements.length);
elements=temp;
}
elements[size++]=value;
}
//删除栈顶的整数并返回它
publicintpop(){
returnelements[--size];
}
//返回栈顶的整数而不从栈中删除该数
publicintpeek(){
returnelements[size-1];
}
//如果栈为空则返回true
publicbooleanempty(){
returnsize==0;
}
//返回栈中元素个数
publicintgetSize(){
returnsize;
}
}
【实验过程及结果记录】
在实验中遇到的问题:
在实验开始时不会使用堆栈类设计方法,经过看书上例题,学会了如何使用。
3、(风扇类Fan的应用和实现)根据编程练习8.8(P239)的描述,第一步,请画出风扇Fan类的UML类图。
第二步,编写一个测试程序(Fan类应用),⑴创建两个Fan对象,⑵用第一个Fan对象表示“最大速度运转、半径为10、颜色为黄色、处于打开状态”的风扇;⑶用第二个Fan对象表示“中等速度运转、半径为5、颜色为蓝色、处于关闭状态”的风扇;⑷通过调用toString()方法显示这些风扇的属性信息。
程序可以TestFan.java中。
第三步,实现风扇类Fan,可以编写在Fan.java文件中。
第四步,编译运行该程序。
【实验预习】
1.通过创建Fan类,输出一个风扇的自身属性
2.构建一个风扇类,构建特殊实例,通过调用其中的方法,显示该实例的属性。
3.技术支持:
构建风扇类,使用了构造方法、一般方法,访问器,修改器。
使用了输出语句等。
4.实验步骤:
画出uml图,构建风扇类,再写出main方法。
【UML图】
【附:
程序代码】
publicclassFanProgram{
//主方法
publicstaticvoidmain(String[]args){
//创建一个Fan对象,其设置为最大风速、半径为10、颜色为yellow、状态为打开。
Fanfan1=newFan();
fan1.setSpeed(Fan.FAST);
fan1.setRadius(10);
fan1.setColor("yellow");
fan1.setOn(true);
//输出该实例对象的属性
System.out.println("fan1"+"\n"+fan1.toString());
//创建一个对象,其设置为中等风速、半径为5、颜色为blue、状态为关闭。
Fanfan2=newFan();
fan2.setSpeed(Fan.MEDIUM);
fan2.setRadius(5);
fan2.setColor("blue");
fan2.setOn(false);
//输出该实例对象的属性
System.out.println("fan2"+"\n"+fan2.toString());
}
}
//创建一个风扇类
PublicclassFan{
finalstaticintSLOW=1;
finalstaticintMEDIUM=2;
finalstaticintFAST=3;
privateintspeed=1;
privatebooleanon=false;
privatedoubleradius=5;
privateStringcolor="blue";
//风扇类的无参构造方法
Fan(){
}
//返回这个风扇类的风速
publicintgetSpeed(){
returnspeed;
}
//设置这个风扇的新风速
publicvoidsetSpeed(intnewSpeed){
speed=newSpeed;
}
//返回这个风扇的状态
publicbooleanisOn(){
returnon;
}
//设置这个风扇的新的状态
publicvoidsetOn(booleannewSpeed){
on=newSpeed;
}
//返回这个风扇的半径
publicdoublegetRadius(){
returnradius;
}
//设置这个风扇的新的半径
publicvoidsetRadius(doublenewRadius){
radius=newRadius;
}
//返回这个风扇的颜色
publicStringgetColor(){
returncolor;
}
//设置这个风扇的新的颜色
publicvoidsetColor(StringnewColor){
color=newColor;
}
//返回描述风扇的字符串
publicStringtoString(){
return"speed"+speed+"\n"+"color"+color+"\n"+"radius"+radius+"\n"+((on)?
"fanison":
"fanisoff");
}
}
【实验过程及结果记录】
在实验中遇到的问题:
在用toString时,使用了选择运算符,简化代码。
用if语句,比较长。
4.(tax类的应用和实现)根据编程练习10.8(P297)的描述,使用和实现Tax类,计算缴纳的税款额。
第一步,画出Tax类的UML图。
第二步,编写一个测试程序,使用Tax类,对所给4种纳税人打印2009年的税款表(2009税率表参见表2),可征税收入范围在50,000~60,000美元之间,间隔为1000美元。
第三步,实现Tax类。
第四步,编译、运行该程序。
【实验预习】
1.通过创建Tax类,输出一个Tax的自身属性
2.构建一个Tax类,构建特殊实例,通过调用其中的方法,计算税款。
3.技术支持:
构建Tax类,使用了构造方法、一般方法,访问器,修改器。
使用了输出语句等。
4.实验步骤:
画出uml图,构建Tax类,再写出main方法。
【UML图】
【附:
程序代码】
publicclasstaxProgram{
//主方法
publicstaticvoidmain(String[]args){
int[][]bracketsFor2009={
{6000,27950,67700,141250,307050},//Singlefiler
{12000,46700,112850,171950,307050},//marriedfilingjointly
{6000,23350,56425,85975,153525},//marriedfilingseparately
{10000,37450,96700,156600,307050}//headofhousehold
};
double[]ratesFor2009={0.1,0.15,0.27,0.30,0.35,0.386};
TaxtaxFor2009=newTax(0,bracketsFor2009,ratesFor2009,50000);
System.out.println("2002TaxTable");
System.out.println("taxable\tSingle\tMarried\tMarried\tHeadof");
System.out.println("Income\tSingle\tJoint\tSeparate\taHouse");
for(inttaxableIncome=50000;taxableIncome<=60000;taxableIncome+=1000){
taxFor2009.setTaxableIncome(taxableIncome);
taxFor2009.setFilingStatus(0);
inttaxForStatus0=(int)taxFor2009.findTax();
taxFor2009.setFilingStatus
(1);
inttaxForStatus1=(int)taxFor2009.findTax();
taxFor2009.setFilingStatus
(2);
inttaxForStatus2=(int)taxFor2009.findTax();
taxFor2009.setFilingStatus(3);
inttaxForStatus3=(int)taxFor2009.findTax();
System.out.println(taxableIncome+"\t"+taxForStatus0+"\t"+
taxForStatus1+"\t"+taxForStatus2+"\t"+
taxForStatus3);
}
}
}
//创建Tax类
PublicclassTax{
publicfinalstaticintSINGLE_FILER=1;
publicfinalstaticintMARRIED_JOINTLY=2;
publicfinalstaticintMARRIED_SEPARATELY=3;
publicfinalstaticintHEAD_OF_HOUSEHOLD=4;
privateintfilingStatus=SINGLE_FILER;
privateint[][]brackets={
{6000,27950,67700,141250,307050},//Singlefiler
{12000,46700,112850,171950,307050},//marriedfilingjointly
{6000,23350,56425,85975,153525},//marriedfilingseparately
{10000,37450,96700,156600,307050}//headofhousehold
};
privatedouble[]rates={0.1,0.15,0.27,0.30,0.35,0.386};
privatedoubletaxableIncome=100000;
//构建一个默认的税款对象
publicTax(){
}
//构建一个制定纳税人类型,收入及税率的税款对象
publicTax(intfilingStatus,int[][]brackets,double[]rates,
doubletaxableIncome){
this.filingStatus=filingStatus;
this.brackets=brackets;
this.rates=rates;
this.taxableIncome=taxableIncome;
}
//设置这个对象的收入范围
publicvoidsetBrackets(int[][]brackets){
this.brackets=brackets;
}
//设置税率
publicvoidsetRates(double[]rates){
this.rates=rates;
}
//返回税款对象的收入
publicdoublegetTaxableIncome(){
returntaxableIncome;
}
设置税款对象的收入
publicvoidsetTaxableIncome(doubletaxableIncome){
this.taxableIncome=taxableIncome;
}
//返回纳税人所属类型
publicintgetFilingStatus(){
returnfilingStatus;
}
//设置纳税人所属类型
publicvoidsetFilingStatus(intfilingStatus){
this.filingStatus=filingStatus;
}
//计算税款,并返回税款值
publicdoublefindTax(){
doubletax=0;
if(taxableIncome<=brackets[filingStatus][0])
returntax=taxableIncome*rates[0];
else
tax=brackets[filingStatus][0]*rates[0];
inti;
for(i=1;i if(taxableIncome>brackets[filingStatus][i]) tax+=(brackets[filingStatus][i]-brackets[filingStatus][i-1])* rates[i]; else{ tax+=(taxableIncome-brackets[filingStatus][i-1])*rates[i]; break; } } if(i==brackets[0].length&&taxableIncome>brackets[filingStatus][i-1]) tax+=(taxableIncome-brackets[filingStatus][i-1])*rates[i]; returntax; } } 【实验过程及结果记录】 在实验中要到的问题是不会在UML图中,设置数组类型的数据域 通过学习学会了使用。 【思考题】 1、根据JavaAPI文档,java.util.Random类,有几种创建Random对象的方法,你使用的是哪一种? Random对象能生成哪几种类型的随机数? Java.lang.Math.Random()与java.util.Random; 我使用的是后者。 能生成随机数字和字母。 2、以Tax类为例,说明: ⑴Tax类封装了哪些纳税信息? ⑵Tax类提供了哪些接口,提供给用户访问这些纳税信息? ⑶Tax类为用户提供了哪些功能,帮助用户计算所需缴纳税额? (1)Tax类封装了filingStatus,brackets数组,rates数组,taxableIncome. (2)提供了brackets,rates,taxableIncome,filingStatus的接口访问纳税信息。 (3)Tax类提供了可修改纳税人的种类,税率,收入等级范围的功能,帮助用户计算所需缴税信息。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北京 信息 科技大学 Java 语言程序设计 对象