问题如下:
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();} }}