簡體   English   中英

構造復雜的java方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM