• 締切済み

booleanについて

お世話になります。 javaを始めて10日程の初心者です。 boleanの使い方がよく分かりません。 例: public class a { public static void main(String[] args){ // "あなたは20歳以上ですか?(Yesならtrue、Noならfalse)"; boolean isAdult = true; if (isAdult) { System.out.print(" 成人です "); } else { System.out.print(" 子供です "); } } } これを実行すると、”成人です”が出力されます。 例えばbooleanを使用せずに int age; if(age>=20) { System.out.print(" 成人です "); } else { System.out.print(" 子供です "); } とすれば解決できるのですが、 booleanを使用しようとすると理解できなくなります。 宜しくお願いします。

みんなの回答

  • DiveKo
  • ベストアンサー率70% (7/10)
回答No.4

> てことは↓のif文は意味なかったってことですよねぇ。(^^; 「trueをfalseにfalseをtrueに逆転」してしまうと、意味はないですね。 (「trueをfalseにfalseをtrueに逆転」しない元のプログラムではIF文の内容は意味があります。つまり、「trueをfalseにfalseをtrueに逆転」してしまうとプログラムが変わってしまいます。) > Exception in thread "main" java.lang.Error: Unresolved compilation problem: 訳:スレッド "main"内で例外:解決できないコンパイル問題 > break cannot be used outside of a loop or a switch 訳:breakは、ループもしくはswitchの外側では、使えません。 っとコンパイラがいってますよ。 >何がこんなに理解できないのか自分でもよく分からなくなってきました。 色々試しながら少しずつ理解するしかないかも。 >んーboleanで躓いてても前に進まないので、そのうち自然に理解できるだろうくらいに楽観的に考えて、とりあいず保留にしときます。  はい、もし理解ができなければ、今は保留でいいと思います。 例文などを見て、自分で打ち込み、少しずつ理解していけば、その内、理解できると思いますよ。 焦らずに、がんばって下さい。

  • DiveKo
  • ベストアンサー率70% (7/10)
回答No.3

>下記は、5科目の成績を入力して平均を出すプログラムです。 booleanは真と偽なので、 このプログラムでのbooleanの意味は、ユーザが成績を入力した時に負の数だったら、wrong=false(失敗)にし、終了させるプログラムのようです。 一般的に成績が負の数だった場合、平均値がおかしくなりますよね? このような判定処理(成功又は失敗)にBooleanを使用します。別にint型を使用して、wrong = 1(成功)/wrong = -1(失敗)でも可能ですけど。Booleanの方が、明示的に成功/失敗が分かるので良いと思います。実際、C言語ではBoolean型がないため、上述の通り、int型で代用していますよ >例えはtrueをfalseにfalseをtrueに逆転しても同じと思うんですが 同じでは、ないと思いますよ。 例えば、正の数を5回代入していった場合、wrong=falseのままです。 そうすると「if(wrong){ //例えばwrong=falseにする。」の処理の時に、「double avg=sum/5;」以下ではなく、Else文以下の「wrong=false; //例えばtrueにすると平均点が出力されない??」を実行されるため、『平均点を出力しません』が起こると思います。 (試しに、「if(wrong){ //例えばwrong=falseにする。」の前に「System.out.println("合計:"+sum);」を挿入してみてください。合計は正しく算出されると思います) >それと↑のwrong=false; の下にbreak;を置くと赤の波線になります。・・・ エラー表示を教えてください。

inuoyogi7
質問者

補足

丁寧なご回答ありがとうございます。 DiveKoさんが言われる通り、「System.out.println("合計:"+sum);」をif文の前に置いても正しく算出されました。 てことは↓のif文は意味なかったってことですよねぇ。(^^; if(wrong){ //double avg=sum/5; //System.out.println("平均点:"+avg); } else{ wrong=false;         } それと、break;を置いた時のエラー表示、下記の通りです。 Exception in thread "main" java.lang.Error: Unresolved compilation problem: break cannot be used outside of a loop or a switch at A.main(A.java:23) booleanやっぱりまだしっくりきません。 何がこんなに理解できないのか自分でもよく分からなくなってきました。 色々試しながら少しずつ理解するしかないかも。 んーboleanで躓いてても前に進まないので、そのうち自然に理解できるだろうくらいに楽観的に考えて、とりあいず保留にしときます。 ありがとうございました。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

boolean のデフォルトの初期値は false です. だから boolean isAdult; と boolean isAdult = false; は同じ意味です.

inuoyogi7
質問者

補足

回答ありがとうございます。 度々申し訳ありませんが、やはりbooleanの使い方、よく理解できてないように思います。 下記は、5科目の成績を入力して平均を出すプログラムです。 booleanは真と偽なので、例えはtrueをfalseにfalseをtrueに逆転しても同じと思うんですが、コンパイルすると平均点を出力しません。 何故でしょうか? boolean wrong=true;   //例えばfalseにする。 double sum=0; for(int x=1;x<=5;x++){ System.out.print("第"+x+"科目の成績:"); double score=in.nextDouble(); if(score<0){ //負の数の時プログラム停止 wrong=false;       //例えばtrueにする。 break; } sum=sum+score; } if(wrong){ //例えばwrong=falseにする。 double avg=sum/5; System.out.println("平均点:"+avg); } else{ wrong=false;        //例えばtrueにすると平均点が出力されない?? } それと↑のwrong=false; の下にbreak;を置くと赤の波線になります。あえてbreak;を置く必要はないんですが、負の数の時はbreakすると言う意味で付け加えることは文法上は正しいと思うんですがそうじゃないようです。何故間違いなのか合わせて教えて頂ければ助かります。 宜しくお願いします。

  • nimua
  • ベストアンサー率21% (8/38)
回答No.1

booleanとは真偽値です。 つまり成人かどうかを求める計算式「age >= 20」の結果と同じ内容が 格納されていいます。 表現を変えると、 boolean isAdult = (age >= 20); このようになります。 「age >= 20」の結果がtrueになるのか、falseになるのか、 そういう情報を保持するデータ型です。

inuoyogi7
質問者

補足

ご回答ありがとうございます。 確かにnimuaさんのおっしゃるようにしたら解決できました。 nimuaさんの語句を分析すると、 boolean isAdult = (age >= 20);     →boolean (変数名) = (条件); となっています。 例えば (1) boolean isAdult; (2) boolean isAdult=true; (3) boolean isAdult=false; このようなときは、 (1) boolean isAdult;は真ですか?偽ですか? もし(1)が真だとすれば(1)と(2)は同じ意味?ですか? まだ理解できていないのでこの質問そのものがおかしいかもしれません。 お手数ですが返答頂きたいです。

関連するQ&A

専門家に質問してみよう