もしこうだったら、こうするのような文法
if文とswich文
if文
- 数字などを定義して、その数字より大きいか小さいかなどを評価する。
- 正しいのか、正しくないのか(真偽型・論理型)評価する。
— 省略 —
@Override
public void onEnable() {
Bukkit.getPluginManager().registerEvents(this, this);
例えば、
int number = 10;
int number2 = 5;
if(number 「カッコ内のこれを評価という」 >= 10 「もし、numberが10以上のとき」
&&「複数の指定をするときのもの」number2 >= 5 「もし、number2が5以下のとき」 )
仮に、ここで上記のコードを
number2 > 5とすると number2は条件を満たさなくなる。
他にも 「&&」の他に「||」 があり、「または」という条件になる。(どっちかの条件が、 trueのとき)
{
また、この部分のif文の中に、さらにifを書くことをネストというが、それをすると非常に読みにくく何をしているかわからなくなるなり、テストする場合にバグが生まれやすくなるので良くないとされる。
書かざるをえない場合があるが、できるだけほうが望ましい。(対処法については今後)
System.out.println(“A”); Aという文字を出力する。
}else「そうじゃなかったらという意味」if「追加条件」(number >= 5「numberが5以上であった場合」){
System.out.println(“B”); Bという文字を出力する。
}wlse{
System.out.println(“C”); Cという文字を出力する。
}
}
swich文
- スウィッチケース何かという言い方もする。
- きれいな書き方をしたいときに使う。
- 値で処理を分けるときに使う。
- java14くらいから->を使えるようになった。(それまでは、バグを生みやすい古い書き方があった)
例えば
上記の続き
— 省略 —
}wlse{
System.out.println(“C”); Cという文字を出力する。
}
— ここからが、swich文 —
swich(number){
case 1 -> System.out.println(“A”);
case 2 -> System.out.println(“B”);
case 10 -> System.out.println(“C”);
「numberの値が何(1 or 2 or 10)の場合に、なにを出力させるのかということ」
(この場合、上記でnumber = 10 としているので”C”が出力される。)
default「どれにも属さなかった場合という意味」-> System.out.println(“D”);もある
}
}
Minecraftへ実装
- pubric = どこでも使える。
- ここでは、privateを追記。
— 省略 —
public final class Main extends JavaPlugin implements Listener {
— この下に追記 —
pribate int count = 0;(数値型のcountという変数を持ったものをclassのなかで使える入れ物として用意している)
(デフォルトは、0なので、「=0」いらない)
(やろうとしていることは、しゃがみ度に1づつ足していって、割る2したときにあまりが0になったときに花火を
飛ばす)
ここで実装しているものは、ワールド全体に反映されるので、サーバーにいるプレイヤーは全体で共有されるため各プレイヤーがしゃがんだときは、その都度カウントされてしまう。
プレイヤーごとにする場合は、別の対応がひるようになる。
— 条件分岐は、この下に追記 —
— 省略 —
public void onPlayerToggleSneak(PlayerToggleSneakEvent e) {
// イベント発生時のプレイヤーやワールドなどの情報を変数に持つ。
Player player = e.getPlayer();
World world = player.getWorld();
if(count % 2 == 0)「もし、2で(%)「割ったとき」(0)の場合」
— 省略 —
firework.setFireworkMeta(fireworkMeta);
この下に
count++;(これだけでは、if文の中でしか足さないので1のままとなり花火が一回しか飛ばない
} else {
count++;(ifの中でなくてもカウントする。)
}
を挿入
ここで注意が出るのでその指示に従う。
すると
if文の外にcount++だけで良くなる。(IDAの機能を使って指示に従うだけできれいになるので利用していく!!)
その後buildして、プラグインの中のjarを置き換えてMinecraftで実行。 - 今回は、一発で成功!!
課題へのとりくみ
花火を素数の回数でしゃがんだときだけ飛ばす!!
難しかったこと
- 素数とはなんぞやということがまずわからない
調べてみると、1とその数自身以外に約数を持たない2以上の自然数であることが分かる。(小学生レベル??)
つまり、素数の例: 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97・・・ - どうしたらよいかピタリと止まって、何から初めて良いかわからなかったのでAIに投げてみた。
- なんとか答えが出てきたが、内容がわからず、より深い説明を求めました。
- ここでは、やはり、なんとなくの理解でしかないような気がしていますが、続きの学習で何らかのヒントがあるのではないかと思い、次に進んでいくことを優先!!
// しゃがんだ回数をカウント count++; BigInteger val = BigInteger.valueOf(count);
の部分のcountmを定義する方法がいまいちしっくりこない状態。
内容
- import java.math.BigInteger;を追加
- if (val.isProbablePrime(1)) {
- この行の説明
val
:- これは
BigInteger
型の変数です。count
(しゃがんだ回数)をBigInteger
に変換したものです。 - 例えば、もしプレイヤーが3回しゃがんだら、
count
は3になり、val
も3になります。 - valueOfとは、「変換する」という意味。
- これは
isProbablePrime(1)
:- これは
BigInteger
のメソッドで、「この数字は素数かどうか」を調べるためのものです。BigInteger
とは、大きな数字を扱えるようにするとともに、素数かどうかを判別できるコードのようです。 1
は精度を表しています。この数字が大きいほど、もっと正確に素数かどうかを判断します。
- これは
- なぜ素数と分かるのか?
- 素数の定義:
素数は、1とその数字自身以外で割り切れない特別な数字です。例えば、2や3は素数ですが、4や6は割り切れる数字があるので素数ではありません。
- 素数の定義:
- プログラムの仕組み:
isProbablePrime(1)
を使うことで、プログラムは内部でその数字が他の数で割り切れるかどうかを調べています。もし割り切れない場合、その数字は素数だと判断されます。
- 具体的な流れ
- プレイヤーがしゃがむたびに
count
が1増えます。 count
の値をBigInteger
型に変換し、その結果をval
に保存します。if (val.isProbablePrime(1))
の部分で、現在のcount
が素数かどうかをチェックします。- もし
count
が素数なら、青い花火を打ち上げて「○○ は素数です」とコンソールに表示します(ここで○○はしゃがんだ回数)。
- プレイヤーがしゃがむたびに
- 例として
- プレイヤーが1回しゃがむと、
count
は1になります。1は素数ではないので何も起こりません。 - 次にプレイヤーが2回目にしゃがむと、
count
は2になります。2は素数なので青い花火が打ち上げられ、「2 は素数です」と表示されます。 - さらに3回目にしゃがむと、
count
は3になり、これも素数なので同様に処理されます。 - このようにして、このプログラムではプレイヤーがしゃがんだ回数をカウントし、その回数が素数かどうかを判定しているのです。
- プレイヤーが1回しゃがむと、
- player.sendMessage(count + ” は素数です”);を追加することによって画面上に「〇〇は素数です!」と表示できるようになった。
- 現状、System.out.println(count + ” は素数です”);では、コンソール出力が画面には出てこない状態。
成功画像

コメント