為某研究所編寫一個通用程序,用來計算每一種交通工具運行1000公裡所需的時間,已知每種交通工具的參數都是3個整數A、B、C的表達式。現有兩種工具:Car和Plane,其中Car的速度運算公式為:A*B/C,Plane的速度運算公式為:A+B+C。需要編寫三類:ComputeTime.java,Plane.java,Car007.java和接口Common.java,要求在未來如果增加第3種交通工具的時候,不必修改以前的任何程序,只需要編寫新的交通工具的程序。其運行過程如下,從命令行輸入ComputeTime的四個參數,第一個是交通工具的類型,第二、三、四個參數分別時整數A、B、C,舉例如下:
計算Plane的時間:"java ComputeTime Plane 20 30 40"
計算Car007的時間:"java ComputeTime Car007 23 34 45"
如果第3種交通工具為Ship,則只需要編寫Ship.java,運行時輸入:"java ComputeTime Ship 22 33 44"
提示:充分利用接口的概念,接口對象充當參數。
實例化一個對象的另外一種辦法:Class.forName(str).newInstance();例如需要實例化一個Plane對象的話,則只要調用Class.forName("Plane").newInstance()便可。
解答代碼:
訪到classpath路徑下即可,請從下往上編譯
目錄結構
CalTime
--------|--------
| |
| |
vehicle ComputTime.java
|
---------
| |
| |
all Palne.java/Car.java
|
|
Common.java
代碼如下:
1.ComputTime.java請確保輸入正確,其中沒有捕捉NumberFromatException
import CalTime.vehicle.all.Common;
import java.lang.*;
public class ComputeTime {
public static void main(String args[]) {
System.out.println("交通工具: "+args[0]);
System.out.println(" 參數A: "+args[1]);
System.out.println(" 參數B: "+args[2]);
System.out.println(" 參數C: "+args[3]);
double A=Double.parseDouble(args[1]);
double B=Double.parseDouble(args[2]);
double C=Double.parseDouble(args[3]);
double v,t;
try {
Common d=(Common) Class.forName("CalTime.vehicle."+args[0]).newInstance();
v=d.runTimer(A,B,C);
t=1000/v;
System.out.println("平均速度: "+v+" km/h");
System.out.println("運行時間:"+t+" 小時");
} catch(Exception e) {
System.out.println("class not found");
}
}
}
2.Plane.java
package CalTime.vehicle;
import CalTime.vehicle.all.Common;
public class Plane implements Common {
public double runTimer(double a, double b, double c) {
return (a+ b + c);
}
}
3.Car.java
package CalTime.vehicle;
import CalTime.vehicle.all.Common;
public class Car implements Common {
public double runTimer(double a, double b, double c) {
return ( a*b/c );
}
}
4.Common.java
package CalTime.vehicle.all;
public interface Common {
double runTimer(double a, double b, double c);
}
演示了接口的經典使用方法。嗬嗬,只有意會,不可言傳。ThinkinginJava對此也做出了深刻的分析,可以查看下。
注*源自清華大學JAVA課件