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