首页 > 编程语言 >Java学习day07: 小练习

Java学习day07: 小练习

时间:2023-07-20 15:13:57浏览次数:33  
标签:Java String double 练习 day07 System toString com public

题目1

为二次方程式$ax^2+bx+c=0$设计一个名为QuadraticEquation的类,这个类包括:

  • 代表三个系数的私有数据域a、b和c;

  • 一个参数为a、b和c的构造方法;

  • 数据域a、b和c的三个get/set方法;

  • 一个名为getDiscriminant()的方法返回判别式,$b^2-4ac$;

  • 一个名为getRoot1()和getRoot2()的方法返回等式的两个根:

    • $r_1=\frac{-b+\sqrt{b^2-4ac}}{2a}$

    • $r_1=\frac{-b-\sqrt{b^2-4ac}}{2a}$

    这些方法只有在判别式为非负数的时候才有用,如果判别式为负,这些方法返回0。

实现这个类,编写一个测试程序,提示用户输入a、b和c的值,然后显示判别式的结果,如果判别式为正数,显示两个根,如果判别式为0,显示一个根,否则显示“The equation has no real roots”,参见下图运行实例:

注:可以使用Math.pow(x,0.5)来计算$\sqrt{x}$。

Enter a, b, c: 1.0  3  1 
The roots are -0.381966 and -2.61803
Enter a, b, c: 1  2.0  1 
The roots is -1
Enter a, b, c: 1  2  3 
The equation has no real roots

答题区:

源码:

package com.oop.test1;


import static java.lang.Math.sqrt;

public class QuadraticEquation {
    private double a;
    private double b;
    private double c;
    //默认构造器
    public QuadraticEquation() {

    }
    //自定义有参构造
    public QuadraticEquation(double a,double b,double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }
    //获取 a 的值
    public double getA() {
        return a;
    }
    //为 a 赋值
    public void setA(double a) {
        this.a = a;
    }
    public double getB() {
        return b;
    }
    public void setB(double b) {
        this.b = b;
    }
    public double getC() {
        return c;
    }
    public void setC(double c) {
        this.c = c;
    }
    //方法getDiscriminant(),用于返回判别式的值
    public double getDiscriminant(double a,double b,double c){
        return b * b -4 * a * c;
    }
    //计算有实根的方程的第一个根
    public double getRoot1(double a,double b,double c){
        if (getDiscriminant(a,b,c)>=0){
            return (-b+sqrt(b*b-4*a*c))/(2*a);
        }
        else{
            return 0;
        }
    }
    //计算有实根的方程的第二个根
    public double getRoot2(double a,double b,double c){
        if (getDiscriminant(a,b,c)>=0){
            return (-b-sqrt(b*b-4*a*c))/(2*a);
        }
        else{
            return 0;
        }
    }
}
package com.oop.test1;

import java.text.DecimalFormat;
import java.util.Scanner;

public class Application1 {
    public static void main(String[] args) {
        System.out.print("Enter a, b, c: ");
        Scanner scanner = new Scanner(System.in);
        double a = scanner.nextDouble();//键盘获取方程系数
        double b = scanner.nextDouble();
        double c = scanner.nextDouble();
        String r1,r2;

        DecimalFormat decimalFormat = new DecimalFormat("#.######");//根小数位过多时取前六位

        QuadraticEquation q = new QuadraticEquation();//调用非静态类中方法,需先实例化
        q.setA(a);//为系数赋值
        q.setB(b);
        q.setC(c);
        if (q.getDiscriminant(a,b,c) > 0){
            r1 = decimalFormat.format(q.getRoot1(a,b,c));
            r2 = decimalFormat.format(q.getRoot2(a,b,c));
            System.out.println("The roots are "+ r1 +" and"+ r2);
        } else if (q.getDiscriminant(a,b,c) == 0) {
            r1 = decimalFormat.format(q.getRoot1(a,b,c));
            System.out.println("The roots is "+ r1 );
        }else{
            System.out.println("The equation has no real roots");
        }
        scanner.close();//关闭键盘输入

    }

}

运行结果:

Enter a, b, c: 1.0 3 1
The roots are -0.381966 and-2.618034

进程已结束,退出代码0
Enter a, b, c: 1 2.0 1
The roots is -1

进程已结束,退出代码0
Enter a, b, c: 1 2 3
The equation has no real roots

进程已结束,退出代码0
Enter a, b, c: 1 -7 6
The roots are 6 and1

进程已结束,退出代码0

题目2

设计一个名为Person的类和它的两个名为Student学生子类和Employee雇员子类。雇员Employee类又有子类:教员类Faculty和职员类Staff。

