一、实验目的:
对JAVA语法与面向对象基本概念相关知识进行练习。
二、实验内容:
1.在控制台上,打印输出一个实心菱形。
2.尝试编写一个类,定义一个修饰权限为private的成员变量,并定义两个成员方法,一个成员方法实现为此成员变量赋值,另一个方法获取这个成员变量的值,保证其它类继承该类时能获取该类成员变量的值。
3.尝试编写一个矩形类,将长与宽作为矩形类的属性,在构造方法中将长,宽初始化,定义成员方法求此矩形的周长与面积。
4.分别用for和while循环实现8+88+888+…+8888888888。
5.两位整数对调后,形成的另外一个整数成为对调数(56与65),是否存在一个两位整数加另外一个整数的和,等于他们的对调数之和,比如(36+96=63+69),输出所有满足这样关系的等式。
三、实验代码:
第一题:
package edu.hubu;
public class Project1 {
public static void main(String[] args) {
//函数功能:传参
Print(7);
}
public static void Print(int n) {
//函数功能:输出n行的菱形
int i;
if(n<1) {
System.out.print("菱形层数需为正数(≥1)");
return ;
}
//先打印上三角 i<=(n+1)/2
for(i=0;i<(n+1)/2;i++) {
//先打印左半段空格
for(int j=(n-1)/2-i;j>0;j=j-1)
System.out.print(' ');
//打印中间的*
for(int k=0;k<2*i+1;k++)
System.out.print('*');
//打印右半段空格
for(int j=(n-1)/2-i;j>0;j--)
System.out.print(' ');
System.out.print('\n');
}
//再打印下三角 i<=(n-3)/2
for(i=0;i<=(n-3)/2;i++) {
//先打印左半段空格
for(int j=0; j<=i; j++)
System.out.print(' ');
//打印中间的*
for(int k=0;k<n-2*(i+1);k++)
System.out.print('*');
//打印右半段空格
for(int j=0; j<=i; j++)
System.out.print(' ');
System.out.print('\n');
}
}
}
第二题:
package edu.hubu;
public class Project2 {
//定义一个修饰权限为private的成员变量a
private int a;
public Project2(int a) {
this.a=a;
}
//成员方法1:实现为此成员变量赋值
public void SetValue(int a) {
this.a=a;
}
//成员方法2:获取此成员变量的值
public int GetValue() {
return a;
}
}
package edu.hubu;
//test通过关键字extends继承父类Project2
class test extends Project2{
//调用父类的构造方法
public test(int a) {
super(a);
}
public static void main(String[] args) {
//新建test类型数据t
test t =new test(99);
System.out.print("通过父类方法,子类获得变量t值为:"+t.GetValue());
System.out.print("\n");
t.SetValue(100);
System.out.print("通过父类方法,子类为变量t重新赋值为:"+t.GetValue());
}
}
第三题:
package edu.hubu;
public class Project4_Rectangle {
public static void main(String[] args) {
//构建无参类对象r1
Rectangle r1 = new Rectangle();
System.out.print("无参矩形的周长为"+r1.GetPerimeter()+"\n");
System.out.print("无参矩形的面积为"+r1.GetArea()+"\n");
//构建传递参数类对象r2
Rectangle r2 = new Rectangle(10,8);
System.out.print("长为10 宽为8的矩形周长为"+r2.GetPerimeter()+"\n");
System.out.print("长为10 宽为8的矩形面积为"+r2.GetArea()+"\n");
}
}
//建立Rectangle类
class Rectangle{
private double length;
private double width;
public Rectangle() {
//默认构造函数
length=15;
width=10;
}
public Rectangle(double length,double width) {
//传参构造函数
this.length=length;
this.width=width;
}
public double GetArea() {
//定义成员方法求矩形面积
return width*length;
}
public double GetPerimeter() {
//定义成员方法求矩形周长
return 2*(width+length);
}
}
第四题:
package edu.hubu;
public class Project4 {
public static void main(String[] args) {
//用for循环实现8+88+888+…+888 888 8888 1~10位
String a = "8";
String b=a;
long sum =0;
for(int i=1;i<=10;i++) {
//将字符串b转换成long类型
//累加求和至sum
sum=sum+Long.parseLong(b);
//每次循环在b末尾拼接一个a
b=b+a;
}
System.out.print("for循环:"+"\n"+"8+88+888+…+888 888 8888="+sum+"\n");
//用while循环实现8+88+888+…+8888888888
String a2 = "8";
String b2=a2;
long sum2 =0;
int i=1;
while(i<=10) {
sum2 = sum2 + Long.parseLong(b2);
b2 = b2 + a2;
i++;
}
System.out.print("\n"+"while循环:"+"\n"+"8+88+888+…+888 888 8888="+sum2);
}
}
第五题:
package edu.hubu;
public class Project5 {
public static void main(String[] args) {
// 输出满足“一个两位整数加另外一个整数的和等于他们的对调数之和
“这样关系的等式
for(int i=10;i<100;i++) {
for(int j=10;j<100;j++) {
int i1 = i/10;//i的十位数字
int i2 = i%10;//i的个位数字
int a = 10*i2 + i1;//i的对调数
int j1 = j/10;//j的十位数字
int j2 = j%10;//i的个位数字
int b = 10*j2 + j1;//j的对调数
if(i+j==a+b)
System.out.print(i+"+"+j+"="+a+"+"+b+"\n");
}
}
}
}
四、实验结果:
第一题:
第二题
第三题:
第四题:
第五题:
因输出的关系式数量太多,此处只展示开头与末尾部分
开头部分:
末尾部分:
五、实验小结:
此次实验我一共完成了五道题的java编程实现,都能较为准确地实现题目要求的功能,在编程中我也学到了很多新的知识。
对于第一题打印实心菱形问题,我使用main函数进行传参,使用Print函数实现打印实心菱形的功能。在Print()函数中,我将菱形分为上三角于下三角两部分分别进行操作,对于每部分分为左半段空格、中间三角*、右半段空格三部分进行打印,利用for循环结构控制打印从参数,成功实现对应功能。
对于第二题类继承问题,我定义了Project2与test这两个类,其中test继承父类Project2。在Project2类中定义了一个修饰权限为private的成员变量a,并定义了两个成员方法GetValue()和SetValue(),分别实现变量赋值与获取变量名的功能。在test类中新建test类型数据t,调用父类方法GetValue()获得变量t的值,调用父类方法SetValue()为变量t重新赋值,成功实现对应功能。
对于第三题矩形类问题,我建立了Rectangle类,在Rectangle类分别定义了成员变量length与width,分别定义了默认构造函数与传参构造函数,分别定类了两个成员方法GetArea()和GetPerimeter(),实现求矩阵面积与周长的功能。我在main()函数中分别构建了无参类对象r1与传参类对象r2,调用Rectangle类中的成员方法GetArea()和GetPerimeter(),成功输出矩形周长与面积,实现了对应功能。
对于第四题循环问题,我先设置了字符串类型变量a的值为“8”,通过字符串拼接得到“88”“888”…等字符,再利用类型转换函数Long.parseLong()将String类型数据转换成long类型,建立int类型变量sum实现数据累加求和,最终成功得到8+88+888+…+8888888888的求和结果,成功实现对应功能。
对于第五题对调数问题,我先在外层设置了两个for循环,用来控制变量i与j的值,之后分别对其求得个位数字与十位数字,即可得到i与j的对调数设为a与b,再使用if语句判断是否满足等式,满足条件则输出,成功实现对应功能。