0

クラスの構築に問題があります。

次のコードは例外をスローします

public class Agent extends Board{    
    private static boolean arrow;
    private static boolean backmove;
    private static boolean gotGold;

    private static int atlocationX;
    private static int atlocationY;
    private static int faceposition; 
    private static int pathcounter;

    public boolean temporaryGold;
    public boolean temporaryWumpus;
    public boolean temporaryStench;
    public boolean temporaryBreeze;
    public boolean temporaryPit;

    int agentgui = 0;
    int label = 0;

    Block blockstorage[][] = new Block[4][4];
    KnowledgeBase kb = new KnowledgeBase();

    public Agent() {
        super();
    }

    public void Agent(){
        Agent.arrow = true;
        Agent.faceposition = 2;
        Agent.atlocationX = 0;
        Agent.atlocationY = 0;
        Agent.backmove = false;
        Agent.gotGold = false;
        Agent.pathcounter = 1;
    }
}

問題は、追加しようとすると

Agent agent = new Agent();

たとえば、私の他のクラスのいくつかでは:

public class Board {
    Agent agent = new Agent();
}

エラーを返します。

スレッド「AWT-EventQueue-0」での例外 java.lang.StackOverflowError

私もメインで試してみましたが、それでも同じです。

この例外の原因は何ですか?

4

3 に答える 3

5

間接再帰呼び出しで無限ループが発生しています。

オブジェクトの構築にはBoardオブジェクトが必要であり、Agentその逆も同様です。

于 2012-08-29T13:27:38.820 に答える
1

問題はあなたのAgentクラスが拡張されていることですBoard

public class Agent extends Board

クラスのコンストラクターでは、クラスコンストラク ターをAgent呼び出すsuper()コンストラクターを呼び出していますBoard

public Agent() {
    super();
 }

そして最後に、クラスはクラスBoardのオブジェクトを作成しますAgent

public class Board {
 Agent agent = new Agent();

これにより、無限ループが発生します: Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError.

編集:あなたに応じてあなたのエージェントクラスにコメントして質問の答え

public class Agent{    
private static boolean arrow;
private static boolean backmove;
private static boolean gotGold;

private static int atlocationX;
private static int atlocationY;
private static int faceposition; 
private static int pathcounter;

public boolean temporaryGold;
public boolean temporaryWumpus;
public boolean temporaryStench;
public boolean temporaryBreeze;
public boolean temporaryPit;

int agentgui = 0;
int label = 0;

Block blockstorage[][] = new Block[4][4];
KnowledgeBase kb = new KnowledgeBase();

public void Agent(){
    Agent.arrow = true;
    Agent.faceposition = 2;
    Agent.atlocationX = 0;
    Agent.atlocationY = 0;
    Agent.backmove = false;
    Agent.gotGold = false;
    Agent.pathcounter = 1;
 }
}

Board クラスは次のようになります。

public class Board {
 Agent agent = new Agent();
 // Now you can call your method of Agent class like following 
 agent.Agent()
}
于 2012-08-29T13:35:44.350 に答える
0

Agent は Board を拡張し、Board は Agent を必要とします。仮想マシンは、そのタスクを完了するために無限の時間を費やします。

両面に「Turn me over」と書かれた一枚の紙のようなものです。指示に従おうとして無限の時間を費やします。

また、「問題を見つけてください」タイプの質問をする前に、StackOverflow に関するいくつかの質問に回答することを検討してください。

于 2012-08-29T13:37:29.463 に答える