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

时间:2016-11-12 21:54:32

标签: java class object while-loop return

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

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

}

2 个答案:

答案 0 :(得分:2)

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

sessionManager = org.apache.shiro.web.session.mgt.DefaultWebSessionManager
cookie = org.apache.shiro.web.servlet.SimpleCookie
cookie.name = shiro.session.id
sessionManager.sessionIdCookie = $cookie

主要是:

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

}

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

请注意: 优良作法是用大写的第一个字母写出类名,例如。 GameLoop而不是gameLoop

答案 1 :(得分:0)

我真的不明白你正在尝试做什么或问题是什么,但在你的主要课程中,你有一个与该课程名称相同的对象。

gameLoop gameLoop = new gameLoop();

我不知道这是否是您问题的确切原因,但我几乎可以肯定那不应该是那样的。