Java学习:面向对象开发作业示例

简介: Java面向对象相关的一些习题示例,包含代码

 目录

1.设计一个包含多个构造方法的类,并分别用这些构造方法实例化对象。

2.编写一个类Calculate1,实现加、减两种运算,然后,编写另一个派生类Calculate2,实现乘、除两种运算。

3.建立三个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据;官员则继承自成人,多包含党派、职务两项数据。要求每个类的字段都以属性的方式对外提供数据输入输出的功能。

4.编写一个类,其中包含一个排序的方法sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。

5.设计一个立方体类Box,它能计算并输出立方体的体积和表面积。

6.编写一个程序,设计一个点类Point,实例化两个点之后,能调用其方法求两个点之间的距离。

7、 写一个学生类,包括属性: 学号,班号,姓名,年龄,性别;要求用无参构造,方法获得:学号,班号,姓名,年龄(只能小于100岁,大于1,否则重新输入) ,性别(只能男或者女,否则重新输入),最后在主方法输出你对一个学生对象赋值的信息。

8、设计一个BankAccount类,实现银行某账号的资金往来账目管理,包括建账号、存入、取出等。BankAccount类包括,账号(BankAccountId)、开户日期Date(日期),Money(金额),Rest(余额)。另有一个构造方法和三个成员方法Bankin()(处理存入账),Bankout()处理取出账)和和一个负责生成账号的自动增长的方法。

9、 编写一个程序,已有若干学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。思路:设计一个学生类Stud,除了包括no(学号)、name(姓名)、和deg(成绩)数据成员外。有两个静态变量sum和num,分别存放总分和人数,另有一个构造方法、一个普通成员方法disp()和一个静态成员方法avg(),它用于计算平均分。

10.编写一个程序,统计学生成绩,其功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前70%的学生定为合格(PASS),而后30%的学生定为不合格(FAIL)。思路: 设计一个类student,包含学生的姓名和成绩等数据。设计一个类Compute: sort()、disp(),它们分别用于按成绩排序和输出数据。


1.设计一个包含多个构造方法的类,并分别用这些构造方法实例化对象。

class Like {

  public String name;

  public String age;

  public String hobby;

  public Like() {

  }

  public Like(String name, String age, String hobby) {

     this.name = name;

     this.age = age;

     this.hobby = hobby;

  }

  // 说话

  publicvoid say() {

     System.out.println(name + "说:沸羊羊你个臭**");

  }

  publicvoid saying() {

     System.out.println(name + "说:美羊羊你 TMD 真双标");

  }

  publicvoid show() {

     System.out.println("我可是" + name + age + hobby);

  }

}

publicclass NO1 {

  publicstaticvoid main(String[] args) {

     Like landawang = new Like("懒大王,", "你什么身份,我什么地位", ",你在狗叫什么!");

     Like laozi = new Like("羊村村霸,", "村长都得给我递烟!", "TM在那逼逼赖赖!");

     landawang.show();

     laozi.show();

     landawang.say();

     laozi.saying();

  }

}

image.gif编辑

2.编写一个类Calculate1,实现加、减两种运算,然后,编写另一个派生类Calculate2,实现乘、除两种运算。

publicclass NO2 {

  publicstaticvoid main(String[] args) {

     Calculate1 c1 = new Calculate1();

     Calculate2 c2 = new Calculate2();

     System.out.println("c1的加法:" + c1.plus(3, 2));

     System.out.println("c1的减法:" + c1.subtraction(5, 3));

     System.out.println("c2的乘法:" + c2.multiply(4, 4));

     System.out.println("c2的除法:" + c2.remove(6, 3));

  }

}

class Calculate1 {

  publicdouble plus(doublex, doubley) {

     returnx + y;

  }

  publicdouble subtraction(doublex, doubley) {

     returnx - y;

  }

}

class Calculate2 extends Calculate1 {

  publicdouble multiply(doublex, doubley) {

     returnx * y;

  }

  publicdouble remove(doublex, doubley) {

     returnx / y;

  }

}

