类的 Java 对象不返回相同的值

标签 java class object while-loop return

我正在从两个单独的类创建一个类的对象,并且两个对象为同一方法返回不同的值。我怀疑这可能是 while 循环的问题,但这里是类。主类有效,设置类是正在转换为对象的类,而游戏循环类具有不返回正确值的对象。它返回在安装开始时定义的值,而不是修改后的版本。

import java.util.Scanner;

public class MainClass {
    static Scanner input = new Scanner(System.in);
    //String x = input.nextLine();

    public static void main(String[] args)
    {
        setup setupGov = new setup();
        gameLoop gameLoop = new gameLoop();

        setupGov.statsSetup();
        System.out.println("happyness: " + setupGov.getHappyness() + " money: £" + setupGov.getMoney() + " population: " + setupGov.getPopulation());

        gameLoop.loop();

    }
}
<小时/>
import java.util.Scanner;

public class setup {
    static Scanner input = new Scanner(System.in);

    String goverment;
    int happyness;
    double money;
    int population = 1000000;


    public setup()
    {
    }

    public void statsSetup()
    {
        System.out.println("Choose a goverment: 1. democracy 2. monarchy 3. dictatorship");
        goverment = input.nextLine();

        if (goverment.equals("1"))
        {
            happyness = 75;
            money = 250000.0;

        }
        else if (goverment.equals("2"))
        {
            happyness = 50;
            money = 500000.0;
        }
        else if (goverment.equals("3"))
        {
            happyness = 25;
            money = 750000.0;
        }
        else
        {
            System.out.println("ENTER A VALID VALUE");
        }
    }
    public int getHappyness()
    {
        return happyness;
    }
    public double getMoney()
    {
        return money;
    }
    public int getPopulation()
    {
        return population;
    }
}
<小时/>
import java.util.Scanner;

public class gameLoop 
{
    static Scanner input = new Scanner(System.in);

    static int turn = 0;
    int happyness;
    double money;
    int population;

    public gameLoop()
    {
    }

    setup setupGov = new setup();

    public static void main(String[] args)
    {

    }

    public void loop() 
    {
        while (true)
        {
            System.out.println("Turn: "+turn);
            input.nextLine();
            turn++;
        }
    }

}

最佳答案

您正在创建两个不同的类设置实例。一种是直接在 main 函数中创建,另一种是在 gameLoop 对象中创建。它们不共享属性,因此方法可能返回不同的值。每次使用“new”运算符时,都会使用其自己的属性创建一个新的类实例(仅共享静态成员,因为静态成员属于类而不是实例)。如果您想拥有相同的实例,您可以编写:

 public class gameLoop 
 {
    static Scanner input = new Scanner(System.in);

    static int turn = 0;
    int happyness;
    double money;
    int population;

    public gameLoop(setup setupGov) 
    {
       this.setupGov = setupGov;
    }

    setup setupGov;

    public static void main(String[] args)
    {

    }

    public void loop() 
    {
        while (true)
        {
            System.out.println("Turn: "+turn);
            input.nextLine();
            turn++;
        }
    }

}

在主要部分:

public class MainClass {
    static Scanner input = new Scanner(System.in);
    //String x = input.nextLine();

    public static void main(String[] args)
    {
        setup setupGov = new setup();
        gameLoop gameLoop = new gameLoop(setupGov);

        setupGov.statsSetup();
        System.out.println("happyness: " + setupGov.getHappyness() + " money: £" + setupGov.getMoney() + " population: " + setupGov.getPopulation());

        gameLoop.loop();

    }
}

现在两个对象 setupGov 将是同一个实例。

请注意: 最好将类名的首字母大写,例如。 GameLoop 代替 gameLoop

关于类的 Java 对象不返回相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40568063/

相关文章:

c++ - 重载构造函数中的代码重复

javascript - 如何从属性中的键值对过滤对象数组

java - 可靠地将任何对象转换为字符串,然后再返回

java - 在构造函数中使用多重捕获异常类型

java - 从 Eclipse 类路径中排除项目引用的传递依赖关系的问题

ruby - 关于 rspec 中 Ruby 类 Timer 的问题

c++ - 如何找到存储在 C++ vector 中的对象的类方法?

java - 简单的 Java 用户界面

java - javax.validation 的正确位置在哪里

javascript - JS 在多个文件上运行。创建类还是使用 Webpack 和 Babel?