質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

6回答

2734閲覧

boolean型変数の働きについて

ora.

総合スコア10

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2016/01/18 04:20

public static void main(String[] args){
for(int testNumber=2;testNumber<=100;testNumber++){

boolean sosu=true;

for(int i=2;i<n;i++){
if(n%i==0)
sosu=false;
break;
}

if(sosu){ System.out.println(testNumber);

}
}
}

このコードにおける、
boolean sosu=true;
のところと、
sosu=false
のところがどういう働きをしているのかわからないのですが、どなたか教えていただけないでしょうか。
つまるところboolean型変数の意味がよくわかっていません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答6

0

Java

1boolean sosu=true;//素数である。 2for(int i=2;i<n;i++){ 3 if(n%i==0){//nはiで割り切れる。 4 sosu=false;//素数ではない。 5 break; 6 } 7}

コードにコメントを追記しました。

このコードは数字は「素数」、「素数ではない」かを調べるものですよね。このように特性が二つの値しかとらない時に使うのがbooleanです。

投稿2016/01/18 04:56

yona

総合スコア18155

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

booleanは真(true)偽(false)の二つの状態を表す型名です。

提示されたプログラムは、素数を求めているようですが・・・このままでは動きません。
まずnがいません^^;
なので n= testNumber としてかんがえると、testNumber が2からnまでで割れるなら素数ではない!
最初はboolean sosu=true;で素数である・・・とする
if(n%i==0)nまでの数で割り切れたらsosu=false; 素数ではなかった!・・・でループを抜ける!
・・・としようとしているようですが・・・そうはなりません。
どこからかの引用であれば、間違いが無いか確認してください。

投稿2016/01/18 04:51

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

boolean型は真偽を表す型です。
ifの条件分岐やforの継続条件などに使います。
ifの括弧に入れたbooleanがtrueならそのブロックを実行しますが、falseなら無視します。

また、何も変数に入れて使う必要はなく、貴方自身のコードでも変数を使わずbooleanを使っています。

java

1 for(int i=2;i<n;i++){ 2 if(n%i==0)

ここで使われている<==などを「比較演算子」と呼ぶのですが、
この演算の結果がtrueかfalseのboolean型で返ってきます。
その結果次第で処理を行ったり行わなかったりするわけです。

さて、ここでboolean型の変数sosuが登場するポイントを見てみましょう。

java

1boolean sosu=true;

sosuが宣言され、trueで初期化されました。このまま何も起きなければsosuはtrueのままです。

java

1 for(int i=2;i<testNumber;i++){ 2 if(testNumber%i==0){ 3 sosu=false; 4 break; 5 } 6 }

(ifのブロックを加え、nをtestNumberに変えました。)
次にここです。
testNumberを2から順に試し割りしています。割り切れるものがあれば素数ではないので、sosuをfalseに変えてループを抜けます。
割り切れるものがなければsosuはtrueのままループを抜けます。

java

1 if(sosu){ 2 System.out.println(testNumber);

さてここでsosuがどっちなのかif文で見ています。
先ほどの過程で割り切れるものがあった場合にはsosuがfalseになっているため、testNumberは出力されません。
割り切れるものがなく、sosuがtrueのままここにたどり着ければ、晴れてtestNumberが出力されます。

投稿2016/01/18 14:20

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

コードを拝見したところ「変数n」の宣言が見当たらないので、もしかしたら間違っているかもしれませんが・・・
ソースをざっくり読むとこんな感じかなと思います。

for(2~n)の間にn%i==0に合致する整数が存在するか、否かを確認していて
・存在する → 何もしない
・存在しない→ System.out.println(testNumber)を実行

上記から、このコードの「sosu」は「for内でnがn%i==0に合致しないことを示すフラグ」であり、
sosu==ture ならば「n%i!=0」なので「System.out.println(testNumber)を実行
sosu==falseならば「n%i==0」なので、何もしない

ですかね。

投稿2016/01/18 05:09

hemhem

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ベストアンサー

変数名や雰囲気を考えるに、素数求めるプログラム・・・・でしょうか。

この2つ目のfor文で登場する、「n」がわからないのですが・・・

for(int i=2;i<n;i++){

きっとこの処理以前のどこかに、
int n = testNumber

という処理を入れ忘れたものとして考えます。

boolean 型は、「真」か「偽」のシンプルな値を保持するための変数です。

最初のfor文ループの先頭の

java

1 for(int testNumber=2;testNumber<=100;testNumber++){ 2 3 boolean sosu=true;

ここで、sosuという変数をメモリに用意し、true(真)という値を同時に与えています。
「先ず一旦、素数ということにしておく」わけですね。

次に、

java

1 for(int i=2;i<n;i++){ 2 if(n%i==0) 3 sosu=false; 4 break; 5 }

では、もしも n%i の剰余が0だったら・・・nがiで割り切れるならば、sosuをfalse に設定しなおしてます。
変数iは、2~n-1まで増加していきますから、ここの処理を要約すると

「Nより小さい整数の少なくとも1つでNが割り切れるならば、N素数ではない」

と言えます。

このforループを抜けた後、もしも素数であった場合は、その数を結果を表示してますね。

java

1 if(sosu){ 2 System.out.println(testNumber); 3 }

素数判定のアルゴリズムとしては、ちょっと冗長になります。
同様のアルゴリズムでは、「エラトステネスの篩」などが有名で、しかも簡単です。

boolean という変数の型が無い場合は、int型などで、真を「1」偽を「0」と対応させればよいのですが、
この変数はint型のため、-2とか5000とかも許容してしまうのが問題ですね。

大規模な開発で、変数の仕様がプログラマに共有しずらく、ついつい他の値を入れてしまって、バグがでてしまったり、安易に「2」の場合はこう、「-1」の場合はこういう処理にする、みたいに区分値を増やされて複雑化してしまったりしてしまいます。

投稿2016/01/18 05:00

Toyoshima

総合スコア422

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

「真」と「偽」です。trueが真でfalseが偽です。
if文は条件式が真の場合実行します。ネストしてあるfor文で、1とその数以外で割り切れるか調べています。割り切れる数があれば、その数は素数ではない、ということになるので、sosuをfalseとし、if文は実行しません。
しかし変数nがどこにも宣言されていないので、このままではコンパイルエラーになります。

投稿2016/01/18 04:52

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問