image.gif编辑

3.建立三个类:居民、成人、官员。居民包含身份证号、姓名、出生日期,而成人继承自居民,多包含学历、职业两项数据;官员则继承自成人,多包含党派、职务两项数据。要求每个类的字段都以属性的方式对外提供数据输入输出的功能。

class Person {

  public String no;

  public String name;

  public String birth;

  public Person(String no, String name, String birth) {

     LO(no);

     LOV(name);

     LOVE(birth);

  }

  publicvoid LO(String no) {

     System.out.println("身份证号:" + no);

     this.no = no;

  }

  publicvoid LOV(String name) {

     System.out.println("姓名:" + name);

     this.name = name;

  }

  publicvoid LOVE(String birth) {

     System.out.println("出生日期:" + birth);

     this.birth = birth;

  }

}

class Adult extends Person {

  public String study;

  public String job;

  public Adult(String no, String name, String birth, String study, String job) {

     super(no, name, birth);

     ST(study);

     JO(job);

  }

  publicvoid ST(String study) {

     System.out.println("学历:" + study);

     this.study = study;

  }

  publicvoid JO(String job) {

     System.out.println("职业:" + job);

     this.job = job;

  }

}

class Official extends Adult {

  public String political;

  public String post;

  public Official(String no, String name, String birth, String study, String job, String political, String post) {

     super(no, name, birth, study, job);

     Pol(political);

     Pos(post);

  }

  publicvoid Pol(String Political) {

     System.out.println("党派:" + Political);

     this.political = Political;

  }

  publicvoid Pos(String post) {

     System.out.println("职务:" + post);

     this.post = post;

  }

}

publicclass NO3 {

  publicstaticvoid main(String[] args) {

     Person m = new Person("4************0", "美羊羊", "2000-02-02");

     System.out.println();

     Adult f = new Adult("4************1", "沸羊羊", "2001-03-08", "小学羊", "添购");

     System.out.println();

     Official l = new Official("4************2", "懒大王", "2002-08-08", "研究羊", "", "羊党", "羊村村霸");

  }

}

image.gif编辑

4.编写一个类,其中包含一个排序的方法sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。

import java.util.Arrays;

publicclass NO4 {

  publicstaticvoid main(String[] args) {

     int[] obj = { 3, 6, 1, 10, 8 };

     obj = sort(obj);

     // 随便建一个字符的数组

     String[] objs = { "b", "a", "c", "h", "d" };

     objs = sort(objs);

     // 打印

     System.out.println("字符输出\t");

     for (inti = 0; i < objs.length; i++) {

         System.out.print(objs[i] + " ");

     }

     System.out.println("\t");

     System.out.println("整数输出\t");

     for (inti = 0; i < obj.length; i++) {

         System.out.print(obj[i] + " ");

     }

  }

  // Arrays.sort()方法排序,默认从小到大

  publicstaticint[] sort(int[] nums) {

     Arrays.sort(nums);

     returnnums;

  }

  // 字符串排序,用冒泡排序,通过compareTo(str)方法进行比较,该方法是根据字典表的顺序进行比较,如果参数大于本值,则返回-1,如果相等返回0,大于返回1

  publicstatic String[] sort(String[] strs) {

     for (inti = 0; i < strs.length; i++) {

         for (intj = 0; j < strs.length - i - 1; j++) {

            if (strs[j].compareTo(strs[j + 1]) < 1) {

               String temp = strs[j];

               strs[j] = strs[j + 1];

               strs[j + 1] = temp;

            }

         }

     }

     returnstrs;

  }

}

image.gif编辑

5.设计一个立方体类Box,它能计算并输出立方体的体积和表面积。

import java.util.Scanner;

class Box {

  privateintlength;

  privateintwidth;

  privateintheigth;

  void setBox(intl, intw, inth) {

     length = l;

     width = w;

     heigth = h;

  }

  int volume() {

     System.out.println("立方体的体积是;" + length * width * heigth);

     return 0;

  }

