62,620
社区成员
发帖
与我相关
我的任务
分享public class BirdAndTrain{
public static void main(String[] args){
System.out.println("Times direction time distance");
fly(100,1,1);
}
/*用递归现实。
*@param distance 表示两列火车之间的距离
*@param direction 表示小鸟的飞行方向,值为1表示从002向001飞,2表示从001向002飞
*@param count 表示往返的次数。
*
*/
public static void fly(double distance,int direction,int count){
if(distance<=0) return ;
double timeTaken;
if(direction==1){
timeTaken=distance/60;
distance-=(timeTaken+0.5/3600)*20;
System.out.println("No."+count+" 2--->1 "+timeTaken+" "+distance);
if(distance<=0) return ;
fly(distance,2,count+1);
}else{
timeTaken=distance/280;
distance-=(timeTaken+0.5/3600)*20;
System.out.println("No."+count+" 1--->2 "+timeTaken+" "+distance);
if(distance<=0) return ;
fly(distance,1,count+1);
}
}
}import java.util.ArrayList;
/**
以002火车为参照物,001火车以20kpm的速度向我方前行。
小鸟以40kpm的速度向001火车飞去,
然后,停留0.5S,以280kpm的速度向我方飞回,
再停留0.5S,如此反复。
*
* 该类创建于 2009-7-19 下午08:40:28
* @version 1.0.0
* @author 9sky
*/
public class Main {
private static final int TranSpeed=20;
private static final int BirdSpeedA=40;
private static final int BirdSpeedB=280;
private static final float StayTime = 0.5f;
private static float distance=100f;
private static float birdTrace=0f;
private static float birdTime=0f;
private static int count =0;
private static ArrayList<TraceElement> trace = new ArrayList<TraceElement>();
static class TraceElement{
String direct;
float pastTime;
}
public static boolean birdStay(){
distance-=TranSpeed*StayTime;
if(distance<0)return false;
birdTime+=StayTime;
return true;
}
public static boolean fly2A(){
float t = distance/(BirdSpeedA+TranSpeed);
distance-=TranSpeed*t;
if(distance<0)return false;
birdTime+=t;
birdTrace+=BirdSpeedA*t;
TraceElement e = new TraceElement();
e.direct="to 001";e.pastTime=t;
trace.add(e);
return true;
}
public static boolean fly2B(){
float t = distance/BirdSpeedB;
float dis=distance;
distance-=TranSpeed*t;
if(distance<0)return false;
birdTime+=t;
birdTrace+=dis;
TraceElement e = new TraceElement();
e.direct="to 002";e.pastTime=t;
trace.add(e);
return true;
}
public static void trace(){
boolean flag = true;
count =0;
trace.clear();
while(flag){
flag = fly2A();
if(!flag)break;
flag = birdStay();
if(!flag)break;
flag = fly2B();
if(!flag)break;
flag = birdStay();
count++;
}
}
public static void printTrace(){
if(count==0)System.out.println("please call trace function first.");
for(TraceElement e:trace){
System.out.println(e.direct+'\t'+e.pastTime);
}
}
public static void main(String[] args) {
trace();
printTrace();
}
}