Java:使用以前方法中构造的对象
我正在创建一个程序,其中包含一个Count对象以及某些相关字段和方法 在程序中,Count对象在setupCounter方法中初始化,而其方法实际用于counterControl方法 但是,当我尝试调用之前在setupCounter方法中初始化的Count实例时,我被告知无法解析Count,因此我假设创建的Count实例只有一个局部范围 有人知道如何克服反实例范围不足的问题吗?下面是我的代码:Java:使用以前方法中构造的对象,java,oop,Java,Oop,我正在创建一个程序,其中包含一个Count对象以及某些相关字段和方法 在程序中,Count对象在setupCounter方法中初始化,而其方法实际用于counterControl方法 但是,当我尝试调用之前在setupCounter方法中初始化的Count实例时,我被告知无法解析Count,因此我假设创建的Count实例只有一个局部范围 有人知道如何克服反实例范围不足的问题吗?下面是我的代码: import java.util.Scanner; public class Main { s
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;
}
}
}
谢谢。您的函数没有返回任何内容。您必须在函数末尾使用return关键字,以便它传递它
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);
}
如果它是一个void函数,它不会返回/传递任何内容,因此使用void这个词
编辑:您可能还知道,您正在将该函数用作静态函数。请进一步了解静态函数及其用途,以便更好地理解
编辑2:如果返回的是计数类型的数据,则应将void和static替换为计数如果代码中有各种损坏的内容。我已经为您创建了count类,我认为您缺少它。把你的方法修好一点
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对象的引用。为什么它需要是静态的?因为使用它的方法(如计数器控制)是静态的
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);
}