读书人

Java接口的定义解决方法

发布时间: 2012-01-01 23:10:55 作者: rapoo

Java接口的定义
问题如下:
1. 一个运输公司从网上得到订单,订单上标有货物重量和运输里程,该公司可以使用三种运输工具:卡车,火车,飞机。编写运输接口,声明三个接口常量,表示运输工具,声明一个计算费用的方法,参数是重量和里程
2. 卡车,火车,飞机分别实现作业1的运输接口,计算运费的方法如下:
卡车:运费=重量*距离*120。当距离大于1000(km)或重量大于60(t)的时候拒载,返回-1
火车:当距离在900(km)内(包含)时,运费=重量*距离*250,大于900(km)运费=重量*距离*300
飞机:当距离大于500(km)时,运费=重量*距离*750,否则拒载,返回-1
3. 提示:
在接口中定义常量和运输方法
分别定义三种不同的实现类来实现计算运输费用的方法

我现在能做到的是:

Java code
import java.util.Scanner;public class Transport implements method{    public  void truck()    {        Scanner scan = new Scanner(System.in);                System.out.println("请输入距离:");        int distance = scan.nextInt();        System.out.println("请输入重量:");        int height = scan.nextInt();                int count =height*distance*120;                if(distance>1000)        {            System.out.println("太远了,拒载");        }        else if(height>60)        {            System.out.println("太重了,拒载");        }        else        {            System.out.println("运费是:"+count);        }    }    public void train()    {        Scanner scan = new Scanner(System.in);                System.out.println("请输入距离:");        int distance = scan.nextInt();        System.out.println("请输入重量:");        int height = scan.nextInt();                if(distance <=900)        {            int count = distance*height*250;            System.out.println("运费是:"+count);        }        else        {            int count = distance*height*300;            System.out.println("运费是:"+count);        }        }    public  void air()    {        Scanner scan = new Scanner(System.in);            System.out.println("请输入距离:");        int distance = scan.nextInt();        System.out.println("请输入重量:");        int height = scan.nextInt();        if(distance<=500)        {            int count = distance*height*750;            System.out.println("运费是"+count);        }        else        {            System.out.println("太重了,拒载");        }    }}

接口:
Java code
public interface method {public void truck();public void train();public void air();}


我想做的是,从控制台输入的文本来确定和选择运输方式,如何解决?

[解决办法]
Java code
Scanner san = new Scanner(System.in);Integer transWay = san.nextInt(); //1.by truck、2.by train、3.by airTransport tr = Transport();if(transWay == 1){  tr.truck();}else if(transWay == 2){   tr.train();}else if(transWay == 3){  tr.air();}
[解决办法]
for example
Java code
interface Transport { //定义接口    int TRUCH = 0;    int TRAIN = 1;    int AIRPLANE = 2;    double cacl(double weight, double distance);}class Truck implements Transport { //实现接口    public double cacl(double weight, double distance) {        if (weight > 60 || distance > 1000) return -1;        return weight * distance * 120;    }} class Train implements Transport {    public double cacl(double weight, double distance) {        if (distance > 900) return weight * distance * 300;        return weight * distance * 250;    }}class Airplane implements Transport {    public double cacl(double weight, double distance) {        if (distance < 500) return -1;        return weight * distance * 750;    }}public class Test { //使用接口    public static void main(String[] args) {        Scanner sc = new Scanner(System.in);        while (true) {            System.out.println("please slelect transport[1:truck/2:train/3:airplane] or input [quit] to exit.");            String method = sc.nextLine();            if ("exit".equals(method)) {break;}            if (!method.matches("[1-3]")) {                System.out.println("error input, try again.");                continue();            }            System.out.println("please input weight");            String weight = sc.nextLine();            if (!weight.matches("\\d+([.]\\d+)?")) {                System.out.println("error input, try again.");                continue();            }            System.out.println("please input distance");            String distance = sc.nextLine();            if (!weight.matches("\\d+([.]\\d+)?")) {                System.out.println("error input, try again.");                continue();            }            Transport tp = getTransport(Integer.valueOf(method));            double money = tp.cacl(Double.valueOf(weight), double.valueOf(distance));            System.out.println("money=%.2f", money);        }    }    public static Transport getTransport(int transport) {        if (transport == Transport.TRUCK) {return new Truck();}        else if (transport == Transport.TRAIN) {return new Train();}        else {return new Airplane();}    }} 


[解决办法]

Java code
public interface Transport{ public double getFee(double weight, double distance);}public class Truck implements Transport { public double getFee(double weight, double distance){    double fee = -1;    // 实现业务逻辑计算费用    return; }}// 其他工具类似// 程序入口// 在程序入口中写读取用户输入的操作,不要在业务类中写这些。public class Test { public static void main(String[] args) {   // 读取用户输入重量及距离   // 读取用户输入的运输方式,根据运输方式获取具体的实现类   // 如 输入truck时, Transport transport = new Truck();   // double fee = transport.getFee(weight, distance); }} 

读书人网 >J2SE开发

热点推荐