JAVA第四次实验

实验四 接口与实现
班级: 姓名: 学号:
一、实验目的
1、掌握接口的定义;
2、掌握类怎么实现接口;
3、掌握接口回调技术;
4、掌握面向接口的编程思想;
二、实验内容
1、计算平均分:体操比赛计算选手成绩的办法是去掉一个最高分和最低分后再计算平均分,而学校考查一个班级的某科目的考试情况时是计算全班同学的平均成绩。Gymnastics类和School类都实现了ComputerAverage接口,但实现的方式不同。
设计代码:
运行结果:
2、货车装载量:货车要装载一批货物,货物由电视机、计算机和洗衣机3种商品组成。卡车需要计算整批货物的质量,具体需求如下。
(1)要求有一个ComputerWeight接口,该接口中有一个方法:
public double computerWeight();
(2)要求有3个实现该接口的类,即Television、Computer和WashMachine。这3个通过实现接口ComputerWeight给出自重;
(3)要求有一个Truck类,该类以ComputerWeight接口类型的数组作为成员(Truck面向接口),那么该数组的单元就可以存放Television对象的引用、Computer对象的引用可WashMachine对象的引用。程序能输出Truck对象所装载的货物的总质量。
(4)编写主类,在主类中测试Truck所装载的货物的总质量。
设计代码:
运行结果:
3、小狗在不同环境条件下可能呈现不同的状态表现,要求用接口封装小狗的状态,具体要
求如下:
(1)编写一个接口DogState,该接口有一个名字为void showState()的方法。
(2)编写Dog类,该类中有一个DogState接口声明的变量state。另外,该类有一个show()方法,在该方法中让接口state回调showState()方法。
(3)编写若干个实现DogState接口的类,负责刻画狗的各种状态;比如:在主人面前,听主人的命令;狗遇敌人,狂叫,并冲上去狠咬敌人;遇到朋友,晃动尾巴,热烈欢迎等等,可以发挥自己的想象力;
(4)编写主类,在主类中测试小狗的各种状态。
设计代码:
运行结果:

三、实验总结与分析

1、

package Average;

import java.util.Scanner;

public class Main {
    public static void main(String[] args) {
        System.out.println("请输入体操成绩: (用英文逗号隔开每个成绩)\n");
        Gymnastics gymnastics = new Gymnastics();
        Scanner s = new Scanner(System.in);
        String inputStr = s.nextLine();
        String[] strArray = inputStr.split(",");
        double[] GymnasticsNum = new double[strArray.length];
        for(int i = 0 ; i < GymnasticsNum.length ; i++){
            GymnasticsNum[i] = Double.parseDouble(strArray[i]);
        }
        System.out.println(gymnastics.CalcGradeVal(GymnasticsNum));

        System.out.println("请输入全班的成绩: (用英文逗号隔开每个成绩)\n");
        School school = new School();
        Scanner input = new Scanner(System.in);
        String inputSTR = input.nextLine();
        String[] strArrayVal = inputSTR.split(",");
        double[] schoolNum = new double[strArrayVal.length];
        for(int j = 0 ; j < schoolNum.length ; j++){
            schoolNum[j] = Double.parseDouble(strArrayVal[j]);
        }
        System.out.println(school.CalcGradeVal(schoolNum));


    }
}

package Average;

public interface ComputerAverage {
        double grade = 0;
        public double CalcGradeVal(double[] grade);
}

package Average;

public class Gymnastics implements ComputerAverage{
    @Override
    public double CalcGradeVal(double[] grade) {
        int i;
        int j;
        double temp;
        double sum = 0;
        //将成绩排序
        for(i = 0;i < grade.length - 1;i++)
        {
            for(j = 0;j < grade.length - i - 1;j++)
            {
                if(grade[j] < grade[j + 1])
                {
                    temp = grade[j];
                    grade[j] = grade[j + 1];
                    grade[j + 1] = temp;
                }
            }
        }
        //不计算第一个和最后一个
        for(int n = 1; n < grade.length - 1; n++)
        {
            sum += grade[n];
        }
        return sum / (grade.length- 2) ;
    }
}

