HOです。


久しぶりの投稿です。

徐々に気温も下がり、秋から冬へと季節の変化を感じるようになりました。

皆さま、お変わりないでしょうか。



「七転び八起き、Javaの道」シリーズの記事も早いもので3ヶ月たちました。

少なくとも週1回更新するよう頑張っていますが、

空いた時間を見つけての投稿の為、更新タイミングがまちまちになりがちですが、

定期的に訪問してくださったり、ペタをつけてくださったり、ありがとうございます。


また、最近では、

読者登録してくださる方や、コメント投稿してくださる方もおられるようになりました。

記事の投稿でいっぱいいっぱいのところもあり、なかなかお礼が言えてないのですが、この場をお借りし、感謝いたします。



しばらく投稿が空いてしまいましたが、今後とも頑張っていきます!!!!!!

「七転び八起き」ですから、目標達成までは、頑張り続けます!

今後ともよろしくお願い致します。





では、本題に入って行きたいと思います。


ついに、前回までで、第2段階「キーボード入力から意図したデータを受け付ける」ことができました。

今回以降、第3段階として「受け付けたデータから簡単な計算をし、結果を表示する」ことを目標に頑張って行きたいと思います。



ところで、どんな計算をしましょうか?


第2段階で、

  「分量」
  「(入力した人数が)何人分の分量か」
  「何人の分量を知りたいか」
の3つのデータを受け取れるようにしました。


第3段階では、この受け取ったデータを使って、

希望する人数の分量を表示するように改良したいと思います。




この計算を出すには、

「分量」÷「分量の人数」×「知りたい人数の分量」

という計算をすることになります。




ではまずは、簡単な計算プログラムを作ってみましょう。

  

  今回も、切干大根2人分の分量25gを、

  10人分にした際の分量を計算してみたいと思います。



----------------------------------------------------------


class TestKeisan{

public static void main(String args[]){

// ①

  double bunryou = 25;

int ninzuuA = 2;

int ninzuuB = 10;


double kekka;


// ②

kekka = bunryou / ninzuuA * ninzuuB;


// ③

System.out.println(ninzuuB + "人分の分量は、" + kekka + "です。");


}

}

----------------------------------------------------------


①で、レシピの分量・人数、知りたい人数、計算結果を入れる変数「kekka」を宣言し、

②で、その計算をして、その結果を変数「kekka」に入れ、

③で、結果を画面表示しています。


このプログラムをコンパイルし、実行すると、

ドリームサポートネットーワークのブログ-h01 単純な計算

となりました。



簡単ですね!


ここでのポイントは「演算子」を使うことでした。

 さて、上のプログラムでは演算子が何種類出てきたでしょうか?

 次回は、この答えを含め、演算子について詳しく取り上げます。



今週はしばらく忙しい日が続きますので、

次回更新は、11月8日23時位を目標に頑張りたいと思います。

どうぞよろしくお願い致します。

お久しぶりです。HAです。
随分と間が空いてしまいましたが皆さんお元気でしょうか。

さて、先回まででWiresharkでフィルタを使ってみたというお話でしたが
やはりWiresharkで押さえなければいけない基本は
「各プロトコルのフォーマットの理解」だと思います。

それで、それを私なりに少しずつ書いていきたいと思います。
わからない部分や間違いがあったら教えてください。
よろしくお願いいたします。



EthernetⅡ



まず、下位層のプロトコルから見ていくとすると
「EthernetⅡ(イーサネットツー)」からスタートしたいと思います。



EthernetⅡとは
ネットワークインターフェース層のプロトコルです。
これはTCP/IPの参照モデルでのお話ですが
OSI参照モデルに直すならば、
ネットワークインターフェース層は
物理層とデータリンク層の2つを含む階層となります。

【OSI参照モデルとTCP/IP階層の説明は以下のページがわかりやすかったです】
 → TCP/IPプロトコルの階層構造(@IT) 


