Java Eclipseで条件判定しない不具合が発生しているのか?

このQ&Aのポイント
  • Java Eclipseを使用して、文具店で販売されている電卓を再現しようとしていますが、条件判定が正しくされていない問題が発生しています。
  • 不具合が発生しているため、Eclipseを再インストールする必要があるかどうか悩んでいます。
  • 誰か解決策をご存知の方がいらっしゃいましたら、教えていただけないでしょうか?
回答を見る
  • ベストアンサー

Java eclipse で条件判定しないのですが

こんにちは。趣味でプログラミングをしているものです。 さっそくですが、質問させていただきます。 Eclipse を使って Javaで、文具店などで千円くらいで販売している 電卓を再現しようとしているのですが、 コーディングが終わり、動作を確認しているのですが やはり、多くの不具合が出てしまい、修正しようとしているのですが、 その中で、すこし奇妙に思えるようなものが発生してしまいました。 電卓で計算した結果の文字列を表示桁数に収めるようにする、 あるいは桁のあふれがあった場合、例外を投げる、というメソッド において、 単純な条件分岐を判定しない、というもののように思えるのですが、 以下にその抜粋したものを説明させていただきます。 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) ) //(ア) { gap = seisu_length - 12; overflag = true; retstring = retstring.substring( 0, 12 ); //test statement System.out.println( "(4)" ); // } len int 計算結果を表す文字列 整数に対する処理であり末尾に .(ドット) がついている seisu_length int 整数部分の桁数、再現しようとしている電卓が 整数部分の桁数で表示桁のあふれを判定しているので gap int 再現しようとしている電卓があふれている桁数の情報を          答えの文字列の先頭から数えたインデックスにドットを 挿入するので overflag boolean 桁あふれの場合の処理に移るためのフラグ retstring String 表示桁数分の計算結果の文字列 このメソッドの戻り値 test statement は変数の値をみたり、このブロックに到達しているのか 確認しています。 上記の(ア)の部分の判定で ブロック内部に移らないのですが コードに誤りはないように思えるのですが eclipse に不具合が発生している、 ということでしょうか? eclipse をふたたびインストールというか 解凍して配置したほうがよいのでしょうか? ご存知のかた、教えていただけないでしょうか? よろしくお願いします。

noname#173931
noname#173931
  • Java
  • 回答数1
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • teketon
  • ベストアンサー率65% (141/215)
回答No.1

> len int 計算結果を表す文字列 int len = 100 + 10; という事ならば、 > seisu_length = len - 1; がおかしいです。その場合、以下です。 seisu_length = String.valueOf(len).length() - 1; 違うのならば、lenの値をどうやって取得しているか、開示してください。

noname#173931
質問者

お礼

さっそく回答していただきありがとうございます。 申しわけありません。こちらの説明に不備がありました。 len は計算結果の文字列の length() です このまま質問を続けさせていただくと もし、他に回答していただけるかたがいますと、 混乱させてしまうことになりますのでいったん削除させていただき、 あらためて質問させていただきたいと思います とにかく、貴重な時間をさいての回答、ありがとうございました。

