[英]structuring complicated java methods
任何人都可以告訴我如何控制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);
}
在我收到System.out.println()
的同時,出現的錯誤消息與getFourth(numb)
中發生的事情有關,導致eclipse控制台指示getFirst(numb)
仍在運行。 當我在myMethod(numb)
擁有getFirst(numb)
, getSecond(numb)
, getThird(numb)
, getAnAside(first,second,third)
和getFourth(numb)
myMethod(numb)
,我得不到相同的證據代碼塊運行不正常。 (因為它們沒有子方法,所以代碼都在一個長塊中。)但是,代碼很難閱讀。 如何更改上面的myMethod(numb)
,以便在繼續下一步之前必須完全返回每個方法,這樣我仍然可以輕松讀取代碼?
嘗試在每個方法之間刷新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所提到的,如果你只使用一個線程,那么你的日志記錄可能就會出現問題。
我通常發現,就程序結構而言,算法永遠不會像人們想象的那樣復雜。 你所要做的就是說出來並隨時寫下。 說我的冰箱需要牛奶,所以我需要一個算法去商店買牛奶:
public Milk goGetMilk(){
getMoney();
getCarKey();
driveToStore();
findMilk();
buyMilk();
driveBack();
putMilkInFridge();
}
然后每個嵌套的方法可以分解成塊,直到我有一個完整的程序。
至於執行順序,如果你有一個線程:沒有賽車條件。 如果使用多個線程,則需要同步共享資源和集合點。
這有點猜測,但我知道IDE以錯誤的順序顯示stdout輸出。 我建議你先消除這個(即使不太可能),要么從正確的終端運行Java,要么將日志寫入磁盤。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.