其中:

  • 学生有班级状态(大一、大二、大三、大四、研一、研二…),将其定义为常量。
  • 一个雇员有办公室、工资和受聘日期等信息。
  • 教员有办公时间和级别,职员有职务称号。
  • 每个人都有姓名、地址、电话号码和电子邮件地址
  • 定义一个名为MyDate的类,包含数据域year(年)、month (月)和day (日) ,用于显示上述类中出现的日期数据域。在类中定义一个getDate方法, 用于展示年、月、日信息,展示格式为:xxxx-xx-xx;
  • 覆盖每个类中的toString方法,显示相应的类中的所有信息,比如学生类,需要将其姓名、地址、电话号码、电子邮件地址、班级信息显示出来。

实现这些类。编写一个测试程序,创建Person、Student、Employee、Faculty和Staff,并且调用它们的toString()方法。

答题区:

源码:

package com.oop.test2;

public class Person {
    private String name;
    private String address;
    private String phoneNumber;
    private String email;
    //无参构造
    public Person() {
    }

    //有参构造
    public Person(String name, String address, String phoneNumber, String email) {
        this.name = name;
        this.address = address;
        this.phoneNumber = phoneNumber;
        this.email = email;
    }
    //父类方法
    public String toString() {
        return "Name: " + name +
                "\nAddress: " + address +
                "\nPhone Number: " + phoneNumber +
                "\nEmail: " + email;
    }

}
package com.oop.test2;

public class Student extends Person{
    //定义班级常量
    private final String classStatus;
    //构造器
    public Student(String name, String address, String phoneNumber, String email, String classStatus) {
        super(name, address, phoneNumber, email);
        this.classStatus = classStatus;
    }
    //重写父类Person的方法
    @Override
    public String toString() {
        return super.toString()+
                "\nClass Status: " + classStatus;
    }
}

package com.oop.test2;

public class Employee extends Person{
    private String office;
    private double salary;
    private MyDate hireDate;
    //构造器
    public Employee(String name, String address, String phoneNumber, String email, String office, double salary, MyDate hireDate) {
        super(name, address, phoneNumber, email);
        this.office = office;
        this.salary = salary;
        this.hireDate = hireDate;
    }
    //重写父类Person的方法
    @Override
    public String toString() {
        return super.toString() +
                "\nOffice: " + office +
                "\nSalary: " + salary +
                "\nHire Date: " + hireDate.getDate();
    }
}
package com.oop.test2;

public class Faculty extends Employee{
    private String officeHours;
    private String rank;
    //构造器
    public Faculty(String name, String address, String phoneNumber, String email, String office, double salary, MyDate hireDate, String officeHours, String rank) {
        super(name, address, phoneNumber, email, office, salary, hireDate);
        this.officeHours = officeHours;
        this.rank = rank;
    }
    //重写父类Employee的方法
    @Override
    public String toString() {
        return super.toString() +
                "\nOffice Hours: " + officeHours +
                "\nRank: " + rank;
    }

}
package com.oop.test2;

public class Staff extends Employee{
    private String post;
    //构造器
    public Staff(String name, String address, String phoneNumber, String email, String office, double salary, MyDate hireDate, String post) {
        super(name, address, phoneNumber, email, office, salary, hireDate);
        this.post = post;
    }
    //重写父类Employee的方法
    @Override
    public String toString() {
        return super.toString() +
                "\nPost: " + post;
    }
}

package com.oop.test2;

public class MyDate {
    private int year;
    private int month;
    private int day;
    //构造器,初始化入职时间
    public MyDate(int year, int month, int day) {
            this.year = year;
            this.month = month;
            this.day = day;
        }
     
     public String getDate() {
         return year + "-" + month + "-" + day;
        }
}

package com.oop.test2;

public class Application2 {
    public static void main(String[] args) {
        // 创建一个Person对象并调用toString方法
        Person person = new Person("张三", "安徽省合肥市庐阳区", "13333765589", "[email protected]");
        System.out.println(person.toString());

        // 创建一个Student对象并调用toString方法
        Student student = new Student("李四", "河南省信阳市商城县", "16678945637", "[email protected]", "大三");
        System.out.println("====================================");
        System.out.println(student.toString());

        // 创建一个Employee对象并调用toString方法
        MyDate hireDate1 = new MyDate(2020, 5, 10);
        Employee employee = new Employee("王五", "安徽省淮南市xxx县", "15567345908", "[email protected]", "格物楼305", 50000, hireDate1);
        System.out.println("====================================");
        System.out.println(employee.toString());

        // 创建一个Faculty对象并调用toString方法
        MyDate hireDate2 = new MyDate(2010, 5, 20);
        Faculty faculty = new Faculty("柳六", "安徽省合肥市包河区屯溪路193号合肥工业大学", "17735830987", "[email protected]", "机械楼503", 60000, hireDate2, "9 AM - 5 PM", "Professor");
        System.out.println("====================================");
        System.out.println(faculty.toString());

        // 创建一个Staff对象并调用toString方法
        MyDate hireDate3 = new MyDate(2019, 6, 04);
        Staff staff = new Staff("戚琪", "安徽省合肥市蜀山区丹霞路485号合肥工业大学(翡翠湖校区)", "13809762850", "[email protected]", "综合楼308", 40000, hireDate3, "teacher");
        System.out.println("====================================");
        System.out.println(staff.toString());

    }
}