package Average;

public class School implements ComputerAverage{

    @Override
    public double CalcGradeVal(double[] grade) {
        double sum = 0.0;
        for(int n = 0; n < grade.length; n++)
        {
            sum += grade[n];
        }
        System.out.println(sum);
        return sum / grade.length ;
    }

}

2、

package Trucks;
import java.util.Random;
public class Main {
    public static void main(String args[]){
        ComputerWeight[] goods =new ComputerWeight[650]; //650件货物
        for(int i=0;i<goods.length;i++){                   //电视、电脑、洗衣机轮流放进卡车里
            if(i%3==0)
                goods[i]=new Television();
            else if(i%3==1)
                goods[i]=new Computer();
            else if(i%3==2)
                goods[i]=new WashMachine();
        }
        Truck truck=new Truck(goods);
        System.out.printf("\n货车装载的货物重量:%-8.5f kg\n",truck.getTotalWeights());
        goods=new ComputerWeight[68]; //68件货物
        for(int i=0;i<goods.length;i++){                //
            if(i%2==0)
                goods[i]=new Television();
            else
                goods[i]=new WashMachine();
        }
        truck.setGoods(goods);
        System.out.printf("货车装载的货物重量:%-8.5f kg\n",truck.getTotalWeights());

    }

}

package Trucks;

public interface ComputerWeight {
    public double computerWeight();

}

package Trucks;

public class Truck {
    ComputerWeight[] goods;      //ComputerWeight接口类型的数组
    double totalWeights=0;

    Truck(ComputerWeight[] goods){
        this.goods=goods;
    }
    public void setGoods(ComputerWeight[] goods){
        this.goods=goods;
    }
    public double getTotalWeights(){
        totalWeights=0;
        //[代码4]计算totalWeights
        for(int i=0;i<goods.length;i++){
            totalWeights += goods[i].computerWeight();
        }
        return totalWeights;
    }
}
package Trucks;

public class Computer implements ComputerWeight{
    @Override
    public double computerWeight() {
        return 1;
    }
}

package Trucks;

public class Television implements ComputerWeight{
    @Override
    public double computerWeight() {
        return 2;
    }
}

package Trucks;

public class WashMachine implements ComputerWeight{
    @Override
    public double computerWeight() {
        return 5;
    }
}

3、

package DogShow;

public class Main {
    public static void main(String[] args) {
        Dog yellowDog = new Dog();
        System.out.println("狗在主人面前:");
        yellowDog.setState(new MeetFriendState());
        yellowDog.show();
        System.out.println("狗遇到敌人:");
        yellowDog.setState(new MeetEnemyState());
        yellowDog.show();
        System.out.println("狗遇到朋友:");
        yellowDog.setState(new MeetFriendState());
        yellowDog.show();
        System.out.println("狗饿了:");
        yellowDog.setState(new EatFood());
        yellowDog.show();

    }
}
package DogShow;

public interface DogState {
    public void showState();
}

package DogShow;

public class Dog {
    DogState state;
    public void show()
    {
        state.showState();
    }
    public void setState(DogState state)
    {
        this.state = state;
    }
}
package DogShow;

public class MeetEnemyState implements DogState{
    @Override
    public void showState() {
        System.out.println("狗遇敌人,狂叫,并冲上去狠咬敌人");
    }
}

package DogShow;

public class MeetFriendState implements DogState{

    @Override
    public void showState() {
        System.out.println("遇到朋友,晃动尾巴,热烈欢迎");
    }
}

package DogShow;

public class SoftlyState implements DogState{
    @Override
    public void showState() {
        System.out.println("在主人面前,听主人的命令!");
    }
}

package DogShow;

