构造复杂的java方法

时间:2013-04-23 20:40:18

标签: java eclipse performance algorithm architecture

有人能告诉我如何控制java的执行顺序,同时仍然以简化,易于维护的结构组织代码吗?

我在java中编写了一个相当复杂的算法。一种方法必须长达数百行,以至于隔离代码的关键部分以进行微调算法变得过于劳动密集。为了简化代码,我确定了可以解析为单个变量的代码的每个部分,并将每个部分移动到它们自己的方法,然后从以前复杂的方法调用它们。这很好,因为它使代码可读,并且更容易维护。

问题是,现在我收到一些错误,表明调用方法在某些早期方法返回其值之前继续执行后续代码。

以下是代码中的示例:

void myMethod(Double numb){  
    double first = new getFirst(numb);  
    double second = new getSecond(numb);  
    double third = new getThird(numb);  
    double anAside = new getAnAside(first, second, third);  
    double fourth = new getFourth(numb);  
}

在我收到getFourth(numb)的同时,出现的错误消息与System.out.println()中发生的事情有关,导致eclipse控制台指示getFirst(numb)仍在运行。当我收到getFirst(numb)中的getSecond(numb)getThird(numb)getAnAside(first,second,third)getFourth(numb)myMethod(numb)的所有内容时,我没有得到相同的证据表明代码块无序运行。 (因为它们没有子方法,所以代码都在一个长块中。)但是,代码很难阅读。如何更改上面的myMethod(numb),以便在继续下一个方法之前必须完全返回每个方法,这样我仍然可以轻松读取代码?

3 个答案:

答案 0 :(得分:1)

尝试在每个方法之间刷新System.out,如下所示:

void myMethod(Double numb)
{  
    double first = new getFirst(numb);
    System.out.flush();
    double second = new getSecond(numb);
    System.out.flush();
    double third = new getThird(numb);
    System.out.flush();
    double anAside = new getAnAside(first, second, third);
    System.out.flush();
    double fourth = new getFourth(numb);  
}

正如Matt B所提到的,如果你只使用一个线程,那么你的日志记录可能会出现问题。

答案 1 :(得分:1)

我经常发现,就程序结构而言,算法永远不会像人们想象的那样复杂。你所要做的就是说出来并随时写下。说我的冰箱需要牛奶,所以我需要一个算法去商店买牛奶:

public Milk goGetMilk(){
    getMoney();
    getCarKey();
    driveToStore();
    findMilk();
    buyMilk();
    driveBack();
    putMilkInFridge();
}

然后,每个嵌套方法都可以分解成块,直到我有一个完整的程序。

就执行顺序而言,如果你有一个线程:没有竞争条件。如果您使用多个线程,则需要同步共享资源和集合点。

答案 2 :(得分:1)

这有点猜测,但我知道IDE以错误的顺序显示stdout输出。我建议你先消除这个(即使不太可能),要么从正确的终端运行Java,要么将日志写入磁盘。