有人能告诉我如何控制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)
,以便在继续下一个方法之前必须完全返回每个方法,这样我仍然可以轻松读取代码?
答案 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,要么将日志写入磁盘。