这次是关于java面向对象的方法和类的一些练习
1.编写一个数组的工具类
package J2;
//编写一个数组的工具类
public class ArrayUtil {
public static void main(String[] args) {
int[] num = new int[10];
ArrayUtil a1 = new ArrayUtil();
a1.value(num);
a1.print(num);
System.out.println("* * * *");
a1.Max(num);
a1.Min(num);
a1.aver(num, a1);
a1.sort(num);
a1.print(num);
System.out.println("* * * *");
a1.copy(num);
System.out.println("* * * *");
a1.reversal(num);
a1.print(num);
System.out.println();
}
// 数组随机数赋值,赋值范围在0-100
public void value(int[] num) {
for (int i = 0; i < num.length; i++) {
num[i] = (int) (Math.random() * 90 + 10);
}
System.out.println();
}
// 求数组的最大值
public void Max(int[] num) {
int Maxnum = -1;
for (int i = 0; i < num.length; i++) {
if (Maxnum < num[i]) {
Maxnum = num[i];
}
}
System.out.println("数组的最大值为" + Maxnum);
}
// 求数组的最小值
public void Min(int[] num) {
int Minnum = 101;
for (int i = 0; i < num.length; i++) {
if (Minnum > num[i]) {
Minnum = num[i];
}
}
System.out.println("数组的最大值为" + Minnum);
}
// 求数组的总和
public int sum(int[] num) {
int sum = 0;
for (int i = 0; i < num.length; i++) {
sum += num[i];
}
System.out.println("数组的总和为" + sum);
return sum;
}
// 求数组的平均值
public void aver(int[] num, ArrayUtil a1) {
int aver = 0;
aver = a1.sum(num) / (num.length);
System.out.println(" 数组的平均值为" + aver);
}
// 反转数组
public void reversal(int[] num) {
for (int i = 0; i < num.length / 2; i++) {
int temp = num[i];
num[i] = num[num.length - i - 1];
num[num.length - i - 1] = temp;
}
}
// 复制数组
public void copy(int[] num) {
int[] num1 = new int[num.length];
for (int i = 0; i < num1.length; i++) {
num1[i] = num[i];
}
for (int j = 0; j < num1.length; j++) {
System.out.print(num1[j] + "\t");
}
}
// 数组排序
public void sort(int[] num) {
for (int i = 0; i < num.length - 1; i++) {
for (int j = 0; j < num.length - i - 1; j++) {
if (num[j] > num[j + 1]) {
int temp = num[j];
num[j] = num[j + 1];
num[j + 1] = temp;
}
}
}
}
// 遍历数组
public void print(int[] num) {
for (int index = 0; index < num.length; index++) {
System.out.print(num[index] + "\t");
}
}
}
2.利用面向对象的编程方法,设计类Circle计算圆的面积
package J2;
//利用面向对象的编程方法,设计类Circle计算圆的面积
public class CircleTest {
public static void main(String[] args) {
Circle r1 = new Circle();
r1.r = 4;
//方法一
r1.mianji();
//方法二
double r2 = r1.mianji1();
System.out.println("面积为" + r2);
}
}
class Circle{
double r;
//方法一
public void mianji() {
double mianji = Math.PI * r * r;
System.out.println("面积为" + mianji);
}
//方法二
public double mianji1() {
double mianji1 = Math.PI * r * r;
return mianji1;
}
}
3.
编写教师类和学生类,并通过测试类创建对象进行测试
Student类 Teacher类
属性: 属性:
name:String name:String
age:int age:int
major:String teachAge:int
interests:String course:String
方法:say() 方法:say()
返回学生的个人信息 输出教师的个人信息
package J2;
/*
* 编写教师类和学生类,并通过测试类创建对象进行测试
Student类 Teacher类
属性: 属性:
name:String name:String
age:int age:int
major:String teachAge:int
interests:String course:String
方法:say() 方法:say()
返回学生的个人信息 输出教师的个人信息
*/
public class ClassTest {
public static void main(String[] args) {
Student st1 = new Student();
st1.age = 18;
st1.intersts = "睡觉";
st1.name = "yolo";
st1.major = "语文";
String stu = st1.say();
System.out.println(stu);
Teacher th1 = new Teacher();
th1.age = 30;
th1.course = "数学";
th1.name = "moon";
th1.teacherAge = 2;
th1.say();
}
}
class Student{
String name;
int age;
String major;
String intersts;
public String say() {
String student = "学生姓名为" + name + " 年龄为" + age +
" 专业为" + major + " 兴趣为" + intersts;
return student;
}
}
class Teacher{
String name;
int age;
int teacherAge;
String course;
public void say() {
System.out.println("老师的姓名为" + name + " 年龄为" + age +
" 教龄为" + teacherAge + " 教授的课程为" + course);
}
}
4.
创建一个Person类,其定义如下:
要求:(1)创建Person类的对象,设置该对象的name、name:String
age和sex属性,调用study方法,输出字符串age:in “studying”,
调用showAge()方法显示age值,调用Osex:int addAge()方法给对象的age属性值增加2岁.
(2)创建第二个对象,执行上述操作,体会同一个类的+addAge(int i):int 不同对象之间的关系。
Person
name:String
age:int
sex:int
+study():void
+showAge():void
+addAge(int i):int
package J2;
/*1.创建一个Person类,其定义如下:
public class ClassTest1 {
public static void main(String[] args) {
Person p1 = new Person();
p1.age = 18;
p1.name = "yolo";
p1.sex = 0;
p1.study();
p1.showAge();
p1.addAge(2);
Person p2 = new Person();
p2.showAge();
p2.study();
p2.addAge(3);
}
}
class Person{
String name;
int age;
/*
* sex = 1 为男
* sex = 2 为女
*/
int sex;
public void study() {
System.out.println("studying");
}
public void showAge() {
System.out.println("年龄" + age);
}
public void addAge(int i) {
age += i;
System.out.println(age);
}
}
5.
(1)编写程序,声明一个method方法,在方法中打印一个10*8的*型矩形,在main方法中调用该方法。
(2) 修改上一个程序,在method方法中,除打印一个10*8的*型矩形外,再计算该矩形的面积,并将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
(3)修改上一个程序,在method方法提供m和n两个参数,方法中打印一个m*n的*型矩形,
并计算该矩形的面积,将其作为方法返回值。在main方法中调用该方法,接收返回的面积值并打印。
package J2;
public class ClassTest2 {
public static void main(String[] args) {
ClassTest2 t1 = new ClassTest2();
//3.1
//t1.method();
//3.2
// int t = t1.method();
// System.out.println(t);
//3.3
int t2 = t1.method(3, 4);
System.out.println(t2);
}
//3.1
// public void method() {
// for (int i = 0; i < 10; i++) {
// for (int j = 0; j < 8; j++) {
// System.out.print("* ");
// }
// System.out.println();
// }
// }
//3.2
// public int method() {
// for (int i = 0; i < 10; i++) {
// for (int j = 0; j < 8; j++) {
// System.out.print("* ");
// }
// System.out.println();
// }
// return 10 * 8;
// }
//3.3
public int method(int m,int n) {
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
System.out.print("* ");
}
System.out.println();
}
return m * n;
}
}
6.
对象数组题目:
定义类Student1,包含三个属性:学号number(int),年级state(int),成绩score(int)。
创建20个学生对象,学号为1到20,年级和成绩都由随机数确定。
问题一:打印出3年级(state值为3)的学生信息。
问题二:使用冒泡排序按学生成绩排序,并遍历所有学生信息
提示:
1)生成随机数:Math.random(),返回值类型double;
2)四舍五入取整:Math.round(double d),返回值类型long。
package J2;
public class ClassTest3 {
public static void main(String[] args) {
Student1 [] st1 = new Student1 [20];
for (int i = 0; i < st1.length; i++) {
st1[i] = new Student1();
}
for (int i = 0; i < st1.length; i++) {
st1[i].number = i;
}
for (int i = 0; i < st1.length; i++) {
st1[i].score = (int)(Math.random() * 99 + 1);
}
for (int i = 0; i < st1.length; i++) {
st1[i].state = (int)(Math.random() * 5 + 1);
}
for (int i = 0; i < st1.length; i++) {
if (st1[i].state == 3) {
System.out.println("学号" +st1[i].number + " 分数" + st1[i].score + " 年级" + st1[i].state);
}
}
System.out.println();
for (int i = 0; i < st1.length - 1; i++) {
for (int j = 0; j < st1.length - 1 - i; j++) {
if (st1[j].score > st1[j + 1].score) {
//st1是student1类型,temp也得是,这样才能实现转换
Student1 temp = st1[j];
st1[j] = st1[j + 1];
st1[j + 1] = temp;
}
}
}
System.out.println();
for (int i = 0; i < st1.length; i++) {
System.out.println("学号" +st1[i].number + " 分数" + st1[i].score + " 年级" + st1[i].state);
}
}
}
class Student1{
int number;
int state;
int score;
}
7.优化上一道题
package J2;
public class ClassTest4 {
public static void main(String[] args) {
Student2 [] st1 = new Student2 [20];
for (int i = 0; i < st1.length; i++) {
st1[i] = new Student2();
}
for (int i = 0; i < st1.length; i++) {
st1[i].number = i;
}
for (int i = 0; i < st1.length; i++) {
st1[i].score = (int)(Math.random() * 99 + 1);
}
for (int i = 0; i < st1.length; i++) {
st1[i].state = (int)(Math.random() * 5 + 1);
}
ClassTest4 t1 = new ClassTest4();
t1.println(st1);
System.out.println("*****");
t1.sort(st1);
t1.println(st1);
System.out.println("*****");
t1.seachState(st1, 3);
System.out.println();
}
//括号里明确给哪个数组排序
public void seachState(Student2[] st1 , int state) {
for (int i = 0; i < st1.length; i++) {
if (st1[i].state == state) {
st1[i].info();
}
}
}
public void println(Student2[] st1) {
for (int i = 0; i < st1.length; i++) {
st1[i].info();
}
}
public void sort(Student2[] st1) {
for (int i = 0; i < st1.length - 1; i++) {
for (int j = 0; j < st1.length - 1 - i; j++) {
if (st1[j].score > st1[j + 1].score) {
//st1是student1类型,temp也得是,这样才能实现转换
Student2 temp = st1[j];
st1[j] = st1[j + 1];
st1[j + 1] = temp;
}
}
}
}
}
class Student2{
int number;
int state;
int score;
public void info() {
System.out.println("学号" +number + " 分数" + score + " 年级" + state);
}
}
8.
编写程序,定义三个重载方法并调用。方法名为mOL。
三个方法分别接收一个int参数、两个int参数、一个字符串参数。分别执行平方运算并输出结果,
相乘并输出结果,输出字符串信息。
在主类的main()方法中分别用参数区别调用三个方法。
package J2;
public class ClassTest5 {
public static void main(String[] args) {
ClassTest5 t1 = new ClassTest5();
t1.mOL("moon");
t1.mOL(2);
t1.mOL(3, 4);
}
public void mOL(int m) {
System.out.println(m * m);
}
public void mOL(int m,int n) {
System.out.println(m * n);
}
public void mOL(String m) {
System.out.println(m);
}
}
9.
定义三个重载方法max(),第一个方法求两个int值中的最大值,第二个方法求两个double值中的最大值,
第三个方法求三个double值中的最大值,并分别调用三个方法。
package J2;
public class ClassTest6 {
public static void main(String[] args) {
ClassTest6 t1 = new ClassTest6();
t1.max(3, 6);
t1.max(4.7, 8.9, 1.0);
t1.max(4, 9);
}
public void max(int a,int b) {
int c = (a > b)?a:b;
System.out.println("最大值为" + c);
}
public void max(double a,double b) {
double c = (a > b)?a:b;
System.out.println("最大值为" + c);
}
public void max(double a,double b,double d) {
double c = (a > b)?a:b;
double e = (c > d)?c:d;
System.out.println("最大值为" + e);
}
}
10.
输入一个数据n,计算斐波那契数列(Fibonacci)的第n个值
1 1 2 3 5 8 13 21 34 55
规律:一个数等于前两个数之和
要求:计算斐波那契数列(Fibonacci)的第n个值,并将整个数列打印出来
package J2;
public class Fibonacci {
public static void main(String[] args) {
Fibonacci F1 =new Fibonacci();
int num1 =F1.Fibonacci1(10);
System.out.println(num1);
}
public int Fibonacci1(int num) {
if (num == 1) {
return 1;
} else if (num == 2) {
return 1;
}else{
return Fibonacci1(num - 1) + Fibonacci1(num - 2);
}
}
}
11.
(1)定义一个Circle类,包含一个double型的radius属性代表圆的半径,一个findArea()方法返回圆的面积。
(2)定义一个类PassObject,在类中定义一个方法printAreas(),该方法的定义如下:public void printAreas(Circle c, int time)
在printAreas方法中打印输出1到time之间的每个整数半径值,以及对应的面积。例如,times为5,则输出半径1,2,3,4,5,以及对应的圆面积。
(3)在main方法中调用printAreas()方法,调用完毕后输出当前半径值。程序运行结果如图
所示。
package J2;
/*
* 定义一个Circle类,包含一个double型的radius属性代表圆的半径,
* 一个findArea()方法返回圆的面积。
*/
public class Circle1 {
double radius = 0;
public double findArea() {
return Math.PI * radius * radius;
}
}
package J2;
public class PassObject {
public static void main(String[] args) {
PassObject p1 = new PassObject();
Circle1 c = new Circle1();
p1.printAreas(c, 6);
}
public void printAreas(Circle1 c, int time){
System.out.println("radius\t\t面积 ");
for (int i = 0; i <= time; i++) {
c.radius = i;
Double mianji = c.findArea();
System.out.println( c.radius + "\t\t" + mianji);
}
System.out.println("当前半径值为" + (time + 1));
}
}
12.计算1-100之间所有自然数的和
package J2;
//计算1-100之间所有自然数的和
public class Recursion {
public static void main(String[] args) {
//方法一
int sum = 0;
for (int i = 0; i < 101; i++) {
sum += i;
}
System.out.println(sum);
System.out.println();
//方法二
Recursion r1 = new Recursion();
int num1 = r1.cal(100);
System.out.println(num1);
System.out.println();
int num2 = r1.jc(100);
System.out.println(num2);
}
public int cal(int num) {
if(num == 1){
return 1;
}else{
return num + cal(num - 1);
}
}
//递归求阶乘(n!)的算法
public int jc(int num) {
if(num == 1){
return 1;
}else{
return num * cal(num - 1);
}
}
}
13.
已知有一个数例:f(0)=1,f(1)=4,f(n+2)=2*(n+1)+f(n),
其中n是大于0的整数,求f(10)的值
package J2;
public class RecursionTest {
public static void main(String[] args) {
RecursionTest r1 = new RecursionTest();
int num1 =r1.fx(10);
System.out.println(num1);
}
public int fx(int num) {
if (num == 0) {
return 1;
} else if (num == 1) {
return 4;
}else{
return 2 * (num - 1) + fx(num - 2);
}
}
}