恒定橡果的java习题六

1.三角形类和私有构造方法

【问题描述】

定义一个三角形类Triangle,其成员变量为私有的double类型的a、b、c,分别表示三角形的三条边。提供一个私有的构造方法,带三个参数,以创建指定三条边长的Triangle对象;提供perimeter()和area()方法分别用来求三角形的周长和面积;提供一些方法可以供使用者获取三角形的边长;还提供一个带三个参数a、b、c的方法getInstance(),如果参数是合法的三角形边长,则创建一个Triangle对象,并返回其引用,若三个参数不能构成三角形,则返回空引用null。

定义一个演示类Main,其中重复读入三个实数,并以此为参数去调用Triangle的getInstance()方法,若成功创建了Triangle对象,则输出其三条边长、周长和面积,否则输出“不能构成三角形”,上述过程重复到输入的第一个数为0或负数为止。输出格式参照样例输出,小数部分保留2位。

【输入形式】若干个三角形三条边
【输出形式】三角形的三边、周长和面积
【样例输入】

2 3 4
1 2 4
0 0 0

【样例输出】

Sides of triangle:2.00,3.00,4.00;perimeter:9.00;area:2.90
Triangle can't be build
public class main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        while (true) {
            double x = scanner.nextDouble();
            if (x <= 0) {
                break;
            }

            double y = scanner.nextDouble();

            double z = scanner.nextDouble();

            Triangle triangle = Triangle.getInstance(x, y, z);
            if (triangle != null) {
                System.out.printf("Sides of triangle:%.0f,%.2f,%.2f;perimeter:%.2f;area:%.2f%n", triangle.getA(), triangle.getB(), triangle.getC(), triangle.perimeter(), triangle.area());
            } else {
                System.out.println("Triangle can't be build");
            }
        }
    }
}
class Triangle {
    private double a;
    private double b;
    private double c;

    private Triangle(double a, double b, double c) {
        this.a = a;
        this.b = b;
        this.c = c;
    }

    private static boolean isValidTriangle(double a, double b, double c) {
        return a + b > c && a + c > b && b + c > a;
    }

    public static Triangle getInstance(double a, double b, double c) {
        if (isValidTriangle(a, b, c)) {
            return new Triangle(a, b, c);
        }else
        return null;
    }

    public double perimeter() {
        return a + b + c;
    }

    public double area() {
        double ar;
        ar = perimeter()/2.0;
        return Math.sqrt(ar * (ar - a) * (ar - b) * (ar - c));
    }

    public double getA() {
        return a;
    }

    public double getB() {
        return b;
    }

    public double getC() {
        return c;
    }
}

根据题目的具体要求创建类,然后调用。先判断输入数值是否为正数,然后判断两边之和大于第三边,最后计算输出。

2.小猫钓鱼

【问题描述】编写程序模拟小猫钓鱼的故事,编写池塘类和猫类,池塘开始的时候有1000条鱼猫妈妈钓鱼的速度是10条每小时,

小猫钓鱼的速度是5条每小时,小猫在第一和第二个小时因为开小差抓蝴蝶和蜻蜓,没有钓到一条鱼,请创建DiaoYu类,模拟故事并在输入钓鱼时间后给出钓鱼的结果,包括池塘里鱼的数量,猫妈妈钓到多少条鱼,小猫钓到多少条鱼。

【输入形式】输入小时数
【输出形式】输出池塘中鱼的数量和猫妈妈小猫钓到的鱼,如果输入错误则输出error input

【样例输入】

1.5
【样例输出】

there are 985 fishes in pond

mama has 15 fishes

kitty has 0 fish

【样例说明】输入小时数可以为小数,但不能为负数,鱼的数量为整数(取整数部分)

public class main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        double x =scanner.nextDouble();
        if(x<0){
            System.out.print("error input");
            return;
        }
        System.out.printf("there are %.0f fishes in pond \n",Pond.pond(x));
        System.out.printf("mama has %.0f fishes \n",Cat.catMother(x));
        if(x<=2){
            System.out.printf("kitty has 0 fish");
        }else {
            System.out.printf("kitty has %.0f fishes",Cat.catdaughter(x));
        }
    }
}
class Pond{
    private static int f= 1000;
    public static double pond(double t) {
        if(t<=2){
            return f-t*10;
        }else{
            return f-t*15+10;
    }}//池塘剩余的鱼
}
class Cat{
    public static double catMother(double t){
        return  t*10;
    }//小猫妈妈的鱼
    public static double catdaughter(double t){
            return (t-2)*5;
    }//小猫女儿的鱼
}

分为两种情况大于2小时和小于两小时,小于两小时只需要计算猫妈妈钓鱼数量,池塘的鱼为原本数量减去猫妈妈钓鱼数量,大于两小时猫女儿也要计算。

3.学生数组

【问题描述】定义一个学生类Student,其中包括4个成员变量:姓名name,年龄age,性别isMale,成绩score;一个带4个参数的构造方法用来创建学生对象,一个实例方法show()用来将学生的姓名、年龄、性别和成绩独立地显示在一个行中(每个信息之间用英文状态的逗号隔开,输完成绩后要求换行,输出样例:李明,15岁,女,100 分)。再定义一个演示类Test,在其中输入10个学生的信息,并将创建的学生对象保存到数组stu中,然后遍历数组,找到成绩最高和最低的学生,调用show方法将他们的信息显示出来。

【输入形式】10个学生的姓名、年龄、性别和成绩

【输出形式】成绩最高和最低的学生信息(如有并列的,只输出下标较小的那个学生的信息),注意:其中冒号,逗号为英文状态

【样例输入】

FANG  15  false   98   
LEE    14  true    84    
WANG    15  true    90   
SUN  15  false   86   
QIAN  16  false   76    
LI  15  false   100   
GU  14  true    86.5    
XU  15  true    60   
LIANG  15  true    99    
AN  14  true    80

【样例输出】

MAX:LI,15,FEMALE,100.0
MIN:XU,15,MALE,60.0
public class zuoye6_3 {
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        Student[] stu = new Student[10];
        for(int x=0;x< stu.length;x++){
            String name;
            int age;
            boolean isMale;
            double score;
            name = scanner.next();
            age = scanner.nextInt();
            isMale = scanner.nextBoolean();
            score = scanner.nextDouble();
            stu[x]=new Student(name,age,isMale,score);
        }

        double maxScore = Double.MIN_VALUE;
        int maxIndex = 0;
        double minScore = Double.MAX_VALUE;
        int minIndex = 0;

        for (int i = 0; i < stu.length; i++) {
            if (stu[i].score > maxScore) {
                maxScore = stu[i].score;
                maxIndex = i;
            }
            if (stu[i].score < minScore) {
                minScore = stu[i].score;
                minIndex = i;
            }
        }
        System.out.println();
        stu[maxIndex].showMax(maxIndex+1);
        System.out.println();
        stu[minIndex].showMin(minIndex+1);

    }
}

class Student{
    String name;
    int age;
    boolean isMale;
    double score;
    public Studenttt(String n,int a,boolean i,double s){
        this.name=n;
        this.age=a;
        this.isMale=i;
        this.score=s;
    }

    void showMax(int i){
        String is = this.isMale ? "MALE" : "FEMALE";
        System.out.printf("MAX:%s,%d,%s,%.1f",this.name,this.age,is,this.score);
    }
    void showMin(int i){
        String is = this.isMale ? "MALE" : "FEMALE";
        System.out.printf("MIN:%s,%d,%s,%.1f",this.name,this.age,is,this.score);
    }

因为只要筛选最大最小,不用排序,所以只要把最大最小值单独取出来即可

  • 15
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值