  int superficial() {

     System.out.println("立方体的表面积是;" + 2 * (length * width + width * heigth + length * heigth));

     return 0;

  }

}

publicclass NO5 {

  publicstaticvoid main(String[] args) {

     Box b = new Box();

     System.out.println("下面将输入你所要计算的立方体体积和表面积");

     System.out.println("下面将输入你所要计算的立方体长");

     Scanner sc = new Scanner(System.in);

     inti = sc.nextInt();

     System.out.println("下面将输入你所要计算的立方体宽");

     intj = sc.nextInt();

     System.out.println("下面将输入你所要计算的立方体高");

     intk = sc.nextInt();

     b.setBox(i, j, k);

     b.volume();

     b.superficial();

  }

}

image.gif编辑

6.编写一个程序,设计一个点类Point,实例化两个点之后,能调用其方法求两个点之间的距离。

class Point {

    private double x;

    private double y;

    public Point(double x, double y) {

         this.x = x;

         this.y = y;

    }

    /*

     * 计算两点之间的距离 公式:根号下(x1-x2)^2+(y1-y2)^2

     */

    public static void distance(Point p1, Point p2) {

         double sum = Math.sqrt(Math.pow(p1.x - p2.x, 2) + Math.pow(p1.y - p2.y, 2));

         System.out.println("两点间的距离为\t");

         System.out.println(sum);

    }

}

public class NO6 {

    public static void main(String[] args) {

         Point.distance(new Point(0, 0), new Point(3, 4));

         //原点到(3,4)的距离

    }

}

image.gif编辑

7、 写一个学生类,包括属性: 学号,班号,姓名,年龄,性别;要求用无参构造,方法获得:学号,班号,姓名,年龄(只能小于100岁,大于1,否则重新输入) ,性别(只能男或者女,否则重新输入),最后在主方法输出你对一个学生对象赋值的信息。

import java.util.Scanner;

publicclass NO7 {

  publicstaticclass Student { // public class开头的内部类为动态的,而主程序以public static class开头

     // java中,类中的静态方法不能直接调用动态方法,只有将某个内部类修饰为静态类,能够在静态类中调用该类的成员变量与成员方法。即此处应改为public

     // static class Student

     intnum;// 学号

     intclassnum;// 班号

     String name;// 姓名

     intage;// 年龄

     String sex;// 性别

     public Student()// 空参构造

     {

         super();

     }

     public Student(intnum, intclassnum, String name, intage, String sex) // 有参构造

     {

         this.num = num;

         this.classnum = classnum;

         this.name = name;

         this.age = age;

         this.sex = sex;

     }

     // 各属性的gettersetter方法

     publicint getNum() {

         returnnum;

     }

     publicvoid setNum(intnum) {

         this.num = num;

     }

     publicint getClassnum() {

         returnclassnum;

     }

     publicvoid setClassnum(intclassnum) {

         this.classnum = classnum;

     }

     public String getName() {

         returnname;

     }

     publicvoid setName(String name) {

         this.name = name;

     }

     publicint getAge() {

         returnage;

     }

     publicvoid setAge(intage) {

         this.age = age;

     }

     public String getSex() {

         returnsex;

     }

     publicvoid setSex(String sex) {

         this.sex = sex;

     }

     // 数组中顺序显示所有学生信息

     void Print(Student[] array)// Student[] array为对象数组,其在使用时必须逐一实例化

     {

         for (inti = 0; i < array.length; i++) {

            System.out.println("学号:" + array[i].num + "  班号:" + array[i].classnum + "  姓名:" + array[i].name

                  + "  年龄:" + array[i].age + "  性别:" + array[i].sex);

         }

     }

     // 通过学生学号查找学生信息

     void Find(intnum, Student[] array)// 参数为num。和学生类数组array

     {

         for (inti = 0; i < array.length; i++) {

            if (num == array[i].getNum()) {

               System.out.println("学号:" + array[i].num + "  班号:" + array[i].classnum + "  姓名:" + array[i].name

                     + "  年龄:" + array[i].age + "  性别:" + array[i].sex);

            }

         }

     }

     publicstaticvoid main(String[] args) {

         // 法一:手动输入学生信息

         Scanner sc = new Scanner(System.in);

         System.out.println("请输入学生人数:");

         intx = sc.nextInt();

         Student[] array = new Student[x];

         for (inti = 0; i < array.length; i++) {

            array[i] = new Student();// 若在编写一个java程序时没有添加无参构造方法,编译器会自动添加无参构造方法;

            // 但是若编写时添加了有参构造方法而未添加无参构造方法,则编译器只认有参构造方法而不会默认添加无参构造方法,需要注意的是如果需要使用无参构造方法,一定要在类中里面添加

            System.out.println("请输入第" + (i + 1) + "个学生的学号");

            intnum = sc.nextInt();// 输入学号

            array[i].setNum(num);

            System.out.println("请输入第" + (i + 1) + "个学生的班号");

            intclassnum = sc.nextInt();// 输入班号

            array[i].setClassnum(classnum);

            System.out.println("请输入第" + (i + 1) + "个学生的姓名");

            String name = sc.next();// 输入姓名

            array[i].setName(name);

            System.out.println("请输入第" + (i + 1) + "个学生的年龄");

            intage = sc.nextInt();// 输入年龄

            if (age < 100 && age > 1)

               array[i].setAge(age);

            else {

               System.out.println("请重新输入");

               continue;

            }

            System.out.println("请输入第" + (i + 1) + "个学生的性别");

            String sex = sc.next();// 输入性别

            if (sex != " " || sex != " ")

               array[i].setSex(sex);

            else {

               System.out.println("请重新输入");

               continue;

            }

         }

         System.out.println("所有学生初始信息如下:");

         array[0].Print(array);

         System.out.println("----------------------------------");

         System.out.println("学号为201801学生信息如下:");

         array[0].Find(201801, array);

         System.out.println("----------------------------------");

     }

  }

}

