初心者のJavaプログラミング

プログラミングガチ初心者がIT業界を目指して頑張ります。

【第12回】初心者のJavaプログラミング【if文、for文の続き】

こんにちは。今日も暑くてだるいです。
今日はこの間やったことを元に実践とうか実際にif,forを使ってみよう的な感じでした。
その中で一番わからなかったなーと思ったのが、入力された数値が素数かどうかを判定するプログラム。
数学なんて忘れてますよー。素数って高校でやるんだっけ?習った記憶はあるけどあまり覚えていない。

てなわけでまずは素数の意味から先生が説明してくれましたw

素数(Prime Number)」
1と自分自身以外に約数をもたないもの。
です!

いつものごとく例を。
15で考えてみましょう。
15は{1, 3, 5, 15}で割り切れますね。
ここでいう自分自身とは15のことです。
これをみると15は1と自分自身(15)以外に約数を持っていますね。
よって15は素数ではないのです。

次に11で考えよう。
11は{1, 11}で割り切れます。
1と自分自身(11)以外に約数を持たないので、
11は素数です。

中学だか高校の時はこんな定義なんてきっちり覚えておかなかったなー。あの頃からこういうこともちゃんと意識していれば良かったぜw

そんなこんな素数の定義やらを加味してコードを書くとこんな感じになる。

class PrimeNumber {
  public static void main( String args[] ) {
    // String型のコマンドライン引数をint型に変換
    int num = Integer.parseInt(args[0]);

    if (num != 1) {
      // 判定用の変数
      boolean prime = true;
      // 入力された文字を2から割っていく。
      // その余りが0になったら1と入力された数自身以外で割れたことになる。
      // その場合はprimeにfalseを入れる
      for (int i = 2; i <= num - 1; i++) {
        if ((num % i) == 0) {
          prime = false;
        }
      }
      if (prime == true) {
        // 割り切れなかった(余り0にならない)場合
	System.out.println("素数だよー");
      } else {
	// 割り切れた場合
	System.out.println("素数じゃないよー");
      }
    } else {
      // 1は素数ではないので
      System.out.println("1かよ!");
    }
  }
}

コードのコメントを見てもらえば何をやっているか分かると思います。


条件文のところに入る演算子をざっと紹介しておきます。2種類あります。
関係演算子と論理演算子です。

関係演算子

== 左右のオペランドの値が等しい
!= 等しくない
> オペランドが右オペランドよりも大きい
< オペランドが右オペランドより小さい
>= オペランドが右オペランドより大きいor等しい(以上)
<= オペランドが右オペランドより小さいor等しい(以下)

論理演算子

&(アンパサンド) 論理積(AND)
|(パイプ) 論理和(OR)
^(ハット) 排他的論理和
! 否定
&& 論理積のショートカット
|| 論理和のショートカット
== 等しい
!= 等しくない

和なのにORだし、なんでANDじゃないんだし、と最初は混乱しそうになりましたが、覚えるしかないです。
また、排他的論理和とかなんじゃーって感じです。
論理演算子は字面で覚えるよりも、ベン図を使った方がイメージしやすいし分かりやすいと思います。


ちょっと時間がなくなってきてしまったので続きは次回にします。

ではおわり。