菜鸟请教两个算法问题。灰常感谢!!! 本帖最后由 ftkj_Iverson 于 2012-02-02 14:48:38 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 a0 a1 |_________________| b0 b1 |_________________|a1和b1是大端,a0和b0是小端。先判断出谁的大端大,这里是b1大。然后b0如果小于a1,那么有交集,交集就是b0至a1,否则没交集第二题没看明白。。 import java.io.IOException;import java.util.Date;public class a45q { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { Date AStart=new Date(); AStart.setTime(77L);//第一段开始时间 Date AEnd=new Date(); AEnd.setTime(80L);//第一段结束时间 Date BStart=new Date(); BStart.setTime(9L);//第二段开始时间 Date BEnd=new Date(); BEnd.setTime(80L);//第二段结束时间 if(AStart.after(AEnd)||BStart.after(BEnd)||AStart.getTime()==AEnd.getTime()||BStart.getTime()==BEnd.getTime()) { System.out.println("输入的时间段有误"); } else if(BStart.before(AStart))//b段的开始时间位于a段的相对位置,有5种可能 { if(BEnd.before(AStart))//在b段开始时间在a段开始时间之前的情况下,b段的结束时间也有5种可能 { System.out.print("无交集"); } else if(BEnd.getTime()==AStart.getTime()) { System.out.print("无交集"); } else if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("AStart--BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("BEnd=AEnd,AStart----AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("AStart---AEnd"); } else { System.out.print("不可能走这里!");} } else if(BStart.getTime()==AStart.getTime()) { if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("AStart=BStart,AStart---BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("AStart=BStart,AEnd=BEnd,AStart---AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("AStart=BStart,AStart---AEnd"); } else { System.out.print("不可能走这里!"); } } else if(BStart.after(AStart)&&BStart.before(BEnd)) { if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("BStart----BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("AEnd=BEnd,BStart---AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("BStart---AEnd"); } else {System.out.print("不可能执行这里!");} } else if(BStart.getTime()==AEnd.getTime()) { System.out.print("BStart=AEnd,AEnd---BEnd"); } else if(BStart.after(AEnd)) { System.out.print("无交集"); } }} import java.io.IOException;import java.util.Date;public class a45q { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { Date AStart=new Date(); AStart.setTime(77L);//第一段开始时间 Date AEnd=new Date(); AEnd.setTime(80L);//第一段结束时间 Date BStart=new Date(); BStart.setTime(80L);//第二段开始时间 Date BEnd=new Date(); BEnd.setTime(83L);//第二段结束时间 if(AStart.after(AEnd)||BStart.after(BEnd)||AStart.getTime()==AEnd.getTime()||BStart.getTime()==BEnd.getTime()) { System.out.println("输入的时间段有误"); } else if(BStart.before(AStart))//b段的开始时间位于a段的相对位置,有5种可能 { if(BEnd.before(AStart))//在b段开始时间在a段开始时间之前的情况下,b段的结束时间也有5种可能 { System.out.print("无交集"); } else if(BEnd.getTime()==AStart.getTime()) { System.out.print("AStart=BStart,无交集"); } else if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("AStart--BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("BEnd=AEnd,AStart----AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("AStart---AEnd"); } else { System.out.print("不可能走这里!");} } else if(BStart.getTime()==AStart.getTime()) { if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("AStart=BStart,AStart---BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("AStart=BStart,AEnd=BEnd,AStart---AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("AStart=BStart,AStart---AEnd"); } else { System.out.print("不可能走这里!"); } } else if(BStart.after(AStart)&&BStart.before(AEnd)) { if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("BStart----BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("AEnd=BEnd,BStart---AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("BStart---AEnd"); } else {System.out.print("不可能执行这里!");} } else if(BStart.getTime()==AEnd.getTime()) { System.out.print("BStart=AEnd,AEnd---BEnd"); } else if(BStart.after(AEnd)) { System.out.print("无交集"); } }}//错误总是史料不及的,哈哈,这次我是用语句覆盖测试的 import java.io.IOException;import java.util.Date;public class a45q { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { Date AStart=new Date(); AStart.setTime(77L);//第一段开始时间 Date AEnd=new Date(); AEnd.setTime(80L);//第一段结束时间 Date BStart=new Date(); BStart.setTime(80L);//第二段开始时间 Date BEnd=new Date(); BEnd.setTime(83L);//第二段结束时间 if(AStart.after(AEnd)||BStart.after(BEnd)||AStart.getTime()==AEnd.getTime()||BStart.getTime()==BEnd.getTime()) { System.out.println("输入的时间段有误"); } else if(BStart.before(AStart))//b段的开始时间位于a段的相对位置,有5种可能 { if(BEnd.before(AStart))//在b段开始时间在a段开始时间之前的情况下,b段的结束时间也有5种可能 { System.out.print("无交集"); } else if(BEnd.getTime()==AStart.getTime()) { System.out.print("AStart=BStart,无交集"); } else if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("AStart--BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("BEnd=AEnd,AStart----AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("AStart---AEnd"); } else { System.out.print("不可能走这里!");} } else if(BStart.getTime()==AStart.getTime()) { if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("AStart=BStart,AStart---BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("AStart=BStart,AEnd=BEnd,AStart---AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("AStart=BStart,AStart---AEnd"); } else { System.out.print("不可能走这里!"); } } else if(BStart.after(AStart)&&BStart.before(AEnd))//上一个这里错了 { if(BEnd.after(AStart)&&BEnd.before(AEnd)) { System.out.print("BStart----BEnd"); } else if(BEnd.getTime()==AEnd.getTime()) { System.out.print("AEnd=BEnd,BStart---AEnd"); } else if(BEnd.after(AEnd)) { System.out.print("BStart---AEnd"); } else {System.out.print("不可能执行这里!");} } else if(BStart.getTime()==AEnd.getTime()) { System.out.print("BStart=AEnd,AEnd---BEnd"); } else if(BStart.after(AEnd)) { System.out.print("无交集"); } }}//错误总是会出现的,这次用的是语句覆盖,不会有错了 学数据库,哪些书比较好? ResultSet的问题 如何一下拿到一个类中所有常量? 怎么把鼠标点击的位置进行坐标系转换 关于event listener的问题 一道笔试题!请求帮忙! 关于JTree的用法? socket传输图片不用shutdownoutput() 请问sun的java api文档能不能下载,还是只能在线查看? 挑战java高手 关于不同Thread中判断String是否存在 时间秒数的计算的问题
|_________________| b0 b1
|_________________|a1和b1是大端,a0和b0是小端。先判断出谁的大端大,这里是b1大。
然后b0如果小于a1,那么有交集,交集就是b0至a1,否则没交集第二题没看明白。。
import java.util.Date;public class a45q { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Date AStart=new Date();
AStart.setTime(77L);//第一段开始时间
Date AEnd=new Date();
AEnd.setTime(80L);//第一段结束时间
Date BStart=new Date();
BStart.setTime(9L);//第二段开始时间
Date BEnd=new Date();
BEnd.setTime(80L);//第二段结束时间
if(AStart.after(AEnd)||BStart.after(BEnd)||AStart.getTime()==AEnd.getTime()||BStart.getTime()==BEnd.getTime())
{
System.out.println("输入的时间段有误");
}
else if(BStart.before(AStart))//b段的开始时间位于a段的相对位置,有5种可能
{
if(BEnd.before(AStart))//在b段开始时间在a段开始时间之前的情况下,b段的结束时间也有5种可能
{
System.out.print("无交集");
}
else if(BEnd.getTime()==AStart.getTime())
{
System.out.print("无交集");
}
else if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("AStart--BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("BEnd=AEnd,AStart----AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("AStart---AEnd");
}
else
{
System.out.print("不可能走这里!");}
}
else if(BStart.getTime()==AStart.getTime())
{
if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("AStart=BStart,AStart---BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("AStart=BStart,AEnd=BEnd,AStart---AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("AStart=BStart,AStart---AEnd");
}
else
{
System.out.print("不可能走这里!");
}
}
else if(BStart.after(AStart)&&BStart.before(BEnd))
{
if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("BStart----BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("AEnd=BEnd,BStart---AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("BStart---AEnd");
}
else
{System.out.print("不可能执行这里!");}
}
else if(BStart.getTime()==AEnd.getTime())
{
System.out.print("BStart=AEnd,AEnd---BEnd");
}
else if(BStart.after(AEnd))
{
System.out.print("无交集");
}
}
}
import java.util.Date;public class a45q { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Date AStart=new Date();
AStart.setTime(77L);//第一段开始时间
Date AEnd=new Date();
AEnd.setTime(80L);//第一段结束时间
Date BStart=new Date();
BStart.setTime(80L);//第二段开始时间
Date BEnd=new Date();
BEnd.setTime(83L);//第二段结束时间
if(AStart.after(AEnd)||BStart.after(BEnd)||AStart.getTime()==AEnd.getTime()||BStart.getTime()==BEnd.getTime())
{
System.out.println("输入的时间段有误");
}
else if(BStart.before(AStart))//b段的开始时间位于a段的相对位置,有5种可能
{
if(BEnd.before(AStart))//在b段开始时间在a段开始时间之前的情况下,b段的结束时间也有5种可能
{
System.out.print("无交集");
}
else if(BEnd.getTime()==AStart.getTime())
{
System.out.print("AStart=BStart,无交集");
}
else if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("AStart--BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("BEnd=AEnd,AStart----AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("AStart---AEnd");
}
else
{
System.out.print("不可能走这里!");}
}
else if(BStart.getTime()==AStart.getTime())
{
if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("AStart=BStart,AStart---BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("AStart=BStart,AEnd=BEnd,AStart---AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("AStart=BStart,AStart---AEnd");
}
else
{
System.out.print("不可能走这里!");
}
}
else if(BStart.after(AStart)&&BStart.before(AEnd))
{
if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("BStart----BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("AEnd=BEnd,BStart---AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("BStart---AEnd");
}
else
{System.out.print("不可能执行这里!");}
}
else if(BStart.getTime()==AEnd.getTime())
{
System.out.print("BStart=AEnd,AEnd---BEnd");
}
else if(BStart.after(AEnd))
{
System.out.print("无交集");
}
}
}
//错误总是史料不及的,哈哈,这次我是用语句覆盖测试的
import java.util.Date;public class a45q { /**
* @param args
* @throws IOException
*/
public static void main(String[] args) throws IOException {
Date AStart=new Date();
AStart.setTime(77L);//第一段开始时间
Date AEnd=new Date();
AEnd.setTime(80L);//第一段结束时间
Date BStart=new Date();
BStart.setTime(80L);//第二段开始时间
Date BEnd=new Date();
BEnd.setTime(83L);//第二段结束时间
if(AStart.after(AEnd)||BStart.after(BEnd)||AStart.getTime()==AEnd.getTime()||BStart.getTime()==BEnd.getTime())
{
System.out.println("输入的时间段有误");
}
else if(BStart.before(AStart))//b段的开始时间位于a段的相对位置,有5种可能
{
if(BEnd.before(AStart))//在b段开始时间在a段开始时间之前的情况下,b段的结束时间也有5种可能
{
System.out.print("无交集");
}
else if(BEnd.getTime()==AStart.getTime())
{
System.out.print("AStart=BStart,无交集");
}
else if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("AStart--BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("BEnd=AEnd,AStart----AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("AStart---AEnd");
}
else
{
System.out.print("不可能走这里!");}
}
else if(BStart.getTime()==AStart.getTime())
{
if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("AStart=BStart,AStart---BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("AStart=BStart,AEnd=BEnd,AStart---AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("AStart=BStart,AStart---AEnd");
}
else
{
System.out.print("不可能走这里!");
}
}
else if(BStart.after(AStart)&&BStart.before(AEnd))//上一个这里错了
{
if(BEnd.after(AStart)&&BEnd.before(AEnd))
{
System.out.print("BStart----BEnd");
}
else if(BEnd.getTime()==AEnd.getTime())
{
System.out.print("AEnd=BEnd,BStart---AEnd");
}
else if(BEnd.after(AEnd))
{
System.out.print("BStart---AEnd");
}
else
{System.out.print("不可能执行这里!");}
}
else if(BStart.getTime()==AEnd.getTime())
{
System.out.print("BStart=AEnd,AEnd---BEnd");
}
else if(BStart.after(AEnd))
{
System.out.print("无交集");
}
}
}
//错误总是会出现的,这次用的是语句覆盖,不会有错了