簡體   English   中英

Java:使用在先前方法中構造的對象

[英]Java: Using Objects Constructed in A Previous Method

我正在創建一個包含Count對象以及某些關聯的字段和方法的程序。

在程序中,Count對象在setupCounter()方法中初始化,而其方法實際上在counterControl()方法中使用。

但是,當我嘗試調用之前在setupCounter()方法中初始化的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;
    }
  }
}

謝謝。

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);
  }

您的函數未返回任何內容。 您必須在函數的末尾使用“ return”關鍵字,以使其通過。

如果它是一個void函數(像您擁有的那樣),它將不會返回/傳遞任何東西,因此單詞“ void”。

編輯:您可能還知道您正在使用該函數作為靜態函數。 請進一步研究靜態函數及其目的,以更好地理解。

編輯2:如果您要返回的是“計數”類型的數據,則應將“ void”和“靜態”替換為“計數”

您的代碼中有各種各樣的壞處。 我為您創建了計數類,我認為您很想念。 並修復您的方法...

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;
        }
    }
}

先前的答案很接近。 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);
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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