2013-09-24 55 views
2

執行該方法我有類:如何通過返回值的其他類而不多次

public class Provider { 
public static int getNumberofObjects() { 
    Scanner in = new Scanner(System.in); 

    System.out.print("Input Number of Objects: "); 

    int numberOfObjects = in.nextInt(); 

    return numberOfObjects; 
}} 

如何傳遞剛剛numberOfObjects變量,而無需再次提示用戶輸入一個新的數每次我想要這個變量的對象?

什麼我做的是:

public class B { 
Provider provider = new Provider(); 

int numberOfObjects= Provider.getNumberofObjects(); } 

但因爲我使用多種方法numberOfobjects在這個班,我每次得到提示輸入新值。的

+0

讀取不同類別/方法中的對象數量並將其存儲在那裏。然後,當創建一個'Provider'的新實例時,設置這個數量的對象。 –

+0

你不需要一個類的實例來調用一個類的靜態方法。注意,你甚至沒有使用提供者變量。 – GriffeyDog

+0

@GriffeyDog OP沒有使用'Provider'類的任何實例來執行'Provider.getNumberofObjects();' –

回答

6

一種方式來做到這一點是緩存結果的供應商,並返回它在所有後續調用,如這個:

public class Provider { 
    boolean gotNumber = false; 
    int theNumber; 
    public int getNumberofObjects() { 
     if (!gotNumber) { 
      Scanner in = new Scanner(System.in); 
      System.out.print("Input Number of Objects: "); 
      theNumber = in.nextInt(); 
      gotNumber = true; 
     } 
     return theNumber; 
    } 
} 

這個實現僅在第一次調用getNumberofObjects()方法時向用戶請求號碼;所有後續調用在第一次調用時使用theNumber讀取。

請注意,我使getNumberofObjects()方法非靜態,因此您需要將new Provider()傳遞給需要該編號的類。

+0

+1雖然我可能只需將該Number初始化爲Integer.MIN_VALUE,然後如果檢查該值而不是布爾值,則跳過布爾值。 – splungebob

+0

@splungebob我知道下次我做這樣的事情時,我們的一個QA會輸入-2147483648來惹惱我;-) – dasblinkenlight

+0

大聲笑 - 然後切換到很長時間,我說! – splungebob

0

使變量爲實例變量(在類級別定義),而不是使用它的方法內