image.gif编辑

8、设计一个BankAccount类,实现银行某账号的资金往来账目管理,包括建账号、存入、取出等。BankAccount类包括,账号(BankAccountId)、开户日期Date(日期),Money(金额),Rest(余额)。另有一个构造方法和三个成员方法Bankin()(处理存入账),Bankout()处理取出账)和和一个负责生成账号的自动增长的方法。

import java.util.Scanner;

publicclass denglu2 {

  publicstaticvoid main(String[] args){

      Scanner sc = new Scanner(System.in);

      geren1[] user = new geren1[10];

      //System.out.println(user[1]);

      BankAccount(sc,user);

  }

  publicstaticvoid BankAccount(Scanner sc,geren1[] user){

      while (true)

      {

          System.out.println("===银行系统===");

          System.out.println();

          System.out.println("1,登录\t\t2,注册\t\t3,退出");

          intxuanze = sc.nextInt();

          if (xuanze == 1)

          {

              //print(user);

              denglu1(sc,user);

          }elseif(xuanze == 2){

            BankAccountId(sc,user);

              //print(user);

          }elseif(xuanze == 3){

              break;

          }

          else{System.out.println("输入有误!");}

      }

  }

  publicstaticvoid BankAccountId(Scanner sc, geren1[] user){

      System.out.println("====   ====");

      for (inti=0;i<user.length;i++)

      {

          if (user[i] == null)

          {

              System.out.println("请输入注册账号:");

              //user[i][0] = sc.next();

              String zhanghao = sc.next();

              System.out.println("请输入注册密码:");

              //user[i][1] = sc.next();

              String mima = sc.next();

              System.out.println("请输入您的真实姓名:");

              String name = sc.next();

              System.out.println("请输入手机号:");

              //zijin[i][2] = sc.nextInt();

              String phone = sc.next();

              geren1 gr = new geren1(zhanghao,mima,name,phone,i);

              user[i] = gr;

              System.out.println("注册成功");

              return;

          }

      }

  }

  publicstaticvoiddenglu1(Scanner sc,geren1[] user){

      System.out.println("====   =====");

      System.out.println("请输入账号:");

      String zh = sc.next();

      System.out.println("请输入密码:");

      String mm = sc.next();

      for (inti = 0;i<user.length;i++){

          //System.out.println(user[i]);

          if (user[i] != null){

              geren1 gr = user[i];

              //System.out.println(gr.getZijin());

              if (zh.equals(gr.getZhanghao()) && mm.equals(gr.getMima()))

              {

                  System.out.println("登录成功!");

                  grjiemian(sc,user,gr);

                  return;

              }

          }

      }

      System.out.println("无此账号或密码错误!");

  }

  publicstaticvoid grjiemian(Scanner sc,geren1[] user,geren1 gr){

      while(true){

          System.out.println("==== 个人页面 =====");

          System.out.println("请选择您要办理的业务:");

          System.out.println("1,存款\t\t\t2,取款");

          System.out.println("3,查询余额\t\t4,转账");

          System.out.println("5,查询个人信息\t6,退出登录");

          intxuanze = sc.nextInt();

          if (xuanze == 1){

              System.out.println("请输入存款金额:");

              gr.setZijin(gr.getZijin()+sc.nextInt());

              System.out.println("存款成功,当前余额:"+gr.getZijin()+"");

          }elseif (xuanze == 2){

              System.out.println("请输入取款金额:");

              intqk = sc.nextInt();

              if(qk>gr.getZijin()){

                  System.out.println("余额不足。。。");

              }else{

                  gr.setZijin(gr.getZijin()-qk);

                  System.out.println("取款成功,当前余额:"+gr.getZijin()+"");

              }

          }elseif(xuanze == 3){

              System.out.println("当前余额:"+gr.getZijin()+"");

          }

          elseif(xuanze == 4){

              System.out.println("请输入转账账号:");

              String zh = sc.next();

              System.out.println("请输入转账金额:");

              intjine = sc.nextInt();

              for (intzhao = 0;zhao<user.length;zhao++){

                  if (user[zhao] !=null){

                      geren1 gr1 = user[zhao];

                      if (zh.equals(gr1.getZhanghao())){

                          gr1.setZijin(gr1.getZijin()+jine);

                          gr.setZijin(gr.getZijin() - jine);

                      }

                  }

              }

          }

          elseif(xuanze == 5){

              gr.print();

          }

          elseif(xuanze == 6){

              return;

          }

      }

  }

}

image.gif编辑

9、 编写一个程序,已有若干学生数据,包括学号、姓名、成绩,要求输出这些学生数据并计算平均分。思路:设计一个学生类Stud,除了包括no(学号)、name(姓名)、和deg(成绩)数据成员外。有两个静态变量sum和num,分别存放总分和人数,另有一个构造方法、一个普通成员方法disp()和一个静态成员方法avg(),它用于计算平均分。

import java.util.Scanner;

publicclass Student {

  intno;

  String name;

  doublescore;

  staticdoublesum;

  staticintnum;

 

  public Student() {

   

  }

  publicvoiddisp() {

     Scanner sc= new Scanner(System.in);

   

     System.out.println("请输入存放同学的位数为*");

     num = sc.nextInt();

     System.out.println("请输入学号");

     no = sc.nextInt();

     System.out.println("请输入名字");

     name = sc.next();

     System.out.println("请输入成绩");

     score = sc.nextDouble();

     sum = sum+score;

  }

 

  staticdouble ave() {returnsum/num;}

 

  publicvoid showInto() {

     System.out.println("该同学学号为"+no);

     System.out.println("该同学名字为"+name);

     System.out.println("该同学成绩为"+score);

     System.out.println("截至该同学目前平均成绩为"+ave());

  }

}

\\

publicclass Stud {

  publicstaticvoid main(String[] args) {

     System.out.println("请存放三个学生的信息");

     Student one = new Student();

     Student two = new Student();

     Student three = new Student();

   

     one.disp();

     one.showInto();

   

     two.disp();

     two.showInto();

   

     three.disp();

     three.showInto();

  }

}

image.gif编辑