public class EatFood implements DogState{
    @Override
    public void showState() {
        System.out.println("饿了,吃饭饭^-^,汪汪");
    }
}

  • 2
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
实验目的:掌握Java数组的定义、初始化、遍历、排序等基本操作。 实验内容: 1.定义一个长度为10的一维字符串数组,并初始化其中的元素。 2.使用for循环遍历数组中的元素,并输出每个元素的值。 3.定义一个长度为5的二维整型数组,并初始化其中的元素。 4.使用for循环遍历二维数组中的元素,并输出每个元素的值。 5.对一维数组进行升序排序,并输出排序后的结果。 6.对二维数组按照每行第二个元素进行升序排序,并输出排序后的结果。 实验步骤: 1.定义一个长度为10的一维字符串数组,并初始化其中的元素。 ``` String[] strArr = {"apple", "banana", "orange", "pear", "grape", "watermelon", "pineapple", "mango", "kiwi", "peach"}; ``` 2.使用for循环遍历数组中的元素,并输出每个元素的值。 ``` for(int i = 0; i < strArr.length; i++){ System.out.println("第" + (i+1) + "个元素是:" + strArr[i]); } ``` 3.定义一个长度为5的二维整型数组,并初始化其中的元素。 ``` int[][] intArr = {{1,2,3},{4,5,6},{7,8,9},{10,11,12},{13,14,15}}; ``` 4.使用for循环遍历二维数组中的元素,并输出每个元素的值。 ``` for(int i = 0; i < intArr.length; i++){ for(int j = 0; j < intArr[i].length; j++){ System.out.println("第" + (i+1) + "行第" + (j+1) + "列的元素是:" + intArr[i][j]); } } ``` 5.对一维数组进行升序排序,并输出排序后的结果。 ``` Arrays.sort(strArr); for(int i = 0; i < strArr.length; i++){ System.out.println("第" + (i+1) + "个元素是:" + strArr[i]); } ``` 6.对二维数组按照每行第二个元素进行升序排序,并输出排序后的结果。 ``` Arrays.sort(intArr, new Comparator<int[]>() { @Override public int compare(int[] o1, int[] o2) { return o1[1] - o2[1]; } }); for(int i = 0; i < intArr.length; i++){ for(int j = 0; j < intArr[i].length; j++){ System.out.println("第" + (i+1) + "行第" + (j+1) + "列的元素是:" + intArr[i][j]); } } ``` 实验结果: 第1个元素是:apple 第2个元素是:banana 第3个元素是:orange 第4个元素是:pear 第5个元素是:grape 第6个元素是:watermelon 第7个元素是:pineapple 第8个元素是:mango 第9个元素是:kiwi 第10个元素是:peach 第1行第1列的元素是:1 第1行第2列的元素是:2 第1行第3列的元素是:3 第2行第1列的元素是:4 第2行第2列的元素是:5 第2行第3列的元素是:6 第3行第1列的元素是:7 第3行第2列的元素是:8 第3行第3列的元素是:9 第4行第1列的元素是:10 第4行第2列的元素是:11 第4行第3列的元素是:12 第5行第1列的元素是:13 第5行第2列的元素是:14 第5行第3列的元素是:15 第1个元素是:apple 第2个元素是:banana 第3个元素是:grape 第4个元素是:kiwi 第5个元素是:mango 第6个元素是:orange 第7个元素是:peach 第8个元素是:pineapple 第9个元素是:pear 第10个元素是:watermelon 第1行第1列的元素是:1 第1行第2列的元素是:2 第1行第3列的元素是:3 第2行第1列的元素是:7 第2行第2列的元素是:8 第2行第3列的元素是:9 第3行第1列的元素是:4 第3行第2列的元素是:5 第3行第3列的元素是:6 第4行第1列的元素是:10 第4行第2列的元素是:11 第4行第3列的元素是:12 第5行第1列的元素是:13 第5行第2列的元素是:14 第5行第3列的元素是:15

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

特辣番茄炒鸡蛋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值