IPアドレス以前の階層になるので
こちらでは相手を見分けて1対1で通信するために
お互いのMACアドレスを使うわけですが、

通常MACアドレスは最初の半分がNICカードを作った
ベンダーさんの固有番号(?というのか知らないが)
そして残りの半分はそのカードだけの固有の番号になります。
全部合わせてオリジナルのアドレスになるわけです。


そのアドレスに対して通信を行いたいのですが
当然ながら最初からネットワーク内のほかのパソコンが
どのMACアドレスを持っているかなんて分かりません。

それでEthernetⅡとそれに続くプロトコルがそれを見分ける仕事をします。
EthernetⅡはこのような内容になっています。

ドリームサポートネットーワークのブログ-Ethernet2

プリアンブルで同期→宛先MACアドレスを記載→送信元MACアドレスを記載→イーサタイプを記載→データを記載→フレームチェックシーケンス(FCS)、終わり



まず通信のための同期がはいってそのあとに相手先のMACアドレスを入れます。
でも最初から相手先のMACアドレスを知っているわけはないので
最初にここはネットワーク全体に要求を送るブロードキャストが入ります。

ということでブロードキャストが送出された時には同一ネットワーク内の
すべてのカードに受信され、そのカードがデータとFCSを切り離してチェックをし、
問題がなければ上位層に挙げます。

ブロードキャストではなく宛先MACアドレスが決まっているパケットなら
該当するNICカードのみがそれを上位層に挙げ、それ以外のカードはパケットを破棄します。

ここまででEthernetⅡの仕事は終わりです。
あとは上位層が仕事をしてくれるということだと思います。


次回はその他細々したEthernetⅡについて書きたいと思います。
間違っている部分がありましたら是非教えていただければ幸いです。





ちょっと思ったのですがこのプロトコル内のデータというのは
どんな内容が入っているのでしょうか?...


HA Wiresharkの勉強ープロトコルーEthernetⅡその1

HOです。


前回でついに、"Stringの森"ハイキングコースを踏破したわけですが、
今回からは本題に戻って、料理分量計算ツールのアレンジの続きをしていきたいと思います。


今回の説明は、こちら の記述の続きとなります。



さて、以下の文を改良しようとしているわけですが、
【改良前のプログラム】
--------------------------------------------------------------------
class InputTest{

  public static void main(String args[]){

    java.io.BufferedReader myReader =
      new java.io.BufferedReader( new java.io.InputStreamReader(System.in),1);


    try{

      System.out.println("文字を入力してください"); //①

      String myString = myReader.readLine(); //②

      System.out.println("入力された文字: " + myString); //③

    }catch(java.io.IOException e){
    }

  }

}
--------------------------------------------------------------------



この記述から、
  「分量」
  「(入力した人数が)何人分の分量か」
  「何人の分量を知りたいか」
の3つのデータを受け取れるようにアレンジしたいと思います。



それで、前回取り上げたように、
①を、
--------------------------------------------------------------------
System.out.println("レシピにある分量を記してください");
--------------------------------------------------------------------
に変更し、

②を、
--------------------------------------------------------------------
String myStringA = myReader.readLine();
--------------------------------------------------------------------
にします。



これで「分量」を受け取れるようにしましたが、

続いて、
「(入力した人数が)何人分の分量か」
「何人の分量を知りたいか」
も受け取れるようにアレンジしたいと思います。


それで、
--------------------------------------------------------------------
System.out.println(myStringA + "は、何人分か記してください");
String myStringB = myReader.readLine();

System.out.println("知りたい分量は何人分か記してください");
String myStringC = myReader.readLine();
--------------------------------------------------------------------
という記述を加えたいと思います。



ところで、ここで一つだけ新しい要素を考えてみたいと思います。
--------------------------------------------------------------------
System.out.println(myStringA + "は、何人分か記してください");
--------------------------------------------------------------------
の「myStringA + "は、何人分か記してください"」という部分です。

