2016-11-13 5 views
-1

私はゲームクラスにアクセスするための更新クラスと、その両方にアクセスするためのメインクラスを必要とするゲームを作成しています。私が抱えている問題は、ゲームクラスの更新されたオブジェクトを持つために更新クラスが必要だが、Updateクラスからゲームクラスにアクセスしようとするとエラーが発生する[newGame.test()でエラーが発生する]Javaが別のクラスにアクセスできない

ERROR: Exception in thread "main" java.lang.NullPointerException 
    at Updates.updateStats(Updates.java:17) 
    at Game.gameLoop(Game.java:24) 
    at Main.main(Main.java:14) 


import java.util.Scanner; 

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

    public static void main(String[] args) 
    { 
     Game newGame = new Game(); 
     //Updates getUpdates = new Updates(); 

     newGame.setupGame(); 
     Game.isRunning=true; 
     newGame.gameLoop(); 

    } 

} 


import java.util.Scanner; 

public class Game { 

    static Scanner input = new Scanner(System.in); 

    Updates getUpdates = new Updates(); 

    public Game(){ 

    } 


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

    public static boolean isRunning; 
    private int turn = 0; 

    public void gameLoop(){ 
     while (isRunning){ 
      getUpdates.updateStats(); 
      System.out.println("Turn: "+turn); 
      input.nextLine(); 
      turn++; 
     } 
    } 

    public void setupGame() 
    { 
     System.out.println("Goverment: 1=Democracy 2=monarchy 3=dictatorship"); 
     goverment = input.nextLine(); 
     while (!goverment.equals("1")||!goverment.equals("2")||!goverment.equals("3")){ 
      if (goverment.equals("1")){ 
       happyness = 75; 
       money = 250000.0; 
       break; 
      } 
      else if (goverment.equals("2")){ 
       happyness = 50; 
       money = 500000.0; 
       break; 
      } 
      else if (goverment.equals("3")){ 
       happyness = 25; 
       money = 750000.0; 
       break; 
      } 
      else{ 
       System.out.println("ENTER A VALID VALUE"); 
       goverment = input.nextLine(); 
      } 

     } 

     System.out.println("1"); 

    } 

    public int getHappyness(){ 
     return happyness; 
    } 

    public void test(){ 
     System.out.println("MY NAME IS BOB"); 
    } 
} 





import java.util.Scanner; 

public class Updates { 

    static Scanner input = new Scanner(System.in); 

    public Updates(){ 
    } 

    public Updates(Game newGame){ 
     this.newGame = newGame; 
    } 

    Game newGame; 

    public void updateStats(){ 
     newGame.test(); 

    } 
} 
+0

/?? –

+0

btw両方のクラスで2つのスキャナを使う必要はありません –

+0

NPEは、 'Game'は決して' Updates'に渡されないので、私は推測しています。 –

答えて

0

これはあまり役に立ちませんがご迷惑をおかけして申し訳ありませんが、ここで質問に答えるのは初めてです。

テストプロジェクトにコードを挿入して、問題の場所を確認しました。エラーがいくつかあるようです。

Mainクラスは最小の問題から始めます。

ここでスキャナオブジェクトを使用しないと宣言する必要はありません。空のオブジェクトにメモリを割り当てるだけです。

これで、Updatesクラスに移動しました。

ここでもスキャナを宣言する必要はありません。

オブジェクト「newGame」を使用するには、あなたはコンストラクタを利用していることを確認する必要があります。

public Updates(Game newGame){ 
    this.newGame = newGame; 
} 

そしてません:

public Updates(){ 

} 

後者は設定しませんのであなたのためのゲームオブジェクト、そしてあなたがそれにアクセスするたびにあなたはnullpointerを得るでしょう。

最後に、ゲームのクラスは:

私は、彼らがクラス外で使用されることはありませんしているようスキャナと更新の両方が、プライベートオブジェクトを作ると思います。その場合は、getters and settersを使用してください。あなたのゲームのコンストラクタで

、あなたは実際にそうように、getUpdatesと入力オブジェクトの両方を作成することができます。

public Game() { 
    this.input = new Scanner(System.in); 
    this.getUpdates = new Updates(this); 
} 

あなたのゲームが初期化されるたびにその方法は、あなたが準備でそれらを持っています。ご覧のとおり、私が前に述べたUpdatesコンストラクタを使用する

new Updates(this) 

これは最終的にあなたの問題を解決するはずです。

参考のために、ここで私は/使用編集したファイルがあり、それが私の最後に働いた:

何を得るのエラー

Pastebin link

+0

ありがとう!私はJavaの初心者ですから、これらの問題については気づかずに新しいコードを試してコンパイルし、何が起こるかを見てください。 –

関連する問題