目录
一、实验目的和要求
二、实验内容
1.求最大公约数
2.复数
5.编写一个含有5个类的程序
三、参考
四、其他实验内容
【实验三 面向对象程序设计】
3.编写一个含圆类的程序
4.含圆类、圆柱类和主类的程序
6.阅读程序,验证输出结果
【实验四 语言基础与面向对象】
1.阅读程序,确定输出结果
3.设计矩阵类并计算
5.接口、抽象类、继承、多态
掌握类、对象、方法、继承、接口的编程技术。
要求至少完成实验内容题的70%。(分工合作)
题目:编一程序,求两个正整数m、n的最大公约数。要求程序中有两个方法,分别使用循环和递归求最大公约数,最后在主方法中分别调用这两个方法求解56与91的最大公约数。
提示:用辗转相除法。
方法:(1) 求m除n的余数r;
(2) 如果r为0,则n为最大公约数,结束。否则转(3);
(3) 用n置m,用r置n ,回到(1)。
package com.company;
import java.util.Scanner;
public class GCD
{public static void main(String[] args){Scanner sc=new Scanner(System.in);int i=sc.nextInt();int j=sc.nextInt();int common_divisor=gcd(i,j);System.out.println("最大公约数为:"+common_divisor);//最小公倍数:int least_common_multiply=i*j/common_divisor}//辗转相除法求最大公约数public static int gcd(int a,int b){//递归法if(b==0)return a;return gcd(b,a%b);/*非递归,循环while(b!=0){int remainder=a%b;//定义余数a=b;b=remainder;}return a;*/}/*// n个整数的最大公约数// arr[0] ---arr[n-1]的最大公约数,等于arr[0]// 即gcd(arr[0], arr[1]...,arr[i]) = gcd((arr[i]...(gcd(arr[0], arr[1])))public static int gcdArray(int [] arr){int temp = arr[0];for(int i=1; i<arr.length; i++){temp = gcd(temp, arr[i]); //循环调用gcd()方法,注意将temp放在gcd()方法中}return temp;} */
}
运行截图:
题目:编写一个完整的Java Application程序,其中设计一个复数类Complex,利用它验证两个复数 1+2i 和3+4i 相加产生一个新的复数 4+6i 。复数类Complex的设计必须满足如下要求:
1)Complex 的属性有:
realPart:int型,代表复数的实数部分;
maginPart:int型,代表复数的虚数部分。
2)Complex 的方法有:
Complex():构造方法,将复数的实部和虚部都置0;
Complex(int r , int i ):构造方法,形参 r 为实部的初值,i为虚部的初值。
3)Complex complexAdd(Complex a):将当前复数对象与形参复数对象相加,最后的结果仍是一个复数对象,返回给此方法的调用者。
4)String toString(): 把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中a 和 b分别为实部和虚部的数据。
package com.company;
public class Complexx {public static void main(String[] args){Complex a=new Complex(1,2);Complex b=new Complex(3,4);System.out.println("a="+a.ToString());System.out.println("b="+b.ToString());Complex c=a.complexAdd(b);System.out.println("a+b="+c.ToString());}
}
class Complex{int RealPart; //复数的实数部分int ImaginPart; //复数的虚数部分Complex(){ //构造方法,将复数的实部和虚部都置为零RealPart=0;ImaginPart=0;}Complex(int r,int i){RealPart=r;ImaginPart=i;}Complex complexAdd(Complex a){ //将当前复数对象与形参复数对象相加,最后的结果仍是一个复数对象,返回给此方法的调用者。this.RealPart+=a.RealPart;this.ImaginPart+=a.ImaginPart;return this;}String ToString(){ //把当前复数对象的实部、虚部组合成 a+bi 的字符串形式,其中a 和 b分别为实部和虚部的数据。String str=RealPart+"+"+ImaginPart+"i";return str;}
}
运行截图:
题目:编写一个含有5个类的程序:
类Person:
属性:编号、姓名、性别;
构造方法:确定编号和姓名;
一般方法:修改编号、姓名,获取编号、姓名。
类Teacher:继承类Person并增加:
属性:系别;
构造方法:调用父类的构造方法;
一般方法:修改、获取系别。
类Student:继承类Person并增加:
属性:班级;
构造方法:调用父类的构造方法;
一般方法:修改、获取班级属性值。
类Classes:
属性:班级名称,学生名单(Student类对象的数组);
构造方法:确定班级名称;
一般方法:建立学生名单,输出学生名单。
类Main:
主类。主方法中创建一个班级,然后建立该班级的学生名单,最后输出学生名单。
package com.company;
import java.io.*;import static java.lang.Integer.parseInt;
//import java.lang.Integer;
//import static java.lang.Integer.parseInt;public class JavaFive { //主类public static void main(String args[]) throws IOException{byte buf[]=new byte[20];String str,classroom,name;int n,id,i;System.out.println("请输入班级名:");System.in.read(buf);classroom=new String(buf);Classes classes=new Classes(classroom); //创建班级System.out.println("请输入班级人数:");System.in.read(buf);str=new String(buf);n= Integer.parseInt(str.trim());System.out.println("请输入学生的学号和姓名"); //创建该班级学生名单for(i=0;i<n;i++){System.in.read(buf);str=new String(buf);id= Integer.parseInt(str.trim());System.in.read(buf);name=new String(buf);Student student=new Student(id,name);classes.BuildStudentList(i,student);}classes.getStudentList(n);}
}
class Person{public int id; //编号public String sex; //性别public String name; //姓名public Person(){}public Person(int id,String name){ //确定编号和姓名this.id=id;this.name=name;}public void change(int newid,String newname){ //修改id=newid;name=newname;}public void get(){ //获取System.out.println(id+" "+name.trim());}
}class Teacher extends Person{ //继承Person,调用父类构造方法public String department; //系别public Teacher(){super();}public Teacher(int id,String name){super(id,name);}public void changeDepartment(String newdepartment){ //修改department=newdepartment;}public void getDepartment(){ //获取System.out.println("Department "+department);}
}
class Student extends Person{ //继承Person,调用父类的构造方法public String classroom; //班级public Student(){super();}public Student(int id,String name){super(id,name);}public void changeClassroom(String newclassroom){ //修改classroom=newclassroom;}public void getClassroom(){ //获取System.out.println("Classroom "+classroom);}
}
class Classes{public String className; //班级名称public Student str[]=new Student[100]; //学生名单public Classes(String className){ //确定班级名称this.className=className;}public void BuildStudentList(int i,Student student){ //建立学生名单str[i]=student;}public void getStudentList(int n){int i;for(i=0;i<n;i++){str[i].get();}}
}
运行截图:
编写一个含有5个类的程序
题目:编写一个包含圆类的程序,并为圆类设计几个构造方法和一般方法,在主方法中创建一个圆类对象并输出它的周长和面积。
要求:
属性有3个:x,y,r,分别放置圆心坐标和半径;
构造方法有2个。一个是无参的,用于设置3个属性的值都为0;另一个有参的,用于设置3个属性的值,以确定一个具体的圆。
计算周长的方法:double zc();
计算面积的方法:double mj()。
题目:编写一个程序,它含有一个圆类、圆柱类和主类。
要求:
1)圆类参考上一题中的圆类;
2)圆柱类:继承圆类,并加入一个属性h(高);
构造方法(给4个属性赋值);
计算面积的方法(double mj());
计算体积的方法(double tj())。
注意,要充分利用父类的方法。
3)主类:在主方法中创建圆和圆柱类的对象,然后计算并输出它们的面积及圆柱的体积。
引用:编写一个包含圆类的程序https://blog.csdn.net/qq_45670844/article/details/122052990?spm=1001.2014.3001.5502https://blog.csdn.net/qq_45670844/article/details/122052990?spm=1001.2014.3001.5502
请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。(重点理解:抽象类、抽象方法、(匿名)内部类、匿名对象)
abstract class A{abstract String getS();}
class Test
{ public static void main(String args[]){
System.out.println(new A(){ String getS(){ return "抽象?匿名?";}}.getS());
}
}
7.请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。
(重点理解:接口、接口实现方法、(匿名)内部类、匿名对象)
interface I{ String getS(); }
class Test
{ public static void main(String args[]){
System.out.println(new I(){ public String getS()
{ return "接口和内部类!";}}.getS());
}
}
(请比较本程序与上题程序的不同之处)
引用:阅读程序并比较https://blog.csdn.net/qq_45670844/article/details/122052990?spm=1001.2014.3001.5502https://blog.csdn.net/qq_45670844/article/details/122052990?spm=1001.2014.3001.5502
题目:请先阅读下面的程序,确定它的输出结果。再将程序上机运行,验证自己分析的输出结果是否正确。
class Yuan
{ int r; String name; static int z= 5;
Yuan(int r){ this.r=r; }
int a(){ return z*r*r; }
int p(){ return 5*z*r; }
void value (){ name="china"; }
}
class testOverride extends Yuan
{ int h; String name;
testOverride(int r,int h1) { super(r); h=h1; }
int a(){ value(); return 2*super.a()+p()*h; }
void value()
{ super.value();
name="America";
System.out.println("\""+this.name+"\"");
System.out.println(super.name);
}
public static void main(String args[])
{ Yuan y= new Yuan(4);
Yuan yz= new testOverride(5,2);
System.out.println(y.a());
System.out.println(yz.p());
System.out.println(yz.a());
}
}
2.请先阅读下面的程序,确定它的输出结果。再将程序上机运行,验证自己分析的输出结果是否正确。
public class TestTransOfValue
{public static void main(String args[])
{ double val;
StringBuffer sb1, sb2;
String sb3;
char s[]={'a','p','p','l','e'};
val = 5.8;
sb1 = new StringBuffer("apples");
sb2=new StringBuffer("pears");
sb3 = new String("pear");
modify(val, sb1, sb2,sb3,s);
System.out.println(val);
System.out.println(sb1);
System.out.println(sb2);
System.out.println(sb3);
System.out.println(s);
}
public static void modify(double a, StringBuffer r1,
StringBuffer r2,String r3,char s[] )
{ a = 6.8;
r1.append(" taste good");
r2=null;
r3="banana";
s[2]='R'; }
}
题目:编写一个程序,其中设计一个矩阵类Matrix,
最后计算:
要求Matrix类满足:
1)Matrix的属性有:
m,n:int型,矩阵的行、列数;
ma:int型两维数组,放置矩阵的数据。
2)Matrix的方法有:
Matrix (int m , int n ):构造方法,设置矩阵的行数和列数;
cheng(Matrix a):将当前矩阵与形参矩阵相乘,最后返回乘的结果(Matrix对象); void print():输出矩阵。
4.请仔细阅读下面的程序,分析程序的结构和输出结果。再将程序上机运行,验证输出结果。(注意重点理解:内部类、对象内部类、静态内部类)
public class Outer
{ public Outer(){System.out.println("OuterClass Object!");}
private class Inner1
{ private Inner1(String s){ System.out.println(s);} }
static class Inner2
{ Inner2(String s){ System.out.println(s);} }
public static void main(String[] args)
{ Outer ob= new T();
Outer.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");
Inner2 ib2=new Inner2("InnerClass2 Object!");
}
}
请再尝试将:
Outer.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");
改为:
ob.Inner1 ib1 = ob.new Inner1("InnerClass1 Object!");
看有什么变化。
引用:实验四1~4https://blog.csdn.net/d1ngaa/article/details/122051059?utm_source=app&app_version=4.21.0&code=app_1562916241&uLinkId=usr1mkqgl919blenhttps://blog.csdn.net/d1ngaa/article/details/122051059?utm_source=app&app_version=4.21.0&code=app_1562916241&uLinkId=usr1mkqgl919blen
题目:请仔细阅读下面的程序,分析程序的结构和输出结果。由此理解接口、抽象类、继承、实现接口,进一步理解多态。
interface Food
{ public void doEat();} // doEat()是吃食物的方法
abstract class Fruit{} //水果抽象类
abstract class Meat{ } //肉抽象类
class Apple extends Fruit implements Food//苹果类
{ public void doEat()
{ System.out.println("我是苹果,属于水果类,你不必烹饪我就可吃!"); }
}
class Beef extends Meat implements Food //牛肉类
{ public void doEat()
{System.out.println("我是牛肉,属于肉类,必须烹饪后才可吃!"); }
}
public class Use
{ public static void main(String args[])
{ Food f=new Apple();
f.doEat();
f=new Beef();
f.doEat(); // 两个“f.doEat()”体现了多态
}
}
试一试将主方法改为:
public static void main(String args[])
{ Food f=new Apple(); f.doEat(); }
观察系统有何反应?
再在Fruit类中加入方法“abstract void doEat();” ,看结果怎样,你能得出什么结论?
6.设计一个程序,其中含有一个接口Shape(形状),其中有求形状的面积的方法area()。再定义三个实现接口的类:三角型类、矩形类和圆类。在主方法中创建Shape类型的一维数组,它有三个元素,放置三个对象,分别表示三角形、矩形和圆,然后利用循环输出三个图形的面积。
( 注:三角形面积s=Math.sqrt(p*(p-a)*(p-b)*(p-c)),a,b,c为三条边,p=(a+b+c)/2 )
引用:实验四5~6https://blog.csdn.net/qq_45959399/article/details/122053506https://blog.csdn.net/qq_45959399/article/details/122053506
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态