运行结果:

Name: 张三
Address: 安徽省合肥市庐阳区
Phone Number: 13333765589
Email: [email protected]
====================================
Name: 李四
Address: 河南省信阳市商城县
Phone Number: 16678945637
Email: [email protected]
Class Status: 大三
====================================
Name: 王五
Address: 安徽省淮南市xxx县
Phone Number: 15567345908
Email: [email protected]
Office: 格物楼305
Salary: 50000.0
Hire Date: 2020-5-10
====================================
Name: 柳六
Address: 安徽省合肥市包河区屯溪路193号合肥工业大学
Phone Number: 17735830987
Email: [email protected]
Office: 机械楼503
Salary: 60000.0
Hire Date: 2010-5-20
Office Hours: 9 AM - 5 PM
Rank: Professor
====================================
Name: 戚琪
Address: 安徽省合肥市蜀山区丹霞路485号合肥工业大学(翡翠湖校区)
Phone Number: 13809762850
Email: [email protected]
Office: 综合楼308
Salary: 40000.0
Hire Date: 2019-6-4
Post: teacher

进程已结束,退出代码0

题目3

public class Test {
    public static void main(String[] args) {
        Object fruit = new Fruit();
        Object apple = (Apple)fruit;
    }
}
class Fruit {}
class Apple extends Fruit {}

上述代码的错误是什么?

答题区:

错误:

public class test3 {

        public static void main(String[] args) {
            Object fruit = new Fruit();//声明了一个 Object 类型的的变量 fruit, fruit 实际类型为Fruit
            Object apple = (Apple)fruit;/*父转子的强转换,只有在实际对象的类型确实是子类类型时才会成功,
                                          否则将引发ClassCastException异常。
                                          这里的fruit的实际类型并非Apple,所以会报错*/
        }
        
}

修改后:

public class Test {
    public static void main(String[] args) {
        Fruit fruit = new Apple();//声明了一个Fruit类型的的变量 fruit, fruit 实际类型为Apple
        Apple apple = (Apple) fruit;//fruit的实际类型为Apple,所以可就行向下的强制转换
    }
}
class Fruit {}
class Apple extends Fruit {}

题目4

创建名为Circle的类,包含私有数据域r(半径),包含一个参数为r的构造方法,包含公共方法getArea()用于获取其面积,重写toString方法,要求能够显示该圆的信息;创建名为ComparableCircle的类,它扩展Circle类并实现Comparable接口。实现compareTo方法,使其根据面积比较两个圆。编写一个测试程序求出ComparableCircle对象的两个实例中的较大者。

提示:圆周率πMath.PI

答题区:

源码:

package com.oop.test4;

import static java.lang.Math.PI;

public class Circle {
    private double r;
    //无参构造
    public Circle() {
    }
    //参数为r的有参构造
    public Circle(double r) {
        this.r = r;
    }
    //用于获取半径
    public double getR() {
        return r;
    }

    //计算面积
    public double getArea(double r){
        return r * r * PI;
    }
    public String toString(){
        return "圆的半径r=: " + r +
                "\n圆的面积S:" + getArea(r) + "\n";
    }
}
package com.oop.test4;

public interface Comparable {
   void compareTo(double r1, double r2);
}
package com.oop.test4;


public class ComparableCircle extends Circle implements Comparable {
    public ComparableCircle() {
    }
    public ComparableCircle(double r) {
        super(r);
    }

    @Override
    public void compareTo(double r1, double r2) {

        if (getArea(r1) > getArea(r2)){
            System.out.println("半径为:" + r1 + "的圆面积更大");
        }
        else if (getArea(r1) < getArea(r2)){
            System.out.println("半径为:" + r2 + "的圆面积更大");
        }
        else{
            System.out.println("两个圆的面积相同");
        }

    }
}
package com.oop.test4;

import java.util.Scanner;

