【问题标题】:Java objects of classes not returning the same values类的 Java 对象不返回相同的值
【发布时间】:2017-03-26 20:52:09
【问题描述】:

我正在从 2 个单独的类创建一个类的对象,并且两个对象都为同一方法返回不同的值。我怀疑这可能是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方法....什么都不会运行。你想在那里做什么?
  • @cricket_007 我相信他在班级里名列前茅。
  • 我相信主类是从顶部开始的,但是@James Clarke 你能检查一下你的运行配置中有哪个类吗?

标签: java class object while-loop return


【解决方案1】:

您正在创建两个不同的类设置实例。一种是直接在 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

【讨论】:

    【解决方案2】:

    我不太明白您要做什么或问题是什么,但是在您的主类中,您有一个与该类的确切名称相同的对象。

    gameLoop gameLoop = new gameLoop();
    

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

    【讨论】:

    • 实际上,这是合法的,虽然不是最好的做法。这不会是他的问题的原因。
    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 2022-11-29
    • 2013-03-17
    • 2017-07-17
    • 2011-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多