问题如下:
1.  一个运输公司从网上得到订单,订单上标有货物重量和运输里程,该公司可以使用三种运输工具:卡车,火车,飞机。编写运输接口,声明三个接口常量,表示运输工具,声明一个计算费用的方法,参数是重量和里程
2.  卡车,火车,飞机分别实现作业1的运输接口,计算运费的方法如下:
      卡车:运费=重量*距离*120。当距离大于1000(km)或重量大于60(t)的时候拒载,返回-1
      火车:当距离在900(km)内(包含)时,运费=重量*距离*250,大于900(km)运费=重量*距离*300
      飞机:当距离大于500(km)时,运费=重量*距离*750,否则拒载,返回-1
3.  提示:
     在接口中定义常量和运输方法
     分别定义三种不同的实现类来实现计算运输费用的方法我现在能做到的是: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("太重了,拒载");
}
}
}接口:public interface method 
{
public void truck();public void train();public void air();
}
我想做的是,从控制台输入的文本来确定和选择运输方式,如何解决?

解决方案 »

  1.   


    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();
    }随手写的代码,只是个思路。lz需要根据具体的业务场景设计。
     
      

  2.   

    他们说,用接口是步骤:1抽象出Java接口,2定义实现接口的实现类,3使用Java接口。
    我想知道第三部,怎么解决。
      

  3.   

    for example
    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();}
        }
    }
      

  4.   

    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); }
    }
      

  5.   

    感谢三位,问题已经解决了,就是构造一个实体来实现Transport类的方法:
    public class Test { /**
     * @param args
     */
    public static void main(String[] args) {
    // TODO Auto-generated method stub
    Scanner scan = new Scanner(System.in);
    Transport tp=new Transport();
    System.out.print("请选择相应的运输方式,1:卡车,2火车,3:飞机,0:退出");
    int inputnums=scan.nextInt();
    while(inputnums<1||inputnums>3)
    {
    System.out.print("你输入的数字有误!请重新输入\r\n");
    inputnums=scan.nextInt();
    }
    switch(inputnums)
    {
    case 1:tp.truck();break;
    case 2:tp.train();break;
    case 3:tp.air();
    }
    }}