2016-11-12 13 views
0

2つの別々のクラスからクラスのオブジェクトを作成していて、両方のオブジェクトが同じメソッドに対して異なる値を返しています。私はそれがwhileループの問題かもしれないと思うが、ここにクラスがある。メインクラスが動作し、セットアップクラスは変換されてオブジェクトになり、ゲームループクラスは正しい値を返さないオブジェクトを持ちます。セットアップの最初に定義された値を返します。変更されたバージョンは返しません。同じ値を返さないクラスのJavaオブジェクト

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

James、私はあなたの質問が非常に不明であることを発見しています。どのようなインプットを提供していますか、どのような結果が期待されていますか、どのような結果が実際に得られていますか?そして、「クラスをオブジェクトに変換する」ということはどういう意味ですか?インスタンス化を意味しますか? –

+0

下のクラスには空のmainメソッドがあります....何も実行されません。何をしようとしていますか? –

+0

@ cricket_007私は彼がトップクラスでクラスを運営していると信じています。 –

答えて

0

私は本当にあなたが何をしようとして理解したり、どのような問題があるが、あなたのメインクラスであなたが同じでオブジェクトを持っていませんクラスの正確な名前。

gameLoop gameLoop = new gameLoop(); 

これは問題の正確な原因であるかどうかはわかりませんが、そのようなものではないと私はほとんど確信しています。

+1

実際、それは法的ですが、最善のことではありません。彼の問題の原因にはなりません。 –

2

クラスセットアップの2つの異なるインスタンスを作成しています。 1つはmain関数で直接作成され、もう1つはgameLoopオブジェクトで作成されます。彼らはその属性を共有しないので、メソッドは異なる値を返すかもしれません。 'new'演算子を使用するたびに、クラスの新しいインスタンスが独自の属性で作成されます(静的メンバーはインスタンスではなくクラスに属しているため、静的メンバーのみが共有されます)。

そしてメインで:あなたが書くことができ、同じインスタンスにしたい場合は

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

+0

ありがとうございます! –

+0

あなたは答えることを認めますか? – pato

関連する問題