2014-07-15 17 views
0

我正在創建一個程序,該程序包含具有某些關聯字段和方法的Count對象。Java:使用先前方法中構造的對象

在程序中,Count對象在setupCounter()方法中初始化,而其方法實際在counterControl()方法中使用。但是,當我嘗試調用我以前在setupCounter()方法中初始化的Count實例時,我被告知「count無法解析」,因此我假設創建的Count的實例僅具有本地作用域。

有誰知道如何克服Counter實例的範圍不足的問題?以下是我的代碼:

import java.util.Scanner; 

public class Main { 

    static Scanner in = new Scanner(System.in); 

    public static void main(String[] args) { 
    setupCounter(); 
    for (;;) { 
     counterControl(); 
    } 

    } 

    public static void setupCounter() { 
    int startVal; 
    int incrementVal; 

    System.out.println("Please enter the starting value of the counter:"); 
    startVal = in.nextInt(); 
    System.out.println("Please enter the increment/decrement amount on the counter:"); 
    incrementVal = in.nextInt(); 

    Count count = new Count(startVal, incrementVal); 
    } 

    public static void counterControl() { 
    String control; 

    System.out.println("The following controls can be applied to the counter:"); 
    System.out.println("Increment - i"); 
    System.out.println("Decrement - d"); 
    System.out.println("Exit - x"); 

    control = in.nextLine(); 

    switch (control) { 
     case "i": 
     count.increment(); 
     break; 
     case "d": 
     count.decrement(); 
     break; 
     case "x": 
     System.exit(0); 
     break; 
    } 
    } 
} 

謝謝。

回答

0

以前的答案都接近。 Amir只是忘了將setupCounter()的方法簽名從void的返回值更改爲Count。

基本上,你只需要有一個靜態變量來保持對你創建的Count對象的引用。爲什麼它需要是靜態的?因爲使用它的方法(例如counterControl()是靜態的)。

public class Main { 
    static Count count; 

    .... 

    public static void main(String[] args) { 
    count = setupCounter(); 
    for (;;) { 
     counterControl(); 
    } 

    } 

    public static Count setupCounter() { 
    ...  
    return new Count(startVal, incrementVal); 
    } 
0
public static void main(String[] args) { 
    Count counter = setupCounter(); 
    //now you can refer to counter 

.... 

    public static Count setupCounter() { 
    int startVal; 
    int incrementVal; 

    System.out.println("Please enter the starting value of the counter:"); 
    startVal = in.nextInt(); 
    System.out.println("Please enter the increment/decrement amount on the counter:"); 
    incrementVal = in.nextInt(); 

    return new Count(startVal, incrementVal); 
    } 
0

你的函數沒有返回任何東西。您必須在函數結尾處使用「return」關鍵字才能傳遞它。

如果它是一個無效函數(如你所擁有的函數),它不會返回/傳遞任何東西,因此單詞「void」。

編輯:你也可能知道你正在使用函數作爲靜態函數。請進一步瞭解靜態函數及其目的,以便更好地理解。

編輯2:如果你正在返回的數據是「計數」類型的,應更換空和靜與「計數」

0

你有不同的破事在你的代碼。我爲你創造了我認爲你缺少的班級。固定你的方法了一下......

import java.util.Scanner; 

public class Main2 { 

    static Scanner in = new Scanner(System.in); 

    public static void main(String[] args) { 
     Count count = setupCounter(); 
     for (;;) { 
      counterControl(count); 
     } 

    } 

    public static Count setupCounter() { 
     int startVal; 
     int incrementVal; 

     System.out.println("Please enter the starting value of the counter:"); 
     startVal = in.nextInt(); 
     System.out.println("Please enter the increment/decrement amount on the counter:"); 
     incrementVal = in.nextInt(); 

     return new Count(startVal, incrementVal); 
    } 

    public static void counterControl(Count count) { 
     String control; 

     System.out.println("The following controls can be applied to the counter:"); 
     System.out.println("Increment - i"); 
     System.out.println("Decrement - d"); 
     System.out.println("Exit - x"); 

     control = in.nextLine(); 
     System.out.println(count.getVal()); 

     switch (control) { 
      case "i": 
       count.increment(); 
       break; 
      case "d": 
       count.decrement(); 
       break; 
      case "x": 
       System.exit(0); 
       break; 
     } 
    } 

    private static class Count { 

    private int startVal, incrementVal; 
    private Count(int startVal, int incrementVal) { 
     this.startVal = startVal; 
     this.incrementVal = incrementVal; 
    } 

    private void increment() { 
     this.startVal += this.incrementVal; 
    } 

    private void decrement() { 
     this.startVal -= this.incrementVal; 
    } 
    private int getVal(){ 
     return val; 
    } 
    } 
} 

或者你也可以做到這一點...這是什麼更多你在哪裏試圖做的,但並不像漂亮的「java」

import java.util.Scanner; 

public class Main2 { 

    static Scanner in = new Scanner(System.in); 
    private static Count count; 
    public static void main(String[] args) { 
     setupCounter(); 
     for (;;) { 
      counterControl(); 
     } 

    } 

    public static void setupCounter() { 
     int startVal; 
     int incrementVal; 

     System.out.println("Please enter the starting value of the counter:"); 
     startVal = in.nextInt(); 
     System.out.println("Please enter the increment/decrement amount on the counter:"); 
     incrementVal = in.nextInt(); 

     count = new Count(startVal, incrementVal); 
    } 

    public static void counterControl() { 
     String control; 

     System.out.println("The following controls can be applied to the counter:"); 
     System.out.println("Increment - i"); 
     System.out.println("Decrement - d"); 
     System.out.println("Exit - x"); 

     control = in.nextLine(); 

     System.out.println(count.getVal()); 
     switch (control) { 
      case "i": 
       count.increment(); 
       break; 
      case "d": 
       count.decrement(); 
       break; 
      case "x": 
       System.exit(0); 
       break; 
     } 
    } 

    private static class Count { 

     private int val, incrementVal; 
     private Count(int startVal, int incrementVal) { 
      this.val = startVal; 
      this.incrementVal = incrementVal; 
     } 

     private void increment() { 
      this.val += this.incrementVal; 
     } 

     private void decrement() { 
      this.val -= this.incrementVal; 
     } 
     private int getVal(){ 
      return val; 
     } 
    } 
}