10.编写一个程序,统计学生成绩,其功能包括输入学生的姓名和成绩,按成绩从高到低排列打印输出,对前70%的学生定为合格(PASS),而后30%的学生定为不合格(FAIL)。思路: 设计一个类student,包含学生的姓名和成绩等数据。设计一个类Compute: sort()、disp(),它们分别用于按成绩排序和输出数据。

student类

publicclass Student {

   String name;

   doubledeg;

   public Student(String name, doubledeg) {

       this.name = name;

       this.deg = deg;

   }

}

compute

publicclass Compute {

   publicvoid sort(Student [] students){

       for(inti = 0;i < students.length;i++){

           for(intj = i;j < students.length;j++){

               if(students[i].deg < students[j].deg){

                   Student temp = students[i];

                   students[i] = students[j];

                   students[j] = temp;

               }

           }

       }

   }

   publicvoid disp(Student[] students){

       sort(students);

       for(inti = 0;i < students.length;i++){

           if(i <= students.length*0.7-1){

               System.out.println("姓名:"+students[i].name+"  成绩:"+students[i].deg+"  PASS");

           }else {

               System.out.println("姓名:"+students[i].name+"  成绩:"+students[i].deg+"  FAIL");

           }

       }

   }

}

Demo

publicclass Demo {

  publicstaticvoid main(String[] args) {

     Student[] s = new Student[5];

       s[0] = new Student("四浪",79);

       s[1] = new Student("三根",88);

       s[2] = new Student("二狗",56);

       s[3] = new Student("一休",75);

       s[4] = new Student("零零",65);

       Compute compute = new Compute();

       compute.disp(s);

  }

}

image.gif编辑

相关文章
|
6天前
|
Java
Java面向对象实践小结(含面试题)(下)
Java面向对象实践小结(含面试题)(下)
18 1
|
3天前
|
Java
简单的 Java 计算器示例
这是一个Java计算器程序,接收用户输入的两个数字和一个运算符(+,-,*,/),通过`Scanner`获取输入,使用`switch`进行计算。当运算符为除法时,检查除数是否为0,防止除零错误。最后,它打印出计算结果。
7 0
|
5天前
|
Java 索引
Java String应用与开发
Java String应用与开发
13 0
|
5天前
|
存储 Java 开发工具
【Java探索之旅】用面向对象的思维构建程序世界
【Java探索之旅】用面向对象的思维构建程序世界
9 0
|
5天前
|
算法 Java 大数据
Java从入门到精通学习报告
Java从入门到精通学习报告
11 1
|
5天前
|
消息中间件 监控 安全
【JAVAEE学习】探究Java中多线程的使用和重点及考点
【JAVAEE学习】探究Java中多线程的使用和重点及考点
|
5天前
|
安全 Java 开发者
构建高效微服务架构:后端开发的新范式Java中的多线程并发编程实践
【4月更文挑战第29天】在数字化转型的浪潮中,微服务架构已成为软件开发的一大趋势。它通过解耦复杂系统、提升可伸缩性和促进敏捷开发来满足现代企业不断变化的业务需求。本文将深入探讨微服务的核心概念、设计原则以及如何利用最新的后端技术栈构建和部署高效的微服务架构。我们将分析微服务带来的挑战,包括服务治理、数据一致性和网络延迟问题,并讨论相应的解决方案。通过实际案例分析和最佳实践的分享,旨在为后端开发者提供一套实施微服务的全面指导。 【4月更文挑战第29天】在现代软件开发中,多线程技术是提高程序性能和响应能力的重要手段。本文通过介绍Java语言的多线程机制,探讨了如何有效地实现线程同步和通信,以及如
|
5天前
|
Java
java使用面向对象实现图书管理系统
java使用面向对象实现图书管理系统
|
5天前
|
Java
Java语言---面向对象的三大特征之继承
Java语言---面向对象的三大特征之继承
|
5天前
|
机器学习/深度学习 Java Python
Java面向对象知识体系---基础版
Java面向对象知识体系---基础版