関連するQ&A

  • eclipse if を判定しないのですが

    こんにちは。趣味でプログラミングをしているものです。 さっそくですが、質問させていただきます。 文具店などで千円くらいで販売している電卓を再現しようとしているのですが、 コーディングが終わり、動作を確認しているのですが やはり、多くの不具合が出ていて、修正しようとしているのですが、 その中で、すこし奇妙に思えるようなものが発生してしまいました。 電卓で計算した結果の文字列を表示桁数に収めるようにする、 あるいは桁のあふれがあった場合、例外を投げる、というメソッド において、 単純な条件分岐を判定しない、というもののように思えるのですが、 以下にその抜粋したものを説明させていただきます。 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) ) //(ア) { gap = seisu_length - 12; overflag = true; retstring = retstring.substring( 0, 12 ); //test statement System.out.println( "(4)" ); // } len int 計算結果を表す文字列のlength()により、長さを格納 seisu_length int 整数部分の桁数、再現しようとしている電卓が 整数部分の桁数で表示桁のあふれを判定しているので gap int 再現しようとしている電卓が、あふれている桁数の情報を          答えの文字列の先頭から数えたインデックスにドットを 挿入するので overflag boolean 桁あふれの場合の処理に移るためのフラグ retstring String 表示桁数分の計算結果の文字列 このメソッドの戻り値 test statement は変数の値をみたり、このブロックに到達しているのか 確認しています。 上記の(ア)の部分の判定で ブロック内部に移らないのですが コードに誤りはないように思えるのですが eclipse に不具合が発生している、 ということでしょうか? eclipse をふたたびインストールというか 解凍して配置したほうがよいのでしょうか? ご存知のかた、教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • Java 電卓を作っているのですが・・・

    こんにちは。 趣味でプログラミングをしているものです。 Java で電卓を再現しようとしていて、 コーディングが終わり動作を確認しているのですが、 わからないところがあるので質問させていただきました。 よろしくおねがいします。 平方根を求めるときなのですが、3や5などはある程度正確に求められている と思うのですが、 平方根を求めたとき整数になるもの 例えば9などは小数のまま表示されてしまいます。 電卓で表示され得るすべての実数について平方根を求めるには ニュートン法がよいと思うのですが・・・ 二点ほど質問させていただきます。 ------------------------------------ 質問A まず、BigDecimal型の平方根を求めて、 その toString() から得られた文字列を メソッドvalidControl( String value ) に渡すのですが その冒頭で末尾から先頭方向に続く'0' の列を取り除きたいのですが そのために、変数の中身をみてみたのがこの質問の下部のほうにある (ア) (イ) です。 sqrt(() などの演算結果でえられた文字列のうち 信頼できる範囲以下の文字列を validControl で切り取りたいのですが プロが実際に電卓を作るとしたら、 どのような処理になるのでしょうか? ------------------------------------ 質問B 平方根を求めるメソッドsqrt 内で二分法の処理では 除算のスケールを 64 に指定していますが、 実行結果(ア)(イ)の文字列の長さが異なるのは なぜでしょうか? ------------------------------------ private BigDecimal sqrt( BigDecimal value ) { BigDecimal two = new BigDecimal( "2" ); BigDecimal x = value.divide( two ); BigDecimal last_x = BigDecimal.ZERO; BigDecimal gap = x.subtract( last_x ); BigDecimal range = BigDecimal.ONE.movePointLeft( 64 ); BigDecimal t; while( gap.compareTo(range) > 0 ) { last_x = new BigDecimal( x.toString() ); //t = value.divide( x, 64, BigDecimal.ROUND_DOWN ); //(イ) //test statement t = value.divide( x, 64, RoundingMode.UP ); // (ア) // x = x.add( t ).divide( two ); gap = x.subtract( last_x ).abs(); } return x; } -------------------------------------- private String validControl( String value ) throws KETAException { String retstring = ""; boolean overflag = false; int idx1 = value.indexOf( '.' ); int gap = 0; int seisu_length = 0; // 整数部分の文字列の長さ int len = value.length(); int start = len-1; int idx2 = start; System.out.println( "(0)" + value ); System.out.println( "(1)" + String.valueOf( start ) ); while( value.charAt( idx2 ) == '0' ) { idx2 --; } if( idx2 != start ) { value = value.substring( 0, idx2 + 1 ); len = value.length(); } System.out.println( "(2)" +String.valueOf( idx2 ) ); // 以下省略 -------------------------------------- (ア) を実行したときの結果 (0) 3.000000000000000000000000000000000000 00000000000000000000000000000546875 (1)72 (2)72 --------------------------------------- (イ) を実行したときの結果 (0) 2.999999999999999999999999999999999999 999999999999999999999999999996875 (1)70 (2)70 -------------------------------------- 長文になり申しわけありませんが ご存知のかた教えていただけないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • java 素数判定

    入力した数字が整数か否かを判定するjavaプログラムを作っています。 以下の通りコンパイルして実行しました。これだと実行したときに どんな数字を数字を入力しても「31は素数です。 」となります。 入力した数字を判定させるにはどのようにしたらいいのでしょうか? class Sosuu { public static void main (String[] args) { int n = 31; boolean isPrime = true; for (int i = 2; i <= n - 1; i++) if (n % i == 0) { isPrime = false; break; } if (isPrime) System.out.println(n + " は素数です。"); else System.out.println(n + " は素数ではありません。"); } }

    • ベストアンサー
    • Java
  • JAVAで素数判定

    JAVAの勉強をしてます 練習問題で、素数判定のプログラムをしているのですが。 1~14までの判定はうまくいきますが、15の判定の時に素数であると表示されて困ってます。どなたかわかりませんか? //読み込んだ数字 n が 15 の場合 if(n == 1) System.out.println("素数ではありません。"); if(n == 2) System.out.println("素数です。"); for (int i = 2; i < n; i++) { if (n % i == 0) { System.out.println("素数ではありません。"); break; } else { System.out.println("素数です。"); break; } } --結果---------------------------------------------- 素数です

    • ベストアンサー
    • Java
  • 足し算するプログラム

    タイトルの通りですが足し算をするプログラムを書いてみました。 第一引数を第二引数を足し算するのですが引数に「001」や「002」などの数字が入力された時に足し算した結果として素直に「00*」と足し算が出来ません。何かいい方法は無いでしょうか?教えてください。 import java.text.*; class Tashizan { public static void main(String[] args) { try { if(args.length == 0) { System.out.println("引数を整数値で入力して下さい。"); } else if(args.length == 1) { System.out.println("引数を整数値で2つ入力して下さい。"); } else if(args.length == 2) { int a = Integer.parseInt(args[0]); int b = Integer.parseInt(args[1]); if(a <= 999999999 && b <= 999999999) { int wa = a + b; System.out.println(a + "+" + b + "の和は" + wa + "です。"); } else { System.out.println("入力した桁数を9桁以下か確認してください。"); } } else { System.out.println("引数は整数値で2つ入力して下さい。"); } } catch(NumberFormatException nfe) { System.out.println("整数値を2つ入力して下さい。"); } catch(Exception e) { System.out.println(e + "エラー発生!処理を終了します。"); } } }

    • ベストアンサー
    • Java
  • JavaでXORによる暗号化

    JavaでXORによる暗号化について調べていたら下記URLのサイトを見つけました。 http://www.eeb.co.jp/2007/07/_10_1.html そこでサンプルにあった下記プログラムをvalue と key を変えて実行してみたところ value の中の「は」、「で」がうまく復元されず文字化けしてしまいました。 どこが悪いのかよくわからないのですがお分かりになられる方がいらっしゃいましたら 教えていただけますでしょうか。 public class XorTest { //================================================== // メイン //================================================== public static void main(String[] args) { String value = "abcd本日はお日柄もよろしいようで"; String key = "1"; // 暗号化前出力 print("暗号化前", value); // 暗号化 byte[] byteEncodeArray = encode(value.getBytes(), key); value = new String(byteEncodeArray); // 暗号化後出力 print("暗号化後", value); // 復元 byte[] byteDecodeArray = decode(value.getBytes(), key); value = new String(byteDecodeArray); // 復元後出力 print("復元後", value); } //================================================== // 暗号化 //================================================== private static byte[] encode(byte[] src, String key) { byte[] byteKeyArray = new byte[0]; byte[] byteEncArray = new byte[src.length]; // キーの文字列を変換する文字列をカバーするまで繰り返す while(byteKeyArray.length < src.length) { byteKeyArray = (new String(byteKeyArray) + key).getBytes(); } // 変換 for (int i = 0; i < src.length; i++) { byteEncArray[i] = (byte)(src[i]^byteKeyArray[i]); } return byteEncArray; } //================================================== // 復元 //================================================== private static byte[] decode(byte[] src, String key) { return encode(src, key); } //================================================== // ダンプ文字列取得 //================================================== private static String getDump16(byte[] value) { StringBuffer buf = new StringBuffer(); for (int i = 0; i < value.length; i++) { String hex = Integer.toHexString((int)value[i] & 255); // 4桁に揃える hex = "0000" + hex; hex = hex.substring(hex.length() - 4, hex.length()); // バッファに追加(空白区切り、10桁ずつ改行) buf.append(hex + (i % 10 == 9?System.getProperty("line.separator"):" ")); } return buf.toString().trim(); } private static void print(String title, String value) { System.out.println("【 " + title + " 】"); System.out.println("-----------------------------"); System.out.println(value); System.out.println(getDump16(value.getBytes())); System.out.println(); System.out.println(); } }

    • ベストアンサー
    • Java
  • Javaで九九の計算

    今、Javaの勉強をしてる者です。勉強本の中に九九の問題があり、正しく動作することを確認したのですが、 入力された値が数値以外のものだった場合に、再入力させるプログラムに機能アップしたいと欲が出てきました。 現状のプログラムでは、入力値が整数でない場合、NumberFormatException で判定をして次の回に進んでしまってます。 int result = Integer.parseInt(line); の戻り値を判定して、整数でない場合に再入力させれば良いのかと予想したのですが、どう記載すべきかわかりません。 そもそもこの考え方は間違っているのか、別の方法が良いのかご教示いただけませんでしょうか。 --- import java.io.*; public class KuKu4 { public static final int max_question = 10; public static void main(String[] args){ int goodAns = 0; for(int i=0; i < max_question; i++){ boolean check = showQuestion(i+1); if(check){ goodAns++; } } double rate = (goodAns * 100 / max_question) ; System.out.println(""); System.out.println("正解は" + goodAns +"問"); System.out.println("間違いは" + (max_question - goodAns) +"問"); System.out.println("正答率は" + rate +"%"); } public static boolean showQuestion(int question){ int x = (int)(Math.random() * 9) + 1; int y = (int)(Math.random() * 9) + 1; BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); try{ System.out.println("[第" + question + "問]" + x + " * " + y + "== ?"); String line = reader.readLine(); int result = Integer.parseInt(line); if(x * y == result){ System.out.println("正しい"); return true; }else{ System.out.println("正しくない"); return false; } }catch(IOException e){ System.out.println(e); }catch(NumberFormatException e){ System.out.println("入力された値が正しくない"); } return false; } }

  • 全角スペースの判定について

    全角のスペースを文字コードにて判定したいのですが、 うまく判定できません。 0x8140だと思うのですが。。。。 以下のソースを実行すると半角は通るのに全角は NGになってしまいます。どなたがご存知方はご教授のほど宜しくお願いいたします。 public class test {  public static void main(String[] args) {      String s = "| | |";      for (int i = 0; i < 4; i++) {           System.out.println("" + s.charAt(i));   }      char c = s.charAt(1);    if (0x8140 == c) { System.out.println("全角判定OK");    } else { System.out.println("全角判定NG");    }   c = s.charAt(3);    if (0x0020 == c) { System.out.println("半角判定OK");    } else { System.out.println("半角判定NG");    }  } }

    • ベストアンサー
    • Java
  • javaプログラミングについて!

    ただいまjavaプログラミングの勉強をしております。 そこで数字を複数回入力させ、-1を入力すると終了し、その数字の最大、最小、平均を出力するプログラムを作っているのですが、 public static void main(String[] args) { int max = 0; int min = 100; int sum = 0; int count = 0; Scanner sc = new Scanner(System.in); System.out.println("正の整数を入力してください"); int n = sc.nextInt(); while (num01 != -1){ System.out.println("正の整数を入力してください"); sum += n; n = sc.nextInt(); count++; if(max < n) max = n; if(min > n) min = n; } System.out.println("入力された整数の最大は" + max); System.out.println("入力された整数の最小は" + min); System.out.println("入力された整数の平均は" + sum/count); } } このようなプログラミングが作れたのですが、たとえば30と10を入力したときに 最大10 最小-1 平均20 と表示されてしまいます。色々試行錯誤してみたのですが、改善されなかったため質問させて頂きました。原因と解決方法を教えて頂きたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • javaプログラミングについて

    ただいまjavaプログラム勉強中でhit&blowを制作しております。 public static void main(String[] args) { Scanner scan = new Scanner(System.in); Random rand = new Random(); int[] answer = new int[4]; int[] input = new int[4]; int[] Number = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, }; int x = 10; for (int i = 0; i < 4; i++) { int select = (int) (Math.random() * x); answer[i] = Number[select]; Number[select] = Number[x - 1]; x--; } int count = 1; while (true) { System.out.println("4桁の異なる数値を入力"); int str_input = scan.nextInt(); // 代入 for (int i = 0; i < 4; i++) { input[i] = str_input; } // hit int hit = 0; for (int i = 0; i < 4; i++) { if (input[i] == answer[i]) { hit++; } } // blow int blow = 0; for (int i = 0; i < 4; i++) { for (int j = 0; j < 4; j++){ if (i != j && input[i] == answer[j]) { blow++; } } } if (hit == 4) { System.out.println("4hit"); System.out.println("正解まで " + count + "回"); break; } else { System.out.println("Hit:" + hit + " Blow:" + (blow - hit)); count++; } } } } 数字が4桁で作っているのですが、数字や4桁以上を入力してしまった場合の表示は後にしようとして、先にhitとblowの判定を作ろうとしているのですが、上記で実行したところhitとblowの判定がされずhit:0blow:0と表示されてしまいます。解決策を教えてください。 自分で作ってみたものの、hit blowの判定方法があっているかも自信がないです。

    • ベストアンサー
    • Java

専門家に質問してみよう