- ベストアンサー
クラス宣言の身長と体重の比較
- クラス宣言の身長と体重の比較に関するプログラムで、入力エラーメッセージが表示されている問題があります。
- 入力エラーの原因は、条件判定の不正確さです。正しい身長と体重の範囲外のデータを入力しているため、エラーメッセージが表示されています。
- 例えば、205.600 cm の身長データと -85.900 kg の体重データを入力しましたが、これらのデータは条件に適合しないためエラーが発生しています。正しい入力データを使用する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
・身長だけ範囲外ならエラー2 ・体重だけ範囲外ならエラー3 ・両方範囲外ならエラー1 ということなら > if(!(ht>=110 && ht<=200)){ これは「身長が範囲外」となります。 しかし、体重についてはなんのチェックもしていません。体重が範囲内でも範囲外でも、この条件が成立つので「身長だけが範囲外」という条件にはなりません。エラー1の条件も、このifが成立します。 対処法は 方法1)順番を入れかえて、エラー1になる条件を最初に記述する 方法2)エラー2の条件に「体重は範囲内」、3の条件に「身長は範囲内」というのを加える。 方法3)else if で継げるのではなく、ifの入れ子構造にする あとは細かくなりますが > if(ht>=110 && ht<=200 && wt>=0){ とここではwt>=0を範囲内としているのに > else if(!(wt>0)){ ここでは wt>0が範囲内になっています。 public void calculate(double ht, double wt) { // 何度も出てくるので、変数に入れておく boolean validHeight = (ht>=110 && ht<=200); boolean validWeight = (wt>0); // 方法1 if( validHeight && validWeight ) { (正しい計算は略) } else if ( !validHeight && ! validWeight ) { // エラー1を最初に判定 }... // 方法2の場合。 if( validHeight && validWeight ) { (正しい計算は略) } else if ( !validHeight && validWeight ) { // エラー2は身長だけ範囲外なので、体重は正しいことを明示 }.... または // 方法3 if ( validHeight ) { //ここは身長が正しい場合 if ( validWeight){ // 身長も体重も正しい→計算 }else{ // 身長だけ正しい→エラー2 } } else { //ここは身長が範囲外 if ( validWeight){ // 体重だけ正しい→エラー3 }else{ // ともに範囲外→エラー1 } }
その他の回答 (1)
- shiren2
- ベストアンサー率47% (139/295)
1番に行かない理由は、その前の3番でストップしているからです。 // ht=205.6; wt=-85.9 calculate(205.6, -85.9); // htが200よりも高いのでエラー3でストップ else if (!(ht>=110 && ht<=200)) { 最初のifで入力チェックを済ませてあるので、その後のelse ifは冗長です。 最後のelseだけで充分ではないでしょうか。 if(110 <= ht && ht < 200 && 0 < wt) .... }else{ System.out.println("入力エラー1:身長データ"+ht+"cmと体重データ"+wt+"kg"); System.out.println("110以上200cm未満の身長で、 0kgより重い体重でしか計算できません。"); }