重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

カブロボコンテストのプログラムで、以下のようなプログラムを作りましたが、コンパイルしたら、シンボル:holding シンボルを解決できませんというエラーが出ます。どうしたらエラーを直せるでしょうか?(字数制限のため、一部プログラムを削除していますが、質問にはあまり関係ないと思います。)
import java.util.*;
import jp.kaburobo.robot.Robot;
import jp.kaburobo.investment.*;
import jp.kaburobo.information.*;
import jp.kaburobo.util.*;
import jp.kaburobo.technical.*;
public class RSIRobot2 implements Robot{
public void run (InvestmentAgent investmentAgent){
for(int i=0;i<stocks.length;i++){
List indexList = informationManager.getIndexInformation(stocks[i],Time.getTime(),-14);
IndexInformation[] indexinfo= (IndexInformation[])indexList.toArray(new StockMarketInformation[0]);
List rsiList = technical.getRSI(indexinfo,null,14);
RSI rsi = (RSI)rsiList.get(rsiList.size()-1);
StockOrder stockOrder = null;
if(rsi.getRsi()>0){
   if(rsi.getRsi()>70){
stockOrder = new SimpleStockOrder(stocks[i],StockOrder.SELL);}
else if(rsi.getRsi()<20){
stockOrder = new SimpleStockOrder(stocks[i],stockOrder.BUY);}
else{
Holding holding = (Holding)holdingMap.get(stocks[i]);}
if(holding != null){
if(holding.getNumber()>0){stockOrder = new SimpleStockOrder(stocks[i],StockOrder.SELL,holding.getNumber());}
else{stockOrder = new SimpleStockOrder(stocks[i],stockOrder.BUY,-holding.getNumber());}
}
break;
}

if(stockOrder != null){
investmentAgent.order(stockOrder);
}
}
}

A 回答 (2件)

>if文に入る前にholdingの宣言をすれば良いですよね?



解決方法としてはそれで良いと思います。
「if(rsi.getRsi()>70){」の前で「Holding holding = null;」とすれば大丈夫です。

ただ、今回のエラーの原因はelseブロックを通るか否かの問題ではなく、変数holdingのスコープ(有効範囲)の問題です。holdingのスコープの外でholdingの値を参照している事が問題なのです。変数のスコープについて勉強する事をお勧めします。
    • good
    • 0
この回答へのお礼

返事が遅くなって申し訳ありません。gimmickさんの回答のおかげで解決しました。ありがとうございました。

お礼日時:2004/12/27 23:55

elseを通らなければholdingが使えるようになりません。


しかし次のif文はelseを通るかどうかに関わらずholdingを見ようとしています。

この回答への補足

if文に入る前にholdingの宣言をすれば良いですよね?

補足日時:2004/12/12 23:42
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!