日期:2014-05-20  浏览次数:20799 次

一个自动生成的问题
大家好:

我现在写一个东西,遇到一个问题

大致如此:1。 我有一个txt 日志文档, 我将日志按行读取存于arrayList.其中 每条list中 我需要用到的是 命令command 和 起始时间。用于绘图。

       2。 绘图是 甘特图:即, 左边Y轴显示 所有的命令, 右边显示每条命令起始的时间和结束时间的过程 比如以一个方框来绘图,没有出现此命令时是横线 

       3. 我绘图使用jfreechart. 其中,我需要将每条命令添加于一个 series.  我用了一个 series 的数组来存储不同的命令线条。 比如: 命令:terminal 是series[1] ,再在series[1】中加入任务task(命令,命令起始时间,命令结束时间)。
 

问题所在,在于动态匹配,希望我讲清楚了,如果有没说好的地方请大家提出,并给我帮助,非常感谢。


private IntervalCategoryDataset createDataset() {

this.flags = modelfocus.getListflag();// 为了匹配每个命令,我在写入一个命令时,也写入一个标记用来找相应的命令

commands = modelfocus.getListCommand();//获得所有命令

DateFormat formatedate = new SimpleDateFormat("yyyy/MM/ww/dd HH:mm:ss");

cal = Calendar.getInstance();

nextDate = modelfocus.getNextDate();//获得一条命令的结束、(即下一命令的开始)

//初始化命令个数 个线条 用来绘图
for (int i = 0; i < countCom; i++) {
this.series[i] = new TaskSeries(commands.get(i));
}

int flag = 0;
Task task; //任务,用于 new task(命令,开始时间,结束时间)

//遍历日志文件list
for (Focus listTxt : modelfocus.getList()) { 
try {

d1 = formatedate.parse(listTxt.date2String());

// postcal.setTime();
} catch (ParseException e) {
System.out.println("Can't change this date");
e.printStackTrace();
}
d1 = modelfocus.getDate().get(flag);
cal.setTime(d1);
System.out.println(cal);

if (flag < nextDate.size() - 1) {
d2 = nextDate.get(flag);
System.out.println("start:......" + d1);
System.out.println("e n d:......" + d2);
}

String eachCmd = listTxt.getCommand();//获取当前日志行的命令段


//问题的地方(我觉得是这里)
//我循环所有命令,判断是否和当前命令匹配,如果匹配的话就加入相应命令的 线条

for (int i = 0; i < countCom; i++) {

String currentCmd = listTxt.getCommand();

if (eachCmd==currentCmd && currentCmd !=" ") {

if (d1.compareTo(d2) < 0)
task = new Task(currentCmd, d1, d2);
else {
System.out.println(cal);
task = new Task(currentCmd, d1, d1);
}
//任务加入线条
series[i].add(task);
}
}

flag++;
}

TaskSeriesCollection dataset = new TaskSeriesCollection();
        //任务集合
for (int i = 0; i < countCom; i++) {
dataset.add(this.series[i]);
}

return dataset;
}


附:有问题的图表
算法 java

------解决方案--------------------
把完整的可运行的代码贴出来,请说明你想显示什么效果,现在的问题在哪。
------解决方案--------------------
从代码来看,eachCmd 和 currentCmd是始终相等的 (两者都是通过listTxt.getCommand()来获得的)
这大概是问题所在吧。另外,LZ的jdk是不是1.6或以上的版本的?居然是直接用==来判断字符串是否相同...