「myStringA」は、何度か取り上げたようにString型の参照型変数でした。
「"は、何人分か記してください"」の部分も、前回取り上げたように
「ダブルクォート("")」は特殊な文法で、Stringの実データを作成するものです。

では、String型(文字列)とString型(文字列)の間にある「+」は何でしょうか?

…これは、演算子です。

演算子と言うのは、足し算や引き算などでよく使われますが、
ここでは文字列と文字列を連結する役割を持っています。
演算子については、今回は簡単に触れるだけにしたいと思います。
詳しくは、次の第3段階に入ってから取り上げたいと思います。





以上で、欲しい3種類のデータが受け取れるようになりました。




次に③の部分ですが、
今回は計算はせず、入力されたデータをそのまま表示させたいと思います。
それで
--------------------------------------------------------------------
System.out.println("レシピの分量=「" + myStringA + "」");
System.out.println("レシピの人数=「" + myStringB + "人分」");
System.out.println("知りたい分量=「" + myStringC + "人分」");
--------------------------------------------------------------------
としたいと思います。




以上で、意図した入力を受け付けることができるようにアレンジできました。




アレンジしたあとの記述は以下のようになります。
--------------------------------------------------------------------
class InputTest{

  public static void main(String args[]){

    java.io.BufferedReader myReader =
      new java.io.BufferedReader( new java.io.InputStreamReader(System.in),1);


    try{

      System.out.println("レシピにある分量を記してください");
      String myStringA = myReader.readLine();

      System.out.println(myStringA + "は、何人分か記してください");
      String myStringB = myReader.readLine();


      System.out.println("知りたい分量は何人分か記してください");
      String myStringC = myReader.readLine();

      System.out.println("レシピの分量=「" + myStringA + "」");
      System.out.println("レシピの人数=「" + myStringB + "人分」");
      System.out.println("知りたい分量=「" + myStringC + "人分」");

    }catch(java.io.IOException e){
    }

  }

}
--------------------------------------------------------------------


では、いつも通り、これを実行してみましょう。


(※復習される場合、以下を参照。
①プログラムを保存(こちら
②コマンドプロンプトの設定(こちら
③コンパイル(こちら
④実行(こちらこちら ))



ちなみに、 今回、例として「切干大根の煮物」のレシピにある
「切干大根」の分量を入力してみたいと思います。

レシピには「2人分、切干大根25グラム…」と書かれています。
もちろん切干大根以外にも、人参や油揚げなどの分量も書かれていますが、
現段階では、「切干大根」だけに的を絞りたいと思います。


実行すると、まず以下のように表示されます。
ドリームサポートネットーワークのブログ-f02 InputTest2-1
レシピに書かれている「切干大根」分量は25グラムでしたので、
「25」と入力し、Enterを押します。


ドリームサポートネットーワークのブログ-f03 InputTest2-2
入力した「25」グラムが何人分の分量かですが、
レシピは「2人分」となっていましたので、
「2」と入力し、Enterを押します。

ちなみに、先ほど「myStringA」と「"は、何人分か記してください"」の間に「+」演算子がありましたが、ここで見事に文字列が連結されたことがわかりますね!


ドリームサポートネットーワークのブログ-f04 InputTest2-3
今入力したレシピの分量をもとに何人分の分量を知りたいかですが、
特にこだわりはないのですが、今回は「10人分」としようと思いますので、
「10」と入力し、Enterを押します。


ドリームサポートネットーワークのブログ-f05 InputTest2-4
全ての入力したデータが、
最後にまとめて表示されました。



もちろん、わたしが最終的に目指すのは計算して結果を出すことですが、
まず第2段階の目標としては、意図した入力を受け付けることでしたので、
「分量」「人数」「知りたい分量」を受け付けられたという点で、
第2段階の目標は達成としたいと思います。




次回は第三段階として、
この受け付けた値を使って計算を行ない、結果を表示できるように、
さらにアレンジしたいと思います。






最後に、今回の復習です。

 文字列と文字列を連結するには、演算子「+」を使う!