- ベストアンサー
eclipseの不具合によりif文が判定されない
- eclipseの不具合によりif文が正しく判定されず、ブロック内部に移行しない状態が発生している。
- 再現しようとしている電卓の条件分岐であふれ桁の判定を行っているが、eclipseでは正しく判定されない。
- 不具合の解決方法として、eclipseの再インストールや配置の変更が考えられる。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
まず、処理の流れを確定することからはじめましょう。 今は、 「表示されない」 →ブロックが実行されていない という判断をされているかと思いますが、何らかの理由で表示されていないことも考えられるので、 実行の判断は、あくまでも表示された事実に基づくのがいいかと思います。 具体的には、次の2点を直して実行してみて下さい。 1:問題箇所のifに対するelseブロックを追加、メッセージを表示。 2:ifブロック内のメッセージ表示を、ブロックの最初にする。 これにより、どこを通っているか、またはそもそもここまで来ていないかが確定します。
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
「ブロック内部に移らない」と思った根拠はなんですか? System.out.println( seisu_length > 12 ); がtrueを出力するなら、このifの条件も真のはずです。 気になるのは、これがプログラムそのままなのか、ということです。 単純にコピー→ペーストしたものなのか、その後、書き直したものなのか。 System.out.println( seisu_length > 12 ); の後から(ア)までの間で値が変化するようなことはないか、 ifの中が、括弧が二重になっていますが、本来は if( (seisu_length > 12) && (なにか別の条件) ) //(ア) とかになっていないか? 「例外を返す」とありますが、正常に期待通りの例外だけが返ってますか? ifの中で例外発生しているとかはないですか?
お礼
回答していただきありがとうございます。 ご指摘していただいた内容を受けて 以下のように問題の部分を変更しました。 まず、ブロック内部の test statement をブロック先頭にもってきたら (4) が出力されましたので、ブロック内部には移っていることが わかりました。 そして、substring のところがおかしいことに気づきました。 retstring はメソッド内の冒頭で宣言し 仮の初期値として、""; を与えていました。 このメソッドに渡す仮引数は value としているのですが、 計算結果の文字列を加工したものを retstring に格納するのですから retstring = value.substring( index, index ) とするべきでした。 --------------------------------------------- seisu_length = len - 1; // test statement System.out.println( "seisu_length2 is " + String.valueOf( seisu_length )); System.out.println( seisu_length > 12 ); // if( seisu_length > 12 ) { //test statement System.out.println( "(4)" ); // gap = seisu_length - 12; overflag = true; retstring = value.substring( 0, 12 ); // 以前の内容 retstring = retstring.substring( 0, 12 ); // } --------------------------------------------- 上記のように修正したところ、 期待どおりの例外処理に移りました。 今回質問させていただいたところは解決しましたので 質問を終了させていただきます。 貴重な時間をさいての回答、ありがとうございました。
- teketon
- ベストアンサー率65% (141/215)
以前も書きましたが、seisu_lengthの値が説明の通りかわからないので、開示してください。 判定は合っているので、取得している部分がおかしいように思えます。 それとも > System.out.println( "seisu_length2 is " + String.valueOf( seisu_length )); > System.out.println( seisu_length > 12 ); 上記のコードは、 > seisu_length2 is 13 > true とか出力されるのでしょうか?せっかくSystem.outを入れているので、情報がほしいです。 あと、 > retstring = retstring.substring( 0, 12 ); これもおかしいように思います。電卓ならば、 先頭文字列を残すのではなく、末尾文字列を残すのではないでしょうか?
お礼
さっそく回答していただきありがとうございます。 説明不足ですいません。 計算の経過を説明させていただきます。 電卓を起動し オペランド A, B にそれぞれ、 "123456789123.", "10." の引数をコンストラクタに 与えて BegDecimal 型のインスタンスを生成し オペレータ は 掛け算なので、multiply によって 結果を得ました。 結果から文字列を得て( "1234567891230" ) 小数ではないので末尾にドットを追加してから この文字列を問題のメソッドの引数にして 文字列の加工に移りました。 この時点での文字列の長さは 14 です 最大表示桁数は12 なのでドットを加えて長さ13 の 文字列を得たいとしています。 抜粋して示したところの出力の内容を 示させていただきます。 -------------------------------- 出力結果 from validControl len is 14 from validControl "・"is len-1 ? : true seisu_length2 is 13 true -------------------------------- 説明不足ですいませんでした。 そうです、 true が表示されるのですが if 文のブロック内部に処理が移らないみたいなのです。 処理が移っていればブロック内部の(4)が 出力されるはずなのですが... retstring の加工についてはあとでできると思うのですが 恐れ入りますが、if のブロックに移らないことについて ご存知であれば教えていただけないでしょうか? やはり、eclipse に不具合が出ている、ということでしょうか? よろしくお願いします。
お礼
回答していただきありがとうございます。 ご指摘していただいた内容を受けて 以下のように問題の部分を変更しました。 まず、ブロック内部の test statement をブロック先頭にもってきたら (4) が出力されましたので、ブロック内部には移っていることが わかりました。 そして、substring のところがおかしいことに気づきました。 retstring はメソッド内の冒頭で宣言し 仮の初期値として、""; を与えていました。 このメソッドに渡す仮引数は value としているのですが、 計算結果の文字列を加工したものを retstring に格納するのですから retstring = value.substring( index, index ) とするべきでした。 --------------------------------------------- seisu_length = len - 1; // test statement System.out.println( "seisu_length2 is " + String.valueOf( seisu_length )); System.out.println( seisu_length > 12 ); // if( seisu_length > 12 ) { //test statement System.out.println( "(4)" ); // gap = seisu_length - 12; overflag = true; retstring = value.substring( 0, 12 ); // 以前の内容 retstring = retstring.substring( 0, 12 ); // } --------------------------------------------- 上記のように修正したところ、 期待どおりの例外処理に移りました。 今回質問させていただいたところは解決しましたので 質問を終了させていただきます。 貴重な時間をさいての回答、ありがとうございました。