java作业第二次.docx
《java作业第二次.docx》由会员分享,可在线阅读,更多相关《java作业第二次.docx(28页珍藏版)》请在冰豆网上搜索。
java作业第二次
第三章Java面向对象
1、为某研究所编写一个通用程序,用来计算每一种交通工具运行1000公里所需的时间,已知每种交通工具的参数都是3个整数A、B、C的表达式。
现有两种工具:
Car007和Plane,其中Car007的速度运算公式为:
A*B/C,Plane的速度运算公式为:
A+B+C。
需要编写三类:
ComputeTime.java,Plane.java,Car007.java和接口Common.java,要求在未来如果增加第3种交通工具的时候,不必修改以前的任何程序,只需要编写新的交通工具的程序。
其运行过程如下,从命令行输入ComputeTime的四个参数,第一个是交通工具的类型,第二、三、四个参数分别时整数A、B、C,举例如下:
计算Plane的时间:
"javaComputeTimePlane203040"
计算Car007的时间:
"javaComputeTimeCar007233445"
如果第3种交通工具为Ship,则只需要编写Ship.java,运行时输入:
"javaComputeTimeShip223344"
提示:
充分利用接口的概念,接口对象充当参数。
实例化一个对象的另外一种办法:
Class.forName(str).newInstance();例如需要实例化一个Plane对象的话,则只要调用Class.forName("Plane").newInstance()便可。
Commond=(Common)Class.forName("ComputeTime."+args[0]).newInstance();//实例化对象是包名加对象名
packageComputeTime;
publicinterfaceCommon{
doublerunTimer(doublea,doubleb,doublec);
}
packageComputeTime;
publicclassCarimplementsCommon{
@Override
publicdoublerunTimer(doublea,doubleb,doublec){
return(a+b+c);
}
}
packageComputeTime;
publicclassPlaneimplementsCommon{
@Override
publicdoublerunTimer(doublea,doubleb,doublec){
return(a+b+c);
}
}
packageComputeTime;
publicclassShipimplementsCommon{
@Override
publicdoublerunTimer(doublea,doubleb,doublec){
return(a+b-c);
}
}packageComputeTime;
publicclassComputeTime{
publicstaticvoidmain(String[]args){
System.out.println("交通工具:
"+args[0]);
System.out.println("参数A:
"+args[1]);
System.out.println("参数B:
"+args[2]);
System.out.println("参数C:
"+args[3]);
doubleA=Double.parseDouble(args[1]);
doubleB=Double.parseDouble(args[2]);
doubleC=Double.parseDouble(args[3]);
doublev,t;
try{
Commond=(Common)Class.forName("ComputeTime."+args[0]).newInstance();
v=d.runTimer(A,B,C);
t=1000/v;
System.out.println("平均速度:
"+v+"km/h");
System.out.println("运行时间:
"+t+"小时");
}catch(ClassNotFoundException|InstantiationException|IllegalAccessExceptione){
System.out.println("classnotfound");
}
}
}
2、编写一个学生类Student,要求:
(1)学生类Student属性有:
id:
long型,代表学号name:
String类对象,代表姓名age:
int型,代表年龄sex:
boolen型,代表性别(其中:
true表示男,false表示女)phone:
String类对象,代表联系电话
(2)学生类Student的方法有:
Student(longi,Stringn,inta,booleans,Stringp):
有参构造函数,形参表中的参数分别初始化学号、姓名、年龄、性别和联系电话。
intgetAge()():
获取年龄作为方法的返回值。
booleangetSex()():
获取性别作为方法的返回值。
StringgetPhone():
获取联系电话作为方法的返回值。
publicStringtoString():
以姓名:
联系电话的形式作为方法的返回值。
packagestudent;
publicclassStudent{
privatelongid;
privateStringname;
privateintage;
booleansex;
privateStringphone;
publicStudent(){}
publicStudent(longi,Stringn,inta,booleans,Stringp){
id=i;
name=n;
age=a;
sex=s;
phone=p;
}
publiclonggetId(){
returnid;
}
publicStringgetName(){
returnname;
}
publicStringgetPhone(){
returnphone;
}
publicintgetAge(){
returnage;
}
publicbooleangetSex(){
returnsex;
}
publicStringtoString(){
return"姓名:
"+name+",ID:
"+id+",年龄:
"+age+",男?
"+sex+",Phone:
"+phone;
}
publicstaticvoidmain(String[]args){
Studentstu=newStudent(18,"张三",19,true,"12456");
System.err.println(stu.toString());
}
}
run:
姓名:
张三,ID:
18,年龄:
19,男?
true,Phone:
12456
3、利用接口编写三角形、矩形的面积和周长的程序。
packagehomework3_4;
publicinterfaceCommon{
publicdoublearea();
publicdoublelength();
}
packagehomework3_4;
publicclassRentangleimplementsCommon{
doubles1;
doubles2;
publicRentangle(){}
publicRentangle(doublea,doubleb){
s1=a;
s2=b;
}
@Override
publicdoublearea(){
returns1*s2;
}
@Override
publicdoublelength(){
return2*s1+2*s2;
}
@Override
publicStringtoString(){
return"面积为:
"+this.area()+",周长为:
"+this.length();
}
}
packagehomework3_4;
publicclassTriangleimplementsCommon{
privatedoubles1;
privatedoubles2;
privatedoubles3;
publicTriangle(){}
publicTriangle(doublea,doubleb,doublec){
this.s1=a;
this.s2=b;
this.s3=c;
}
@Override
publicdoublearea(){
doublep=(s1+s2+s3)/2;
returnMath.sqrt(p*(p-s1)*(p-s2)*(p-s3));
}
@Override
publicdoublelength(){
returns1+s2+s3;
}
@Override
publicStringtoString(){
return"面积为:
"+this.area()+",周长为:
"+this.length();
}
}
packagehomework3_4;
publicclassHomeWork3_4{
publicstaticvoidmain(String[]args){
Rentangler=newRentangle(4,6);
Trianglet=newTriangle(5,12,13);
System.out.println(r.toString());
System.out.println(t.toString());
}
}
run:
面积为:
24.0,周长为:
20.0
面积为:
30.0,周长为:
30.0
4、编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
packagehomework3_5;
publicclassHomeWork3_5{
publicstaticStringgetSubString(Stringstr,intlen)throwsException{
if(str==null||str.length()<1){
returnnull;
}
if(len<1){
returnnull;
}
StringBuilders=newStringBuilder();
intall=0;
for(inti=0;iStringtmp=str.substring(i,i+1);
s.append(tmp);
byte[]tmpB=tmp.getBytes("GBK");
all+=tmpB.length;
if(all>=len){
break;
}
}
returns.toString();
}
publicstaticvoidmain(String[]args)throwsException{
System.out.println(""+getSubString("我ABC汉DEF",6));
}
}
run:
我ABC汉
第五章Java常见类
1、设有一个由10个英文单-词构成的字符串数组,要求:
(1)统计以字母“w”开头的单词数;
(2)统计单词中含“or”字符串的单词数;
(3)统计长度为3的单词数。
packagehomework5_1;
importjava.util.Scanner;
publicclassHomeWork5_1{
publicstaticvoidmain(Stringargs[]){
Scannerread=newScanner(System.in);
//Strings=read.next();
Strings="wwwwwwwwwordeiuhjfeiorwerorwowrfoeofiooerhj";
String[]str;
str=s.split("");
for(inti=0;iSystem.out.println(str[i]);
}
intcountw=0;
booleanw=false;
intcountor=0;
booleanor=false;
intcount3=0;
booleanthree=false;
for(inti=0;i<10;i++){
w=false;
or=false;
three=false;
for(intj=0;jif(str[i].charAt(0)=='w'&&!
w){
countw++;
w=true;
}
if(j<(str[i].length()-1)&&!
or){
if(str[i].charAt(j)=='o'&&str[i].charAt(j+1)=='r'){
countor++;
or=true;
}
}
if(str[i].length()==3&&!
three){
count3++;
three=true;
}
}
}
System.out.println("单词以w开头的共:
"+countw+"个,包含or单词共:
"+countor+"个,长度为3的单词共:
"+count3+"个");
}
}
run:
wwwww
www
wor
deiuh
jfeior
wer
orw
owr
foeo
fiooerhj
单词以w开头的共:
4个,包含or单词共:
3个,长度为3的单词共:
5个
2、利用随机函数产生20个10~90之间的不重复整数,将这些数拼接在一个字符串中,用逗号隔开(每产生一个新数,要保证在该串中不存在)。
然后将字符串中的整数分离存放到一个数组中,将数组的内容按由小到大的顺序输出。
packagehomework5_2;
importjava.util.Arrays;
importjava.util.Random;
publicclassHomeWork5_2{
publicstaticvoidmain(String[]args){
Randomr=newRandom();
inta[]=newint[20];
for(inti=0;i<20;i++)
{
a[i]=r.nextInt(80)+10;
for(intj=0;j<=i;j++)
if(a[i]==a[j]&&i!
=j)
{
i--;
break;
}
}
Strings=newString();
for(inti=0;i<20;i++)
{
if(i==19){
s+=a[i];
break;
}
s=s+a[i]+",";
}
System.out.println(s);
String[]b;
b=s.split(",");
int[]c=newint[b.length];
for(inti=0;ic[i]=Integer.parseInt(b[i]);
Arrays.sort(c);
for(inti=0;i{
if(i%5==0&&i!
=0)
System.out.println();
System.out.print("c["+(i+1)+"]="+c[i]+"");
}
//TODOcodeapplicationlogichere
}
}
run:
71,23,15,27,83,31,76,63,29,20,38,85,58,41,80,68,54,61,35,40
c[1]=15c[2]=20c[3]=23c[4]=27c[5]=29
c[6]=31c[7]=35c[8]=38c[9]=40c[10]=41
c[11]=54c[12]=58c[13]=61c[14]=63c[15]=68
c[16]=71c[17]=76c[18]=80c[19]=83c[20]=85
3、先任意输入不超过10个人的姓名和电话到电话簿,然后从电话簿中查询指定人的电话。
packagehomework5_3;
publicclassPhoneBook{
privateStringname;
privateStringphone;
publicPhoneBook(){
}
publicPhoneBook(StringName,StringPhone){
this.name=Name;
this.phone=Phone;
}
publicStringgetName(){
returnname;
}
publicStringgetPhone(){
returnphone;
}
}
packagehomework5_3;
importjava.io.*;
importjava.util.Scanner;
publicclassHomeWork5_3{
publicstaticvoidmain(String[]args)throwsFileNotFoundException,IOException{
Stringname;
Stringphone=null;
Stringreadfile;
String[]s;
intn=10;
PhoneBookpb[]=newPhoneBook[10];
InputStreamis=HomeWork5_3.class.getResourceAsStream("test5_3.txt");
InputStreamReaderisr=newInputStreamReader(is,"UTF-8");
BufferedReaderbfr=newBufferedReader(isr);
Scannerread=newScanner(System.in);
for(inti=0;ireadfile=bfr.readLine();
s=readfile.split("");
name=s[0];
phone=s[1];
pb[i]=newPhoneBook(name,phone);
}
System.out.println("录入信息:
");
for(inti=0;iname=pb[i].getName();
phone=pb[i].getPhone();
System.out.println("姓名:
"+name+",电话为:
"+phone);
}
System.out.print("请输入要查询人姓名:
");
name=read.next();
booleanflag=false;
for(inti=0;iif(pb[i].getName().equals(name)){
flag=true;
phone=pb[i].getPhone();
name=pb[i].getName();
break;
}
}
if(flag){
System.out.println("要查询人姓名:
"+name+",电话为:
"+phone);
}
}
}
run:
录入信息:
姓名:
张三,电话为:
123456
姓名:
离散,电话为:
12324345
姓名:
王五,电话为:
1234567
姓名:
李六,电话为:
90876
姓名:
赵一,电话为:
5674839
姓名:
郭八,电话为:
08976
姓名:
谢二,电话为:
3094856
姓名:
邓七,电话为:
02934857
姓名:
袁九,电话为:
578240
姓名:
明骚,电话为:
293485
请输入要查询人姓名:
袁九
要查询人姓名:
袁九,电话为:
578240
4、编写一个日历,按照格式yyyy-MM-dd输入一个指定日期,可以显示当月的日历,该指定日期前面加*以示是你输入的日期。
/*
*Tochangethistemplate,chooseTools|Templates
*andopenthetemplateintheeditor.
*/
packagehomework5_4;
importjava.util.Calendar;
publicclassHomeWork5_4{
publicstaticvoidmain(String[]args){
//Scannerread=newScanner(System.in);
//Stringstr=read.nextLine();
Stringstr="2000-2-25";
intyear;
intmonth;
intDay;
String[]s;
s=str.split("-");
year=Integer.parseInt(s[0]);
month=Integer.parseInt(s[1]);