日期:2014-05-20  浏览次数:20843 次

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 air
Transport 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();}
    }
}