public class Application4 {
    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);

        System.out.print("请分别输入两个圆的半径: ");

        double r1 = scanner.nextDouble();
        double r2 = scanner.nextDouble();

        // 创建一个ComparableCircle对象并调用toString方法
        ComparableCircle comparableCircle1 = new ComparableCircle(r1);
        System.out.print(comparableCircle1.toString());
        System.out.println("--------------------------");

        // 创建一个ComparableCircle2对象并调用toString方法
        ComparableCircle comparableCircle2 = new ComparableCircle(r2);
        System.out.print(comparableCircle2.toString());
        System.out.println("--------------------------");

        Comparable comparable = new ComparableCircle();
        comparable.compareTo(comparableCircle1.getR(),comparableCircle2.getR());

        scanner.close();
        
    }
}

运行结果:

请分别输入两个圆的半径: 5 3.4
圆的半径r=: 5.0
圆的面积S:78.53981633974483
--------------------------
圆的半径r=: 3.4
圆的面积S:36.316811075498
--------------------------
半径为:5.0的圆面积更大

进程已结束,退出代码0
请分别输入两个圆的半径: 6 9.2
圆的半径r=: 6.0
圆的面积S:113.09733552923255
--------------------------
圆的半径r=: 9.2
圆的面积S:265.90440219984004
--------------------------
半径为:9.2的圆面积更大

进程已结束,退出代码0
请分别输入两个圆的半径: 9 9
圆的半径r=: 9.0
圆的面积S:254.46900494077323
--------------------------
圆的半径r=: 9.0
圆的面积S:254.46900494077323
--------------------------
两个圆的面积相同

进程已结束,退出代码0

标签:Java,String,double,练习,day07,System,toString,com,public
From: https://www.cnblogs.com/lanrou/p/17568458.html

相关文章

  • Java使用snmp协议采集服务器信息
    Java使用snmp协议采集服务器信息  一.snmp简介 SNMP是专门设计用于在IP网络管理网络节点(服务器、工作站、路由器、交换机及Hubs等)的一种标准协议,它是一种应用层协议。SNMP使网络管理员能够管理网络效能,发现并解决网络问题以及规划网络增长。通过SNMP接收随机消息(及......
  • 230720 做题记录 // 费用流练习
    A.订货http://222.180.160.110:1024/contest/3820/problem/1这个带继承关系的模型很熟悉,想到了猪那一题。所以我们试着仿照这个方式来建图。题目提到了单位费用,这简直就是直接把边的费用拍你脸上嘲讽。我们拉一个大源点,朝每个月连一条容量为无穷大、费用为购买单位费用的边......
  • java rmi上传下载512字节OutputStream
    /*JADXINFO:Accessmodifierschangedfrom:protected*/publicfinalvoiddownloadFile(Parameterparameter,OutputStreamout)throwsXException{if(!this.session.isEffective()){thrownewXException(10000000,"连接会话无效&......
  • [Javascript] [] is ArrayList
    Runthefollowingcode,foundthatfor get&push&pop,itisO(1)time;Butfor shift/unshfit,itisO(n)time.Inthiscases,Javascript's[],isaArrayList,everytimeyoudoshiftorunshiftitneedtomovetherestofitemsbyoneoffw......
  • JAVA小白找工作必备建议
    如果您是一名刚入门的JAVA小白,正在寻求工作机会,那么恭喜您来对地方!本文将为您提供一些建议,帮助您在求职过程中更好地展现自己的优势和准备迎接新的挑战。1.基础知识打牢在找工作前,务必确保您对JAVA编程语言的基础知识有很好的掌握。熟悉面向对象编程(OOP)、数据结构和算法,是成为一......
  • 【Java面试题】Spring是如何解决循环依赖问题?
    ......
  • 【项目实战】Java 开发 Kafka 生产者
    ......
  • 【项目实战】Java 开发 Kafka 消费者
    ......
  • java 多线程
    多线程1.进程与线程线程和进程计算机中的两个重要概念,用于管理和执行程序的执行单元1.1进程进程是资源分配的最小单位,通过进程可以创程序的应用。进程是操作系统的一个执行实例,代表了正在运行的程序的一个实例,其有自己的独立的内存空间,包代码、数据、和堆栈等。进程......
  • 直播开发app,Java修改图片大小尺寸图片缩放
    直播开发app,Java修改图片大小尺寸图片缩放Thumbnailator是Java的开源图像大小调整库,它使用渐进式双线性缩放。它支持JPG,BMP,JPEG,WBMP,PNG和GIF。 通过将以下Maven依赖项添加到我们的pom.xml中,将其包括在我们的项目中: <dependency>  <groupId>net.coobird</groupId>  ......