<?xml version="1.0" encoding="utf-8" ?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title>ドリームサポートネットーワークのブログ</title>
<link>https://ameblo.jp/d-s-network/</link>
<atom:link href="https://rssblog.ameba.jp/d-s-network/rss20.xml" rel="self" type="application/rss+xml" />
<atom:link rel="hub" href="http://pubsubhubbub.appspot.com" />
<description>シスアドぐらいのレベルからはじめるIT技術者への道ネットワーク系、プログラム系、サーバ系などなど役立つメモやノウハウを書いていきます！</description>
<language>ja</language>
<item>
<title>dmsetupで遊ぶ</title>
<description>
<![CDATA[ 普通，LinuxでLVMと言うとvgcreate, vgchange, lvcreate... を思い浮かべます。<br>このような高レベルのLVMも十分高機能ですが，dm(device mapper)という低レベルのLVMもまた，とても強力です。<br>最近，弊社の仕事で使用する機会があり，おもしろいと思いましたのでご紹介いたします。<br><br><h3>一瞬で元に戻るディスク</h3><br>仮想マシンを起動後元にもどしたい，という要件があった場合，普通はddで上書きすると思います。<br>でも，同じような仮想マシン（それぞれ20GBくらい）が10個あって，全部を5分で戻したい！とか言われると結構悩みます。<br>lvcreateでスナップショットを作れば良さそうですが，戻せる向きが違う（スナップショットは，消すと最新のものだけが残る）のでそれも無理です。<br>このようなときに，dmsetupなら簡単に実装可能です。<br><br><b>注意:dmsetupの使い方やデバイスを間違えると，システム全体を破壊する可能性があります。</b><br><br>[やりかた]<br><ol><br><br><li> 元ネタのディスクを/dev/mapper/testvg-testlvとします。<br><br></li><li> 次に，十分大きな（変更を保持できる）大きさのファイルを作ります。この時，dd の seek引数でオフセットを指定すれば，スパースファイルが作成されるので高速です。ここでは，testlv.img とします。<br><br></li><li> losetup で， testlv.img をループバックデバイスと結びつけます。/dev/loop0 を使うとします。<br><br></li><li> ここで，新しいブロックデバイス（/dev/mapper/testvg-disk）を作成するために dmsetupを使います。 /dev/mapper/testvg-disk に対するすべての書き込みを，testlv.img に行なうようにします。読み出しは，変更されていないセクタは直接/dev/mapper/testvg-lvtestから読み出されます。<br><pre><br>echo 0 $(blockdev --getsize /dev/mapper/testvg-testlv) snapshot /dev/mapper/testvg-testlv /dev/loop0 n 64 | dmestup create testvg-disk<br></pre><br><br></li><li> 3を繰り替えして，別のファイル（testlv2.img）を/dev/loop1 と結びつけます。<br><br></li><li> ディスクを戻すタイミングで，次のコマンドを投入します。このコマンドを投入した時点で，書き込みはtestlv2.imgに行なわれるようになります。<br><pre><br>echo 0 $(blockdev --getsize /dev/mapper/testvg-testlv) snapshot /dev/mapper/testvg-testlv /dev/loop1 n 64 | dmestup reload testvg-disk<br>dmsetup suspend testvg-disk<br>dmsetup resume testvg-disk<br></pre><br><br></li><li> /dev/loop0 と testlv.img が未使用になるので，それぞれ削除・再作成して次の切り替えに備えます。XFSなど，巨大ファイルの扱いが速いファイルシステムを使うと良いです。<br></li></ol><br><br>dmsetup create, dmsetup reload に echo で送っている文字列は，以下の形式です：<br><pre><br>開始セクタ 終了セクタ ターゲット ...<br></pre><br>「ターゲット」は，アクセスされたときにどのような処理を行なうかを記述します。<br>snapshot の場合，copy on writeを行なうことができ，テンプレートになるデバイスと変更を書き込むデバイスを指定します。<br>他にも，crypt とか　error といったターゲットがあり，名前のとおり暗号化したり，アクセスするとエラーにしたりすることができます。<br>組み合わせて，<br><ul><br><li>一部だけがエラーになるディスク<br></li><li>前半と後半で暗号化キーの異なるディスク<br></li></ul><br>など，変わったボリュームが作れます。<br>errorターゲットを活用すると，ファイルシステムやRAIDを復旧する練習に使えそうですね。<br><br>ボリューム管理のための，簡潔で強力な仕組みを提供する device mapper の紹介でした(TA)。<br><br>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11458612009.html</link>
<pubDate>Mon, 28 Jan 2013 19:00:00 +0900</pubDate>
</item>
<item>
<title>データベースの学習-その2　表の操作の考え方（関係代数）</title>
<description>
<![CDATA[ <br>データベースの学習-その2<br><br><br>表の操作の考え方（関係代数）<br><br>さてHAです。<br><br>データベース操作のために使われている関係代数を簡単に整理しておきたいと思います。<br>データベースは操作自体はそれほど難しくないですが、少し失敗するとデータを消去してしまったり<br>上書きしてしまったり大変恐ろしいときもありますのでしっかり押さえておくようにしたいと思います。<br><br><br>※（ここでは、リレーショナル型データベースを元に<br>表を２つ関連付けて考えるときのことを例にとっています。）<br><br><br>■■まず集合演算からどうぞ■■<br><br><br>■和集合演算（union）<br>2つの表の値すべてを結果にして返すこと。<br>リレーショナルデータベースの場合は重複するデータは表示しない。<br>A∪B（AまたはB）<br>Aでも○、Bでも○、AとBでも○（表示時に重複データは1つだけ表示）<br>（日常の「または」の言葉とはちょっと用法が違います。）<br><br><br>■差集合演算（difference）<br>2つの表を比べ共通部分を除いた部分を結果にして返すこと。<br>A-B　AにあってBにあるものは×　AにあってBにないものは○　AになくてBにあるものは無視。<br>よってA-BとB-Aは結果が異なるので注意が必要。<br><br><br>■積演算（intersection）<br>二つの表の「共通部分」<br>A∩B　AとBは○　Aだけは×　Bだけは×。<br>AかつB。<br><br><br>■直積演算（cartesian product）<br>演算対象となる２つの表のすべての「組み合わせ」を結果として返す。<br><br>今までの３つの集合演算とは違い<br>純粋に列も行も掛け算されたようにふえます。<br>A×Bと表現する。<br><br>例えば<br>Aの表が列５×行６<br>Bの表が列３×行８であるとすると<br>AとBを直積演算すると<br>A列数５×B列数３の列数＝列数１５と<br>A行数６×B行数８の行数＝行数４８。<br><br>列数１５と行数４８の表Cが作られることになる。<br>という考え方です。<br><br><br><br>■■次は関係演算にいきます■■<br><br><br>■選択演算（selection）<br>表から選択の条件を満たす行だけを取り出して結果を返す演算のこと。<br><br>列名、演算子、値を使って様々な条件設定を行える。<br>演算子は（＝　≠　≧　≦　＞　＜）<br>論理積・論理和・否定（AND・OR・NOT）を用いて式をつなぎ<br>複数の条件で選択することも可能。<br><br>例えば表内で男性で東京に住んでいる50歳以上の人だけ抽出する場合<br><br>性別（列名）＝'男'AND　都道府県（列名）＝'東京'AND　年齢（列名）≧'50'となる。<br><br><br>■射影演算（projection）<br>列名と並びを指定し、表から列を指定した並びどおりに結果を返すこと。<br><br>※リレーショナルモデルの場合全く情報が同じ行は存在できないので<br>例えば射影演算で性別（男女）の列のみを指定すると、<br>何人分のデータがあったとしても男と女の2行しか抽出できなくなる。<br><br>　これを回避するためには、性別と名前など複数列を指定することによって<br>　期待した結果を得ることができる。（この場合でも同姓同名は片方が消えるため要注意）<br>　一意の列名（個別コードなど）と同時に出せば必ずすべてのデータが表示される。<br><br><br>■結合演算（join）<br>リレーショナル型データベースではこれがないとやっていけないほど大事な演算です。<br>外部キー（各表に共通の列）を使って表を結合し、新たな表を作ること。<br>これはさすがに図なしではわかりにくいと思いましたので<br>（なんとかいままでシンプルにまとめて図は使わない方針だったんですが）<br>準備しました。<br><br>図では製品コードが外部キー（共通項目）となっています。<br>等結合演算と<br>自然結合演算がありますが、<br>とりあえず眺めているとなんのことかわかるかと思います。（ちょっと強引ですみません）<br><br>言葉で説明するとわかりにくいですが<br>等結合演算に対してさらに射影演算を組み合わせると自然結合演算ができます。<br>重複している列を取り除いて表示しているとかんがえればOKかと思います。<br><br><br><a href="http://stat.ameba.jp/user_images/20130105/01/d-s-network/f4/22/j/o0611045712363305358.jpg"><img src="https://stat.ameba.jp/user_images/20130105/01/d-s-network/f4/22/j/t02200165_0611045712363305358.jpg" alt="ドリームサポートネットーワークのブログ"></a><br><br><br><br>■商演算（division）<br>これが一番難しいと思います。<br><br>表現も難しくどこで使うのかも難しいですが<br>表A÷表Bの場合<br>「表AB双方の表を比較して」<br>「表Aのすべての属性（列）の値を満たす表Bの行を取り出す」<br>「さらにその行から表Aと重なる属性を取り除いたもの」<br>ということです。<br><br>この説明がわかりやすかったです。<br>図を下に考えてみると良いかもしれません。<br><br><a href="http://ja.wikipedia.org/wiki/関係代数_(関係モデル)#.E5.95.86" target="_blank">http://ja.wikipedia.org/wiki/関係代数_(関係モデル)#.E5.95.86</a><br><br>Wikipediaの例では（直接同じではないですが）<br>A÷B＝Cの場合は当然、<br>C×B＝Aとなる<br>この考え方をすると理解が深まる気がします。<br>つまり商演算は直積演算と対照的な存在というわけですね。（あたりまえか・・・）<br><br><br>いい問題があったのでこちらもおすすめです。<br><a href="http://www.k4.dion.ne.jp/~type_f/23S_L4/23S_L4DB_09.html" target="_blank">http://www.k4.dion.ne.jp/~type_f/23S_L4/23S_L4DB_09.html</a><br><br><br><br><br>頭の体操になる関係代数の話でした。<br>これらの考え方を理解しておくと<br>表の操作を実際に行うときに困らないはずです。<br><br><br>HAでした。<br><br>データベース学習ーその２　表の操作の考え方（関係代数）終わり<br><br><br><br><br><br><br><br><br>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11442328489.html</link>
<pubDate>Sat, 05 Jan 2013 01:41:33 +0900</pubDate>
</item>
<item>
<title>データベースの学習-まずは単語から</title>
<description>
<![CDATA[ さてご無沙汰しておりましたHAです。<br>2013年度も始まりましたが皆さんいかがおすごしでしょうか？<br><br>今日はシステム・プログラム系統の仕事をされる方であれば日常的に接することがおありと思いますが<br>データベースについて取り上げてみたいと思いました。<br>本を読んだ時に専門用語ばかりが書かれていて難しくてつまずいてしまうことがないように<br>覚えておきたいことばを忘れないため簡単に説明を書きます。<br>なんとなくあやふやな言葉や、データベースの型で呼び名が変わったりするものも<br>ありましたのでさっと見て概要だけつかめれば大体の説明を見て理解できるだろうと考えています。<br>内容をおさらいするときに使えればと思います。<br>ちょっと長くなりますが、必要な部分だけ見返して使って頂ければ幸いです。<br><br><br>※（今回は2次元のテーブルでデータを収納し、<br>テーブル同士を関連付けできるリレーショナル型データベースを基本にします。）<br><br><br>■リレーショナル型データベースとは<br>各データが2次元の表によって表される。この表を複数用いながら関連付をおこない<br>大規模なデータベースとして活用できるデータベースの型。<br><br><br>■データとは<br>説明の必要がないかもしれないが<br>データベースにおいて処理しやすいように加工されている情報のこと。<br>どのように使うかを理解した上で要望に応えられるよう加工してゆく必要がある。<br><br><br>■データベースとは（DB）<br>データを貯めておく箱のようなもの<br>管理・変更、抽出などの再利用がしやすいように秩序だってデータを収納する。<br><br><br>■DBMSとは<br>データベースマネジメントシステム<br>データベースの保守や、管理をするためのソフトウェア<br>ユーザーが同時に同データにアクセスしてきた時にロックするなど<br>データベースに矛盾が生じないためやデータを守るために用いられている。<br>したがってユーザはデータベースに直接アクセスするのではなく<br>まずDBMSを通してデータを取得することができる。<br>（ユーザーが用いるアプリケーションとDBMSのあいだにはミドルウェアの存在もあります。）<br><br><br>■データベースシステムとは<br>DBMSやデータベースなどデータベースの構築などに必要なシステム全体を<br>ひとまとめにして表現したもの。<br>データモデル・データベース言語・DBMSも含む。<br><br><br>■SQLとは<br>データベース言語の一つ。リレーショナルデータベースを操作するための言語のこと。<br>データ定義言語DDL・データ操作言語DML・データ制御言語DCLに分けられる。<br>データ定義言語DDLにはテーブルを作ったり削除する文が含まれ<br>データ操作言語DMLにはデータを抽出したり、削除、挿入する文が含まれる。<br>データ制御言語DCLは処理をロールバックするなどの文が含まれる。<br>データベースに直接命令を出しているわけではなくDBMSに命令をだし、<br>命令を受けたDBMSがデータベースの内容を取ってきて応答する。<br><br><br>■データモデルとは<br>データベースにおいてあらかじめ定められている表現の決まり。規約のこと。<br>これに沿ってデータの重複を避け正規化することによって管理しやすくできる。<br><br><br>■クエリとは<br>データベース管理システムの操作をするために使用する命令のこと。<br>※SQLのQは「Structured Query Language」のクエリーかと思っていましたが、<br>これはどうも違うようでIBMの操作言語のことを指すらしく<br>SQLは何らかの略語ではないようです。<br><br><br>■テーブルとは<br>データが格納された表のこと。<br>エクセルで例えるなら1シート。<br><br><br>■フィールドとは<br>エクセルで言うと列のこと、顧客データにおいて生年月日や性別などの項目を作った場合<br>一つ一つの項目がフィールドとなる。<br><br><br>■レコードとは<br>一つの情報の単位。<br>エクセルで言うと行のこと、顧客データベースにおいては横一列に並ぶ１人分の顧客データがレコードとなる。<br>レコードには複数のフィールドがある。<br><br><br>■ファイルとは<br>レコードを保存する入れ物のこと。<br><br><br>■キーとは<br>レコードを一意に識別できるフィールドのことをさします。（キーは列に適用される）<br>キーのうち「主キー（primary key）」は重要で、一つのレコード（一つの情報の単位）のみに当てはまるキーになります。<br>主キーがなければ単独でそのレコードだけを抽出することはできません。<br><br>複数の項目のうちキーになりうる列のことを「候補キー（candidate key）」ともいいます。<br><br>またリレーショナルデータベースの場合ほかのテーブルと関連付ける必要がありますが<br>複数の表に共通するフィールドを作りテーブル同士が連絡できるようにします。<br>この外部との連絡を取るフィールドのことを「外部キー（foreign key）」といいます。<br>(外部キーはいくつでも持てる)<br><br>複数のフィールドをまとめて「複合キー(compound key)」とすることもできます。<br><br><br>■リレーションとは<br>リレーショナル型データベース内の情報は、複数の定義域に分けられて管理されているが<br>その定義域の中から意味のあるものを複数組み合わせてできる集合の表のこと。<br><br>■定義域とは（domain）<br>これ以上分けることのできない値の集合のこと。データ型と同じ。<br>属性が項目であるのに対して、定義域はそのデータすべてを含んだもの。性別ならば（男・女・不明）など。<br><br>■属性とは（attribute）<br>リレーショナル型データベースにおいて<br>住所、電話番号、性別などの一つ一つの項目のこと。列。<br><br><br>■組・タプルとは（tuple）<br>リレーショナル型データベースにおいて１件１件のデータ行のこと。行。<br><br>■リレーションスキーマとは<br>リレーション名と属性の並びによって表現される記述のこと。<br>例（会員名簿｛会員コード・氏名・性別・年齢・住所｝）。<br><br>■リレーションシップとは<br>表と表との相互関係。外部キーによって関係を持つことができる。<br>これにより二次元の表をたくさん関連付けて、膨大なデータベースとして活用することができる。<br><br><br>■マスタとは（マスタファイルとは）<br>データを保存しているファイルのカテゴリの一つのこと。<br>複数のファイルを関連付けて利用するのがリレーショナル型データベースですが<br>そのファイルのうち重要で基本的な情報、元帳的な役割のファイルをマスタと呼ぶ。<br><br><br>■トランザクションファイルとは<br>マスタとは違い、日々内容の変動が激しいファイルのことをトランザクションファイルという。<br>例えば、売上情報や、在庫情報等情報量がころころと変動するものをさす。<br><br><br>■トランザクションとは<br>一連の処理の単位。分けてはいけないもの。<br>例えば、片方から数を引いて、引いた数をもう片方に追加し、全体の合計は常に同じになるようにする場合、<br>片方から数を引いただけで処理が中断させると矛盾が生じる。<br>このような一連のわけずに処理を行わなければいけない単位のことをトランザクションという。<br>そのように処理することをトランザクション処理またはトランザクション管理ともいいます。<br><br>例）銀行で自分の口座から相手の口座に一定金額を振り込む場合等<br><br><br>■ロールバック処理とは<br>トランザクション処理中に矛盾が生じた時のために<br>トランザクション開始以前にデータベースの状態を戻すこと。<br>DBMS中のログファイルにユーザーから出した命令のログが取られているため<br>ロールバックする際にはログファイルを参照しつつ問題のない時点まで戻す。<br><br>■コミット処理とは<br>トランザクション処理が無事に終了した時に<br>それを正しいデータとしてデータベースに反映させる処理のこと。<br><br><br>■CRUD操作とは<br>DBMSに必要な4つの操作のイニシャルをとったもの<br>作成・読み出し・更新・削除のCreate・Read・Update・Deleteのことで<br>基本的な機能のこと。<br><br><br>■ACIDとは<br>簡単に言うと、トランザクションシステムを信頼性のおけるものとするうえで<br>必要な性質（不可分性・一貫性・独立性・永続性）のイニシャルをとったもの。<br><br><br>■データ辞書ファイルとは（DD　Data Dictionary）<br>＝メタデータ、＝カタログファイル。<br>DBMSがデータベースを管理するためにかならず持っているファイル。<br>データベースにアクセスしたいときユーザーは通常SQL等を用いてDBMSにアクセスするが<br>それを受けたDBMSは必ずこのデータ辞書ファイルにアクセスする。<br>そして、DDを読み込んで該当するデータベースのアクセス形式や構造を確認する。<br>その情報を元に確実にデータベースを操作するという仕組みになっている。<br><br><br>■バックアップファイルとは<br>その名のとおりデータベースのバックアップ。<br>データベース自体の複製されたファイルのこと。<br>自分で作るか、自動化させてつくっておくなどの方法がある。<br><br><br>■作業用ファイルとは<br>一時的にDBMSが作業する際に必要となるファイル。<br>テンポラリーファイルとも呼ばれる。<br>作業域が必要な際に確保されるため、いらなくなったら消去され<br>ずっとあるものではない。<br><br><br>■同時実行制御管理（並行制御）とは（concurrency control）<br>一つのデータに対して複数人からアクセス・操作の要望がある場合<br>ロック制御、アンロック制御によりデータに矛盾が生じないようにするDBMSの機能・管理のこと。<br><br><br>■専有ロックとは（排他ロックともいう）<br>自分が操作しているデータ内容について、アンロックするまでは<br>ほかのユーザーが見ることもできない（読み込み禁止）ロックのこと。<br><br><br>■共有ロックとは<br>自分が操作しているデータ内容について、アンロックするまでは<br>ほかのユーザーは操作できないが読み込みはできるロックのこと。<br><br><br>■チェックポイントとは<br>障害回復管理のためにDBMSが一定時間ごとにとっているバックアップのポイントのこと。<br>WindowsPCのシステムの復元の際の復元ポイントと同じようなもの。<br>これに対しログファイルはトランザクション処理が完了してデータにコミットされるときに<br>定期的に書き込まれ、チェックポイントとログファイルを用いて障害回復が行われる。<br><br><br>■障害回復管理とは<br>データは様々な要因で障害を受けデータが損失を受ける危険性があるため<br>障害が起きた場合に、その影響がない状態までデータを回復させるDBMSの機能・管理のこと。<br>方法としては障害が起こった場合、まずDBMSが一定時間単位でバックアップを取っていたチェックポイントを参照し<br>障害が起こる前に取った最後のチェックポイントまでデータベースの状態を復元する。<br>その後にデータベースにトランザクション処理が発生している場合のため<br>DBMSはログファイルを読み込み、<br>コミットされているもの（作業が正常に完了しているもの）は反映（ロールフォワード）し、<br>コミットが完了していないもの（作業が中断しているもの）は破棄（ロールバック）することにより<br>障害直前の状態までデータベースの状態を戻す。<br><br><br>■ディレクトリの二重化とは<br>障害回復管理の一つの手法。<br>記憶域を別々のハードディスクなどに二重化しておくことにより<br>片方が物理的に障害が発生してもデータの救出が可能となる。<br>ミラーリングとデュープレキシングがあるが、ディスクインターフェースカードを共有するのがミラーリングで<br>別々に独立させて持つのがデュープレキシングという違いだけの問題。<br><br><br>■機密保護管理とは<br>セキュリティー管理のこと。DBMSの機能の一つ。<br>最近Webでデータ管理をするクラウドも増えてきているので説明の必要もないほど管理が行われているようですが<br>ユーザーパスワードの認証機能や、IP制御、アクセス制御、暗号化などがあります。<br><br><br><br>ほかにもいろいろありますが、また追記していきたいと思っています。HA<br>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11442044243.html</link>
<pubDate>Fri, 04 Jan 2013 19:08:08 +0900</pubDate>
</item>
<item>
<title>「料理分量計算ツール」－第３段階　単純な計算ツール（その４：型変換１）</title>
<description>
<![CDATA[ <p>HOです。 <br></p><p><br>　前回、キーボード入力されたデータをそのまま計算しようとすると、</p><p>　型の関係でエラーが出てきました。</p><br><p>　これから何回かの記事にかけて、</p><p>　基本データ型（boolean、byte、short、int、long、float、double、char）において、</p><p>　型を変換できるパターンと、できないパターンをまとめていきたいと思います。</p><br><p>　この型変換に関する仕組みは、"Stringの森"のように、結構奥深いものです。</p><p>　ですので、遭難しない範囲で"型変換の洞窟"を探索してみたいと思います。</p><p><br><br></p><p><br>まずは、いくつか型変換をテストするプログラムをコンパイルして、</p><p>どのようになるか見てみたいと思います。</p><br><p>まずboolean型から他の基本データ型への変換です。</p><p>----------------------------------------------------</p><p>class TypeTest_Boolean{</p><br><p>public static void main(String args[]){</p><br><p>boolean test = false;</p><br><p>//booleanから各型へ変換<br>boolean bl = test;<br>byte bt = test;<br>short s = test;<br>int i = test;<br>long l = test;<br>float f = test;<br>double d = test;<br>char c = test;<br></p><p>}</p><br><p>}</p><p>----------------------------------------------------</p><p>このプログラムは、boolean型の変数testを宣言し、</p><p>それを他の基本データ型に入れるプログラムです。</p><br><p>早速、コンパイルしてみましょう。<br><a href="http://stat.ameba.jp/user_images/20121113/21/d-s-network/a9/fc/j/o0244048512284662292.jpg"><img alt="ドリームサポートネットーワークのブログ-h03 型変換（boolean）" src="https://stat.ameba.jp/user_images/20121113/21/d-s-network/a9/fc/j/o0244048512284662292.jpg" border="0"></a> <br></p><p>・・・おもしろいぐらいにコンパイルエラーとなりました！（^_^；）</p><p>それでは、エラーの詳細を確認してみましょう。</p><p>エラーとなったのは、boolean型以外の基本データ型すべてでした。</p><p>エラー内容はすべて「互換性のない型」です。</p><br><p>ここからわかったのは、</p><p><strong><u>boolean型は他の基本データ型に型変換することはできない</u></strong>ということです。</p><p><br><br><br></p><br><p><br><br></p><p>それでは、続いてint型から他の基本データ型に変換してみましょう。</p><p>----------------------------------------------------</p><p>class TypeTest_Int{</p><br><p>public static void main(String args[]){</p><br><p>int test = 1;</p><br><p>//intから各型へ変換<br>boolean bl = test;<br>byte bt = test;<br>short s = test;<br>int i = test;<br>long l = test;<br>float f = test;<br>double d = test;<br>char c = test;</p><br><p>}</p><br><p>}</p><p>----------------------------------------------------</p><p>このプログラムは、</p><p>変数testをint型として宣言し、他の基本データ型に入れるものです。</p><p>このプログラムもコンパイルしてみましょう。</p><br><p><br><a href="http://stat.ameba.jp/user_images/20121113/21/d-s-network/c1/dd/j/o0356039812284662291.jpg"><img alt="ドリームサポートネットーワークのブログ-h04 型変換（int）" src="https://stat.ameba.jp/user_images/20121113/21/d-s-network/c1/dd/j/o0356039812284662291.jpg" border="0"></a> <br></p><p>先ほどのプログラムよりはエラーの数は減りましたね。</p><br><p>1つ目のエラーは、int型からboolean型へは型変換できないというものです。</p><p>boolean型と他の基本データ型は型変換できないので、</p><p>これは先ほどと同じものですね。</p><br><br><br><p>残り３つのエラー内容は、「精度が落ちている可能性」というものです。</p><br><p>「精度が落ちている可能性」というのは、どういう意味でしょうか？</p><p><br></p><p>以前基本データ型のデータの範囲を取り上げましたが、（<a href="http://ameblo.jp/d-s-network/entry-11365515515.html" target="_blank">こちら</a> ）</p><p>int型の範囲は「<font size="2">-2147483648～+2147483647</font>」でした。</p><p>それに対し、</p><p>byte型は「<font size="2">-128～+127</font>」</p><p>short型は「<font size="2">-32768～+32767</font>」</p><p>と、int型より範囲が狭くなります。</p><br><p>このように、ある型の値を、それより有効な値の範囲が狭い型に変換する事を、</p><p>「<strong><font color="#0000ff">縮小交換(ナローイング交換)</font></strong>」と言います。</p><br><p>縮小交換すると、データが失われる可能性があります。</p><br><p>例えば、「int型で宣言した変数」に「40000」という値を入れたとしましょう。</p><p>「40000」という値は、byte型の最大値「127」、short型の最大値「32767」より大きい値になります。</p><p>それなのに、この「40000」という値をbyte型やshort型入れようとすると、</p><p>「40000」という値は失われてしまいます。</p><br><p>もちろん「int型で宣言した変数」に「1」を入れたとすれば、</p><p>byte型もshort型も問題なく入れることができます。</p><br><p>しかし、縮小交換をすると、値によってはデータが失われる場合があるため、</p><p>Javaのコンパイラは、縮小交換をエラーとして判定します。</p><p>それで、「精度が落ちている<strong><u>可能性</u></strong>」というエラー内容が表示されたわけです。</p><br><br><br><p>もう一点、char型に関してですが、これも「精度が落ちている可能性」とあります。</p><br><p>char型は1文字を表しますが、</p><p>これは、Unicode文字を4桁の16進数で表現しています。</p><p>そのため、char型の値を数字として対応することができます。</p><p>しかし、byte型、short型と同じく、データが失われる可能性があるため、</p><p>「精度が落ちている可能性」というエラー内容が表示されていました。</p><br><p><br><br></p><p>最後にこのプログラムで取り上げておきたい点が、</p><p>エラーとならなかった型変換は何かと言う点です。</p><br><p>int型から、long型・float型・double型への型変換はエラーとなっていません！</p><p><br></p><p>どうしてでしょうか？</p><p>これらの型の値の範囲を比較すると、その理由が見えてきます。（<a href="http://ameblo.jp/d-s-network/entry-11365515515.html" target="_blank">こちら</a> ）</p><br><p>int型の範囲は「<font size="2">-2147483648～+2147483647</font>」なのに対し、</p><p>long型が「<font size="2">-9223372036854775808～+9223372036854775807</font>」、</p><p>float型が「<font size="2">±3.40282347E+38～±1.40239846E-45</font>」、</p><p>double型が「<font size="2">±1.79769313486231570E+308～</font></p><p><font size="2">　±4.94065645841246544E-324</font>」です。</p><p>つまりこれらは、int型の値の範囲より、範囲が広い型です。</p><br><p>このようにある型の値を、その型より有効な値の範囲が広い型に変換するのを、</p><p>「<strong><font color="#0000ff">拡張変換(ワイドニング交換)</font></strong>」と言います。</p><p><br></p><br><br><br><br><p><br></p><p>拡張変換はエラーが出ないということですから、</p><p>最後に、様々な拡張変換を試してみましょう。</p><p>----------------------------------------------------</p><p>class KakutyouTest{</p><br><p>public static void main(String args[]){</p><br><p>//①拡張変換</p><p>byte bt = 1;</p><p>short s = bt;</p><p>char c = s;</p><p>int i = c;</p><p>float f = i;</p><p>long l = f;</p><p>double d = l;</p><br><p>//②結果を表示する<br>System.out.println("byte =&gt; " + bt +<br>"\nshort =&gt; " + s +<br>"\nchar =&gt; " + c +<br>"\nint =&gt; " + i +<br>"\nfloat =&gt; " + f +<br>"\nlong =&gt; " + l +<br>"\ndouble =&gt; " + d);</p><br><p>}</p><br><p>}</p><p>----------------------------------------------------</p><br><p>コンパイル結果は・・・<br><a href="http://stat.ameba.jp/user_images/20121114/00/d-s-network/31/29/j/o0355021912284972849.jpg"><img alt="ドリームサポートネットーワークのブログ-h05 拡張変換" src="https://stat.ameba.jp/user_images/20121114/00/d-s-network/31/29/j/o0355021912284972849.jpg" border="0"></a> <br></p><p>２つだけエラーとなりました。</p><p>それは、short型からｃｈａｒ型への変換と、</p><p>float型からlong型への変換です。</p><p>逆に言うと、それ以外の型変換は問題なかったということを意味します。</p><p><br>この２つのエラーの意味については、次回取り上げたいと思います。</p><p><br><br><br><br></p><p>今回のポイントです。</p><br><p><font color="#0000ff"><strong>「boolean型は他の基本データ型に型変換できない」</strong></font></p><p><font color="#0000ff"><font color="#000000">サイズの大きな型から小さい型に変換することを</font></font></p><p><font color="#0000ff"><font color="#000000">　　</font><strong>「縮小変換（ナローイング変換）」</strong></font><font color="#000000">といい、</font></p><p><font color="#0000ff"><font color="#000000">サイズの小さな型から大きい型に変換することを</font></font></p><p><font color="#0000ff"><font color="#000000">　　</font><strong>「拡張変換（ワイドニング変換）」</strong></font><font color="#000000">という。</font></p>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11401767836.html</link>
<pubDate>Sun, 18 Nov 2012 11:09:15 +0900</pubDate>
</item>
<item>
<title>「料理分量計算ツール」－第３段階　単純な計算ツール（その３：キーボード入力されたデータの計算）</title>
<description>
<![CDATA[ <p>HOです。 </p><br><p>　前回、演算子の種類について概観してみました。</p><p>　今回は、いよいよ第３段階の目標であるキーボードで受け取ったデータを用いて、希望する計算結果を表示するプログラムを作成して見たいと思います。</p><br><p><br></p><p>以下は、第二段階で作成したプログラムです。</p><p>--------------------------------------------------------------------<br>class InputTest{<br><br>&nbsp;&nbsp;public static void main(String args[]){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;java.io.BufferedReader myReader =<br>&nbsp;&nbsp;&nbsp;&nbsp;new java.io.BufferedReader( new java.io.InputStreamReader(System.in),1);<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;try{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("レシピにある分量を記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringA = myReader.readLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myStringA + "は、何人分か記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringB = myReader.readLine();<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("知りたい分量は何人分か記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringC = myReader.readLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("レシピの分量＝「" + myStringA + "」");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("レシピの人数＝「" + myStringB + "人分」");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("知りたい分量＝「" + myStringC + "人分」");<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}catch(java.io.IOException e){<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;}<br><br>}<br>--------------------------------------------------------------------</p><p>このプログラムはキーボードで入力されたデータを、</p><p>そのまま画面に表示するという単純なものでしたが、</p><p>今回は、ここで得たデータを使って、計算結果を表示するようにしたいと思います。</p><br><p><br><br></p><p>作成するにあたって、<br>以下の第３段階（その１）で作成したプログラムも参考にしたいと思います。</p><p>----------------------------------------------------------</p><p>class TestKeisan{<br><br>&nbsp;&nbsp;public static void main(String args[]){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;// ①</p><p>&nbsp;&nbsp;&nbsp;&nbsp;double bunryou = 25;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;int ninzuuA = 2;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;int ninzuuB = 10;</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;double kekka;</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;// ②</p><p>&nbsp;&nbsp;&nbsp;&nbsp;kekka = bunryou / ninzuuA * ninzuuB;</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;// ③</p><p>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ninzuuB + "人分の分量は、" + kekka + "です。");</p><p><br>&nbsp;&nbsp;}<br><br>}</p><p>----------------------------------------------------------</p><br><br><br><p>まあ、ふたつのデータをあわせるだけですから簡単簡単！</p><p>--------------------------------------------------------------------<br>class InputTest2{<br><br>&nbsp;&nbsp;public static void main(String args[]){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;java.io.BufferedReader myReader =<br>&nbsp;&nbsp;&nbsp;&nbsp;new java.io.BufferedReader( new java.io.InputStreamReader(System.in),1);<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;try{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ①</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("レシピにある分量を記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringA = myReader.readLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myStringA + "は、何人分か記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringB = myReader.readLine();<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("知りたい分量は何人分か記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringC = myReader.readLine();<br></p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ②</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double bunryou = myStringA;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int ninzuuA = myStringB;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int ninzuuB = myStringC;</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double kekka;<br></p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;kekka = bunryou / ninzuuA * ninzuuB;</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// ③</p><p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(ninzuuB + "人分の分量は、" + kekka + "です。");</p><p><br>&nbsp;&nbsp;&nbsp;&nbsp;}catch(java.io.IOException e){<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;}<br><br>}<br>--------------------------------------------------------------------<br>と簡単に作成できてしまいました！</p><br><p>このプログラムを解説しますと、</p><p>まずクラス名を「InputTest2」としました。</p><p>そして①で一問一答方式でキーボード入力してもらい、</p><p>②で受け取ったデータを、計算する用の変数に当てはめて、計算しています。</p><p>③でその結果を画面に表示します。</p><br><p>まあ、これぐらい朝飯前ていうところですかね！</p><br><br><br><br><p>では、このプログラムをコンパイルしてみます。</p><p>・</p><p>・</p><p>・<br><a href="http://stat.ameba.jp/user_images/20121112/01/d-s-network/e2/eb/j/o0279031112281942032.jpg"><img border="0" alt="ドリームサポートネットーワークのブログ-h02　コンパイル失敗" src="https://stat.ameba.jp/user_images/20121112/01/d-s-network/e2/eb/j/o0279031112281942032.jpg"></a> <br>！！ええっ！！</p><p>コンパイルエラーとなりました！しかも3個も！！</p><p>特にエラーになりそうなことはしていないはずなんですが・・・</p><br><p>・・・とりあえず落ち着いてエラーの内容を読んでみたいと思います。</p><p><br></p><br><p>まず「InputTest2.java：26」とあります。</p><p>これは、エラーとなったところがどこかを示しています。</p><p>「InputTest2.java」の中の「26行目」ということですね</p><br><p>続いてエラー内容が「互換性のない型」とあります。</p><p>具体的には、</p><p>「検出値　：　java.lang.String」</p><p>「期待値　：　double」</p><p>「double bunryuo = myStringA；」とあります。</p><br><p>どうやら型に関するエラーとなっているようです。（型については<a href="http://ameblo.jp/d-s-network/entry-11365515515.html" target="_blank">こちら</a> ）</p><br><br><br><p>「mySringA」というのは、String型変数として宣言していました。</p><p>そして「bunryou」というのは、double型変数として宣言しています。</p><p>それで、double型である変数bunryouに、</p><p>String型変数のデータを入れようとしたことが、</p><p>エラーとなった原因でした。</p><br><br><br><br><p>実は、Javaは強く型付けされている言語です。</p><p>基本データ型（boolean、byte、short、int、long、float、double、char）や</p><p>参照型（Stringなど）と、様々な型があります。<br>Javaの場合、変数は、どの型か宣言しなければなりません。</p><p>そして、ある型のデータを、別の型に変換できる場合と、できない場合があります。</p><br><p>先ほどの、String型からdouble型へは変換できません。</p><p>そのため、エラー内容が「互換性のない型」となったのでした。</p><br><br><p>詳しくは次回以降で取り上げたいと思います。</p><p>次回は、基本データ型の組み合わせごとに変換可否について取り上げます。</p><br><br><br><p>今回のポイントです。</p><p>　データを変数に入れる場合、型をよく考えて作成する必要がある。</p>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11384417447.html</link>
<pubDate>Mon, 12 Nov 2012 23:31:39 +0900</pubDate>
</item>
<item>
<title>「料理分量計算ツール」－第３段階　単純な計算ツール（その２：演算子）</title>
<description>
<![CDATA[ <p>HOです。 </p><br><p>　11月8日23時目標と宣言していましたが、</p><p>　結局2日遅れのアップとなってしまいましたm(_ _；)m</p><br><p>　前回、簡単な計算プログラムを作成しました。</p><p>　今回、その際に登場した「<font color="#0000ff"><strong>演算子</strong></font>」について詳しく取り上げたいと思います。</p><br><br><p>　Javaで利用できる演算子には以下のものがあります。</p><br><br><table width="100%" bgcolor="#ffd700" height="20"><tbody><tr align="center" bgcolor="#ffffe0"><th bgcolor="#ffd700"><p><font size="1">優先</font></p><p><font size="1">順位</font></p></th><th bgcolor="#ffd700"><p><font size="1">結合</font></p><p><font size="1">規則</font></p></th><th bgcolor="#ffd700"><font size="2">種類</font></th><th bgcolor="#ffd700"><font size="2">演算子</font></th><th bgcolor="#ffd700"><font size="2">例</font></th><th bgcolor="#ffd700"><font size="2">オペランドの型</font></th><th bgcolor="#ffd700"><font size="2">役割</font></th></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">1</font></td><td><font size="1">左</font></td><td><p><font size="1">後置</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">.</font></p><p><font size="1"><br></font></p><p><font size="1"><br></font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">[ ]</font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1"><em>メソッド</em>(<em>引数</em>)</font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">++</font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">- -</font></p></td><td><p><font size="1">obj.value</font></p><p><font size="1">obj.method()</font></p><p><font size="1"><br></font></p><p><font size="1">array[3]</font></p><p><font size="1">readLine()</font></p><p><font size="1">p++</font></p><p><font size="1">p- -</font></p></td><td><p><font size="1">ｵﾌﾞｼﾞｪｸﾄ、ﾒﾝﾊﾞｰ</font></p><p><font size="1"><br><br></font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">配列、int</font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">ﾒｿｯﾄﾞ、引数ﾘｽﾄ</font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">変数</font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">〃</font></p></td><td><p><font size="1">ｵﾌﾞｼﾞｪｸﾄの</font></p><p><font size="1">ﾒﾝﾊﾞｰのｱｸｾｽ</font></p><p><font size="1"><br></font></p><p><font size="1">配列要素のｱｸｾｽ</font></p><p><font size="1">ﾒｿｯﾄﾞの呼び出し</font></p><p><font size="1">後置のｲﾝｸﾘﾒﾝﾄ</font></p><p><font size="1">後置のﾃﾞｸﾘﾒﾝﾄ</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">2</font></td><td><font size="1">右</font></td><td><p><font size="1">単項</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">++</font></p><p><font size="1">- -</font></p><p><font size="1">+</font></p><p><font size="1">-</font></p><p><font size="1">~</font></p><p><font size="1">!</font></p></td><td><p><font size="1">++p</font></p><p><font size="1">- -p</font></p><p><font size="1">+n</font></p><p><font size="1">-n</font></p><p><font size="1">~i</font></p><p><font size="1">!b</font></p></td><td><p><font size="1">変数</font></p><p><font size="1">〃</font></p><p><font size="1">数値</font></p><p><font size="1">〃</font></p><p><font size="1">整数</font></p><p><font size="1">ブール</font></p></td><td><p><font size="1">前置のｲﾝｸﾘﾒﾝﾄ</font></p><p><font size="1">前置のﾃﾞｸﾘﾒﾝﾄ</font></p><p><font size="1">単項プラス</font></p><p><font size="1">単項マイナス</font></p><p><font size="1">ﾋﾞｯﾄごとの補数</font></p><p><font size="1">論理否定</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">3</font></td><td><font size="1">右</font></td><td><p><font size="1">生成</font></p><p><font size="1">キャスト</font></p></td><td><p><font size="1">new</font></p><p><font style="BACKGROUND-COLOR: #ffffe0" size="1">(<em>型</em>)</font></p></td><td><p><font size="1">new String("test")</font></p><p><font size="1">(int) 3.14</font></p></td><td><p><font size="1">ｸﾗｽ、引数ﾘｽﾄ</font></p><p><font size="1">型、任意</font></p></td><td><p><font size="1">ｵﾌﾞｼﾞｪｸﾄの生成</font></p><p><font size="1">ｷｬｽﾄ（型変換）</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">4</font></td><td><font size="1">左</font></td><td><p><font size="1">算術</font></p><p><font size="1">演算子</font></p><p><font size="1">（積商）</font></p></td><td><p><font size="1">*</font></p><p><font size="1">/</font></p><p><font size="1">%</font></p></td><td><p><font size="1">n1 * n2</font></p><p><font size="1">n1 / n2</font></p><p><font size="1">n1 % n2</font></p></td><td><p><font size="1">数値、数値</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p></td><td><p><font size="1">乗算</font></p><p><font size="1">除算</font></p><p><font size="1">剰余</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">5</font></td><td><font size="1">左</font></td><td><p><font size="1">算術</font></p><p><font size="1">演算子</font></p><p><font size="1">（和差）</font></p><p><font size="1">文字列</font></p><p><font size="1">連結</font></p></td><td><p><font size="1">+</font></p><p><font size="1">-</font></p><p><font size="1">+</font></p></td><td><p><font size="1">n1 + n2</font></p><p><font size="1">n1 - n2</font></p><p><font size="1">"ABC" + "DEF"</font></p></td><td><p><font size="1">数値、数値</font></p><p><font size="1">〃</font></p><p><font size="1">文字列、任意</font></p></td><td><p><font size="1">加算</font></p><p><font size="1">減算</font></p><p><font size="1">文字列の連結</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">6</font></td><td><font size="1">左</font></td><td><p><font size="1">シフト</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">&lt;&lt;</font></p><p><font size="1">&gt;&gt;</font></p><p><font size="1">&gt;&gt;&gt;</font></p></td><td><p><font size="1">i1 &lt;&lt; i2</font></p><p><font size="1">i1 &gt;&gt; i2</font></p><p><font size="1">i1 &gt;&gt;&gt; i2</font></p></td><td><p><font size="1">整数、整数</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p></td><td><p><font size="1">左シフト</font></p><p><font size="1">符号拡張を伴う右ｼﾌﾄ</font></p><p><font size="1">ゼロ拡張を伴う右ｼﾌﾄ</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">7</font></td><td><font size="1">左</font></td><td><p><font size="1">関係</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">&lt;</font></p><p><font size="1">&lt;=</font></p><p><font size="1">&gt;</font></p><p><font size="1">&gt;=</font></p><p><font size="1">instanceof</font></p></td><td><p><font size="1">n1 &lt; n2</font></p><p><font size="1">n1 &lt;= n2</font></p><p><font size="1">n1 &gt; n2</font></p><p><font size="1">n1 &gt;= n2</font></p><p><font size="1">s instanceof String</font></p></td><td><p><font size="1">数値、数値</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">参照、型</font></p></td><td><p><font size="1">～より小さい</font></p><p><font size="1">～以下</font></p><p><font size="1">～より大きい</font></p><p><font size="1">～以上</font></p><p><font size="1">型の比較</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">8</font></td><td><font size="1">左</font></td><td><p><font size="1">等値</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">= =</font></p><p><font size="1">!=</font></p><p><font size="1">= =</font></p><p><font size="1"><br></font></p><p><font size="1">!=</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">d1 = = d2</font></p><p><font size="1">d1 != d2</font></p><p><font size="1">r1 = = r2</font></p><p><font size="1"><br></font></p><p><font size="1">r1 != r2</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">基本型、基本型</font></p><p><font size="1">〃</font></p><p><font size="1">参照、参照</font></p><p><font size="1"><br></font></p><p><font size="1">〃</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">等しい（値が同一）</font></p><p><font size="1">等しくない（値異なる）</font></p><p><font size="1">等しい</font></p><p><font size="1">（同一ｵﾌﾞｼﾞｪｸﾄ参照）</font></p><p><font size="1">等しくない</font></p><p><font size="1">（異なるｵﾌﾞｼﾞｪｸﾄ参照）</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">9</font></td><td><font size="1">左</font></td><td><p><font size="1">ビット</font></p><p><font size="1">論理積</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">&amp;</font></p><p><font size="1"><br></font></p><p><font size="1">&amp;</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">i1 &amp; i2</font></p><p><font size="1"><br></font></p><p><font size="1">b1 &amp; b2</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">整数、整数</font></p><p><font size="1"><br></font></p><p><font size="1">ﾌﾞｰﾙ、ﾌﾞｰﾙ</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">ﾋﾞｯﾄごとの論理積</font></p><p><font size="1">（AND）</font></p><p><font size="1">ブールの論理積</font></p><p><font size="1">（AND）</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">10</font></td><td><font size="1">左</font></td><td><p><font size="1">ビット</font></p><p><font size="1">排他的</font></p><p><font size="1">論理和</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">^</font></p><p><font size="1"><br></font></p><p><font size="1">^</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">i1 ^ i2</font></p><p><font size="1"><br></font></p><p><font size="1">b1 ^ b2</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">整数、整数</font></p><p><font size="1"><br></font></p><p><font size="1">ﾌﾞｰﾙ、ﾌﾞｰﾙ</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">ビットごとの</font></p><p><font size="1">排他的論理和</font></p><p><font size="1">（XOR）</font></p><p><font size="1">ブール型の</font></p><p><font size="1">排他的論理和</font></p><p><font size="1">（XOR）</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">11</font></td><td><font size="1">左</font></td><td><p><font size="1">ビット</font></p><p><font size="1">論理和</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">|</font></p><p><font size="1"><br></font></p><p><font size="1">|</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">i1 | i2</font></p><p><font size="1"><br></font></p><p><font size="1">b1 | b2</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">整数、整数</font></p><p><font size="1"><br></font></p><p><font size="1">ﾌﾞｰﾙ、ﾌﾞｰﾙ</font></p><p><font size="1"><br></font></p></td><td><p><font size="1">ﾋﾞｯﾄごとの論理和</font></p><p><font size="1">（OR）</font></p><p><font size="1">ﾌﾞｰﾙ型の論理和</font></p><p><font size="1">（OR）</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">12</font></td><td><font size="1">左</font></td><td><p><font size="1">論理積</font></p><p><font size="1">演算子</font></p></td><td><font size="1">&amp;&amp;</font></td><td><p><font size="1">b1 &amp;&amp; b2</font></p></td><td><font size="1">ﾌﾞｰﾙ、ﾌﾞｰﾙ</font></td><td><p><font size="1">条件付きの論理積</font></p><p><font size="1">（AND）</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">13</font></td><td><font size="1">左</font></td><td><p><font size="1">論理和</font></p><p><font size="1">演算子</font></p></td><td><font size="1">||</font></td><td><p><font size="1">b1 ||  b2</font></p></td><td><font size="1">ﾌﾞｰﾙ、ﾌﾞｰﾙ</font></td><td><p><font size="1">条件付きの論理和</font></p><p><font size="1">（OR）</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">14</font></td><td><font size="1">右</font></td><td><p><font size="1">条件</font></p><p><font size="1">演算子</font></p></td><td><font size="1">? :</font></td><td><p><font size="1">b ? x : y</font></p></td><td><font size="1">ﾌﾞｰﾙ、任意、任意</font></td><td><font size="1">条件式（三項式）</font></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">15</font></td><td><font size="1">右</font></td><td><p><font size="1">代入</font></p><p><font size="1">演算子</font></p><p><font size="1"><br></font></p><p><font size="1">複合</font></p><p><font size="1">代入</font></p><p><font size="1">演算子</font></p></td><td><p><font size="1">=</font></p><p><font size="1"><br></font></p><p><font size="1"><br></font></p><p><font size="1">*=</font></p><p><font size="1">/=</font></p><p><font size="1">%=</font></p><p><font size="1">+=</font></p><p><font size="1">-=</font></p><p><font size="1">&lt;&lt;=</font></p><p><font size="1">&gt;&gt;=</font></p><p><font size="1">&gt;&gt;&gt;=</font></p><p><font size="1">&amp;=</font></p><p><font size="1">^=</font></p><p><font size="1">|=</font></p></td><td><p><font size="1">p = x</font></p><p><font size="1"><br></font></p><p><font size="1"><br></font></p><p><font size="1">p *= n</font></p><p><font size="1">p /= n</font></p><p><font size="1">p %= n</font></p><p><font size="1">p += n</font></p><p><font size="1">p -= n</font></p><p><font size="1">p &lt;&lt;= i</font></p><p><font size="1">p &gt;&gt;= i</font></p><p><font size="1">p &gt;&gt;&gt;= i</font></p><p><font size="1">p &amp;= b</font></p><p><font size="1">p ^= b</font></p><p><font size="1">p |= b</font></p></td><td><p><font size="1">変数、任意</font></p><p><font size="1"><br></font></p><p><font size="1"><br></font></p><p><font size="1">変数、任意</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p></td><td><p><font size="1">代入</font></p><p><font size="1"><br></font></p><p><font size="1">演算を伴う代入</font></p><p><font size="1">（複合代入演算子）</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p><p><font size="1">〃</font></p></td></tr><tr align="center" bgcolor="#ffffe0"><td><font size="1">16</font></td><td><font size="1">左</font></td><td><p><font size="1">順次</font></p><p><font size="1">演算子</font></p></td><td><font size="1">,</font></td><td><p><font size="1">a = 3<strong><font color="#ff0000">,</font></strong> b =5</font></p></td><td><font size="1">式、式</font></td><td><p><font size="1">for文で使用する。</font></p></td></tr></tbody></table><br><br><br><p><strong>優先順位</strong></p><br><p>　演算が行われる順番を表しています。</p><br><p>　例えば、「10 - 35 / 7」という式の場合、</p><p>　「-」は優先順位は「5」、「/」は優先順位は「4」です。</p><br><p>　それで、優先順位の高い「35/7」を計算し、続いて「10 - 5」を計算します。</p><br><br><br><p><strong>結合規則</strong></p><br><p>　同じ優先順位の演算子が複数ある場合、この規則により順番が決まります。</p><br><p>　例えば、「33 - 15 + 27」という式の場合、</p><p>　「-」「+」ともに優先順位は「4」です。</p><p>　同じ優先順位の演算子が2つありますので、計算する順番は結合規則によりますので、</p><p>　優先順位「4」の結合規則は、「左」から計算するタイプです。</p><br><p>　それで、まず「33 - 15」を計算し、続いて「18 + 27」を計算します。</p><br><br><br><p><strong>オペランドの型</strong></p><br><p>　その演算子の対象となる値や変数を「<strong><font color="#0000ff">オペランド</font></strong>」と言います。</p><p>　その「オペランド」の型と、オペランドの数を表します。</p><br><p>　例えば、優先順位「2」にある「単項マイナス」の「-」は、「-1000」などと使います。</p><p>　この演算子は、オペランドの型は「数値(boolean以外の<a href="http://ameblo.jp/d-s-network/entry-11365515515.html" target="_blank">基本データ型</a> )」で、</p><p>　オペランドの数は「１つ」のみです。</p><p>　オペランド１つのだけ操作する演算子を「<strong><font color="#0000ff">単項演算子</font></strong>」と言います。</p><br><p>　また、優先順位「4」にある「乗算」の「*」は、「3 * 5」などと使います。</p><p>　この演算子のオペランドの型は「数値、数値」で、</p><p>　オペランドの数は「２つ」あります。（例では「(3」「5」の２つ）</p><p>　オペランド２つの演算子のことを「<strong><font color="#0000ff">二項演算子</font></strong>」と言います。</p><br><p>　最後に、優先順位「14」にある「条件式(三項式)」の「 ? : 」は、「(i &lt; 100) ? i : 100」などと使います。</p><p>　この演算子のオペランドの型は「boolean、任意、任意」で、</p><p>　オペランドの数は「３つ」あります。（例では「(i &lt; 100)」「i」「100」の３つ）</p><p>　オペランド３つの演算子のことを「<strong><font color="#0000ff">三項演算子</font></strong>」と言います。</p><br><br><p>以上が簡単な説明となります。</p><p>さらに詳しくは、今後プログラム作成の必要に応じて、取り上げて行きたいと思います。</p><br><br><br><p>さて、前回取り上げたプログラムにはいくつ演算子があったでしょうか？</p><br><p>このプログラムでした。</p><p>----------------------------------------------------------</p><p>class TestKeisan{<br><br>public static void main(String args[]){<br><br>// ①</p><p>double bunryou = 25;</p><p>int ninzuuA = 2;</p><p>int ninzuuB = 10;</p><p><br></p><p>double kekka;</p><p><br></p><p>// ②</p><p>kekka = bunryou / ninzuuA * ninzuuB;</p><p><br></p><p>// ③</p><p>System.out.println(ninzuuB + "人分の分量は、" + kekka + "です。");</p><p><br>}<br><br>}</p><p>----------------------------------------------------------</p><br><br><br><br><p>この中で、演算子をすべて太字で表示してみると･･･</p><p>----------------------------------------------------------</p><p>class TestKeisan{<br><br>public static void main<strong><font color="#fa8072">(</font></strong>String args<strong><font color="#0000ff">[]</font><font color="#fa8072">)</font></strong>{<br><br>// ①</p><p>double bunryou <strong><font color="#0000ff">=</font></strong> 25;</p><p>int ninzuuA <font color="#0000ff"><strong>=</strong></font> 2;</p><p>int ninzuuB <strong><font color="#0000ff">=</font></strong> 10;</p><p><br></p><p>double kekka;</p><p><br></p><p>// ②</p><p>kekka <strong><font color="#0000ff">=</font></strong> bunryou <font color="#0000ff"><strong>/</strong></font> ninzuuA <strong><font color="#0000ff">*</font></strong> ninzuuB;</p><p><br></p><p>// ③</p><p>System<font color="#fa8072" size="5"><strong>.</strong></font>out<font color="#fa8072" size="5"><strong>.</strong></font>println<strong><font color="#fa8072">(</font></strong>ninzuuB <font color="#0000ff"><strong>+</strong></font> "人分の分量は、" <strong><font color="#0000ff">+</font></strong> kekka <strong><font color="#0000ff">+</font></strong> "です。"<strong><font color="#fa8072">)</font></strong>;</p><p><br>}<br><br>}</p><p>----------------------------------------------------------</p><br><p>全部で１４ありました。</p><p>こんな簡単なプログラムでもたくさんの演算子が関係しているのですね。</p><br><br><br><p>今回、演算子について概要を理解できましたので、</p><p>次回は、第２段で作成したキーボードで受け取ったデータを計算して、</p><p>希望する値を表示できるように改良したいと思います。</p><br><br><br><p>今回のポイントです。</p><p>　・計算する式を作るには、２つの要素が必要。</p><p>　　１つは、計算する記号を表わす「<strong><font color="#0000ff">演算子</font></strong>」と、</p><p>　　もうひとつは、その演算子の対象となる値または変数である「<strong><font color="#0000ff">オペランド</font></strong>」。</p><br><p>　・オペランドを１つだけ操作する演算子を「<strong><font color="#0000ff">単項演算子</font></strong>」</p><p>　　２つ操作する演算子を「<strong><font color="#0000ff">二項演算子</font></strong>」</p><p>　　３つ操作する演算子を「<font color="#0000ff"><strong>三項演算子</strong></font>」という。</p>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11387217029.html</link>
<pubDate>Sun, 11 Nov 2012 00:15:14 +0900</pubDate>
</item>
<item>
<title>「料理分量計算ツール」－第３段階　単純な計算ツール（その１：データを計算する）</title>
<description>
<![CDATA[ <p>HOです。</p><br><p>久しぶりの投稿です。</p><p>徐々に気温も下がり、秋から冬へと季節の変化を感じるようになりました。</p><p>皆さま、お変わりないでしょうか。</p><br><br><p>「七転び八起き、Javaの道」シリーズの記事も早いもので3ヶ月たちました。</p><p>少なくとも週1回更新するよう頑張っていますが、</p><p>空いた時間を見つけての投稿の為、更新タイミングがまちまちになりがちですが、</p><p>定期的に訪問してくださったり、ペタをつけてくださったり、ありがとうございます。</p><br><p>また、最近では、</p><p>読者登録してくださる方や、コメント投稿してくださる方もおられるようになりました。</p><p>記事の投稿でいっぱいいっぱいのところもあり、なかなかお礼が言えてないのですが、この場をお借りし、感謝いたします。</p><br><br><p>しばらく投稿が空いてしまいましたが、今後とも頑張っていきます！！！！！！</p><p>「七転び八起き」ですから、目標達成までは、頑張り続けます！</p><p>今後ともよろしくお願い致します。</p><br><br><br><br><p>では、本題に入って行きたいと思います。</p><br><p>ついに、前回までで、第２段階「キーボード入力から意図したデータを受け付ける」ことができました。</p><p>今回以降、第３段階として「受け付けたデータから簡単な計算をし、結果を表示する」ことを目標に頑張って行きたいと思います。</p><p><br></p><br><p>ところで、どんな計算をしましょうか？</p><br><p>第２段階で、</p><p>　　「分量」<br>　　「（入力した人数が）何人分の分量か」<br>　　「何人の分量を知りたいか」<br>の３つのデータを受け取れるようにしました。</p><br><p>第３段階では、この受け取ったデータを使って、</p><p>希望する人数の分量を表示するように改良したいと思います。</p><p><br><br><br>この計算を出すには、</p><p>「分量」÷「分量の人数」×「知りたい人数の分量」</p><p>という計算をすることになります。</p><br><br><br><p>ではまずは、簡単な計算プログラムを作ってみましょう。</p><p>　　</p><p>　　今回も、切干大根２人分の分量25gを、</p><p>　　１０人分にした際の分量を計算してみたいと思います。</p><br><br><p>----------------------------------------------------------</p><br><p>class TestKeisan{<br><br>public static void main(String args[]){<br><br>// ①</p><p>　 double bunryou = 25;</p><p>int ninzuuA = 2;</p><p>int ninzuuB = 10;</p><br><p>double kekka;</p><br><p>// ②</p><p>kekka = bunryou / ninzuuA * ninzuuB;</p><br><p>// ③</p><p>System.out.println(ninzuuB + "人分の分量は、" + kekka + "です。");</p><p><br>}<br><br>}</p><p>----------------------------------------------------------</p><p><br>①で、レシピの分量・人数、知りたい人数、計算結果を入れる変数「kekka」を宣言し、</p><p>②で、その計算をして、その結果を変数「kekka」に入れ、</p><p>③で、結果を画面表示しています。<br></p><br><p>このプログラムをコンパイルし、実行すると、</p><p><a href="http://stat.ameba.jp/user_images/20121104/10/d-s-network/57/e2/j/o0233004012269570039.jpg"><img border="0" alt="ドリームサポートネットーワークのブログ-h01　単純な計算" src="https://stat.ameba.jp/user_images/20121104/10/d-s-network/57/e2/j/o0233004012269570039.jpg"></a> </p><p>となりました。</p><br><br><p>簡単ですね！</p><br><p>ここでのポイントは「演算子」を使うことでした。</p><p>　さて、上のプログラムでは演算子が何種類出てきたでしょうか？</p><p>　次回は、この答えを含め、演算子について詳しく取り上げます。</p><br><br><p>今週はしばらく忙しい日が続きますので、</p><p>次回更新は、１１月８日２３時位を目標に頑張りたいと思います。</p><p>どうぞよろしくお願い致します。</p>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11387214500.html</link>
<pubDate>Sun, 04 Nov 2012 11:26:53 +0900</pubDate>
</item>
<item>
<title>Wiresharkの勉強ープロトコルーEthernetⅡその1</title>
<description>
<![CDATA[ お久しぶりです。HAです。<br>随分と間が空いてしまいましたが皆さんお元気でしょうか。<br><br>さて、先回まででWiresharkでフィルタを使ってみたというお話でしたが<br>やはりWiresharkで押さえなければいけない基本は<br>「各プロトコルのフォーマットの理解」だと思います。<br><br>それで、それを私なりに少しずつ書いていきたいと思います。<br>わからない部分や間違いがあったら教えてください。<br>よろしくお願いいたします。<br><br><br><br><strong>EthernetⅡ</strong><br><br><br><br>まず、下位層のプロトコルから見ていくとすると<br>「EthernetⅡ（イーサネットツー）」からスタートしたいと思います。<br><br><br><br>EthernetⅡとは<br>ネットワークインターフェース層のプロトコルです。<br>これはTCP/IPの参照モデルでのお話ですが<br>OSI参照モデルに直すならば、<br>ネットワークインターフェース層は<br>物理層とデータリンク層の２つを含む階層となります。<br><br>【OSI参照モデルとTCP/IP階層の説明は以下のページがわかりやすかったです】<br>　→　<a href="http://www.atmarkit.co.jp/fwin2k/network/tcpip004/tcpip05.html" target="_blank">TCP/IPプロトコルの階層構造（＠IT）</a>　<br><br><br>IPアドレス以前の階層になるので<br>こちらでは相手を見分けて１対１で通信するために<br>お互いのMACアドレスを使うわけですが、<br><br>通常MACアドレスは最初の半分がNICカードを作った<br>ベンダーさんの固有番号（？というのか知らないが）<br>そして残りの半分はそのカードだけの固有の番号になります。<br>全部合わせてオリジナルのアドレスになるわけです。<br><br><br>そのアドレスに対して通信を行いたいのですが<br>当然ながら最初からネットワーク内のほかのパソコンが<br>どのMACアドレスを持っているかなんて分かりません。<br><br>それでEthernetⅡとそれに続くプロトコルがそれを見分ける仕事をします。<br>EthernetⅡはこのような内容になっています。<br><br><a href="http://stat.ameba.jp/user_images/20121028/11/d-s-network/d5/0d/p/o0400050012258229966.png"><img src="https://stat.ameba.jp/user_images/20121028/11/d-s-network/d5/0d/p/t02200275_0400050012258229966.png" alt="ドリームサポートネットーワークのブログ-Ethernet2"></a><br><br>プリアンブルで同期→宛先MACアドレスを記載→送信元MACアドレスを記載→イーサタイプを記載→データを記載→フレームチェックシーケンス（FCS）、終わり<br><br><br><br>まず通信のための同期がはいってそのあとに相手先のMACアドレスを入れます。<br>でも最初から相手先のMACアドレスを知っているわけはないので<br>最初にここはネットワーク全体に要求を送るブロードキャストが入ります。<br><br>ということでブロードキャストが送出された時には同一ネットワーク内の<br>すべてのカードに受信され、そのカードがデータとFCSを切り離してチェックをし、<br>問題がなければ上位層に挙げます。<br><br>ブロードキャストではなく宛先MACアドレスが決まっているパケットなら<br>該当するNICカードのみがそれを上位層に挙げ、それ以外のカードはパケットを破棄します。<br><br>ここまででEthernetⅡの仕事は終わりです。<br>あとは上位層が仕事をしてくれるということだと思います。<br><br><br>次回はその他細々したEthernetⅡについて書きたいと思います。<br>間違っている部分がありましたら是非教えていただければ幸いです。<br><br><br><br><br>＜<br>ちょっと思ったのですがこのプロトコル内のデータというのは<br>どんな内容が入っているのでしょうか？...<br><br><br>HA　Wiresharkの勉強ープロトコルーEthernetⅡその1
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11390476221.html</link>
<pubDate>Sun, 28 Oct 2012 02:17:07 +0900</pubDate>
</item>
<item>
<title>「料理分量計算ツール」－第２段階　単純なプログラムの記述（その８：意図した入力の受け付け２）</title>
<description>
<![CDATA[ <p>HOです。</p><br><p>前回でついに、"Stringの森"ハイキングコースを踏破したわけですが、<br>今回からは本題に戻って、料理分量計算ツールのアレンジの続きをしていきたいと思います。</p><br><p>今回の説明は、<a href="http://ameblo.jp/d-s-network/entry-11364130624.html" target="_blank">こちら</a> の記述の続きとなります。</p><br><br><p>さて、以下の文を改良しようとしているわけですが、<br>【改良前のプログラム】<br>--------------------------------------------------------------------<br>class InputTest{<br><br>&nbsp;&nbsp;public static void main(String args[]){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;java.io.BufferedReader myReader =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new java.io.BufferedReader( new java.io.InputStreamReader(System.in),1);<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;try{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("文字を入力してください"); //①<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myString = myReader.readLine(); //②<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("入力された文字：　" + myString); //③<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}catch(java.io.IOException e){<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;}<br><br>}<br>--------------------------------------------------------------------</p><br><br><p>この記述から、<br>　　「分量」<br>　　「（入力した人数が）何人分の分量か」<br>　　「何人の分量を知りたいか」<br>の３つのデータを受け取れるようにアレンジしたいと思います。</p><br><br><p>それで、前回取り上げたように、<br>①を、<br>--------------------------------------------------------------------<br>System.out.println("レシピにある分量を記してください");<br>--------------------------------------------------------------------<br>に変更し、<br><br>②を、<br>--------------------------------------------------------------------<br>String myStringA = myReader.readLine(); <br>--------------------------------------------------------------------<br>にします。</p><br><br><p>これで「分量」を受け取れるようにしましたが、<br><br>続いて、<br>「（入力した人数が）何人分の分量か」<br>「何人の分量を知りたいか」<br>も受け取れるようにアレンジしたいと思います。</p><br><p>それで、<br>--------------------------------------------------------------------<br>System.out.println(myStringA + "は、何人分か記してください");<br>String myStringB = myReader.readLine();<br><br>System.out.println("知りたい分量は何人分か記してください");<br>String myStringC = myReader.readLine();<br>--------------------------------------------------------------------<br>という記述を加えたいと思います。<br></p><br><br><p>ところで、ここで一つだけ新しい要素を考えてみたいと思います。<br>--------------------------------------------------------------------<br>System.out.println(myStringA + "は、何人分か記してください");<br>--------------------------------------------------------------------<br>の「myStringA + "は、何人分か記してください"」という部分です。<br><br>「myStringA」は、何度か取り上げたようにString型の参照型変数でした。<br>「"は、何人分か記してください"」の部分も、前回取り上げたように<br>「ダブルクォート("")」は特殊な文法で、Stringの実データを作成するものです。<br><br>では、String型(文字列)とString型（文字列）の間にある「＋」は何でしょうか？<br><br>…これは、<b>演算子</b>です。<br><br>演算子と言うのは、足し算や引き算などでよく使われますが、<br>ここでは文字列と文字列を連結する役割を持っています。<br>演算子については、今回は簡単に触れるだけにしたいと思います。<br>詳しくは、次の第３段階に入ってから取り上げたいと思います。<br></p><br><br><br><br><p>以上で、欲しい３種類のデータが受け取れるようになりました。</p><br><br><br><p>次に③の部分ですが、<br>今回は計算はせず、入力されたデータをそのまま表示させたいと思います。<br>それで<br>--------------------------------------------------------------------<br>System.out.println("レシピの分量＝「" + myStringA + "」");<br>System.out.println("レシピの人数＝「" + myStringB + "人分」");<br>System.out.println("知りたい分量＝「" + myStringC + "人分」");<br>--------------------------------------------------------------------<br>としたいと思います。</p><br><br><br><p>以上で、意図した入力を受け付けることができるようにアレンジできました。</p><br><br><br><p>アレンジしたあとの記述は以下のようになります。<br>--------------------------------------------------------------------<br>class InputTest{<br><br>&nbsp;&nbsp;public static void main(String args[]){<br><br>&nbsp;&nbsp;&nbsp;&nbsp;java.io.BufferedReader myReader =<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;new java.io.BufferedReader( new java.io.InputStreamReader(System.in),1);<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;try{<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("レシピにある分量を記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringA = myReader.readLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myStringA + "は、何人分か記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringB = myReader.readLine();<br><br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("知りたい分量は何人分か記してください");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String myStringC = myReader.readLine();<br><br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("レシピの分量＝「" + myStringA + "」");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("レシピの人数＝「" + myStringB + "人分」");<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("知りたい分量＝「" + myStringC + "人分」");<br><br>&nbsp;&nbsp;&nbsp;&nbsp;}catch(java.io.IOException e){<br>&nbsp;&nbsp;&nbsp;&nbsp;}<br><br>&nbsp;&nbsp;}<br><br>}<br>--------------------------------------------------------------------</p><br><p>では、いつも通り、これを実行してみましょう。</p><br><p>（※復習される場合、以下を参照。<br>①プログラムを保存（<a href="http://ameblo.jp/d-s-network/entry-11321457038.html" target="_blank">こちら</a> ）<br>②コマンドプロンプトの設定（<a href="http://ameblo.jp/d-s-network/entry-11323699870.html" target="_blank">こちら</a> ）<br>③コンパイル（<a href="http://ameblo.jp/d-s-network/entry-11323699870.html" target="_blank">こちら</a> ）<br>④実行（<a href="http://ameblo.jp/d-s-network/entry-11334533492.html" target="_blank">こちら</a> と<a href="http://ameblo.jp/d-s-network/entry-11335291516.html" target="_blank">こちら</a> ））</p><br><br><p>ちなみに、今回、例として「切干大根の煮物」のレシピにある<br>「切干大根」の分量を入力してみたいと思います。<br><br>レシピには「２人分、切干大根25グラム…」と書かれています。<br>もちろん切干大根以外にも、人参や油揚げなどの分量も書かれていますが、<br>現段階では、「切干大根」だけに的を絞りたいと思います。<br><br><br>実行すると、まず以下のように表示されます。<br><a href="http://stat.ameba.jp/user_images/20121023/22/d-s-network/22/8f/j/o0258005812251642665.jpg"><img border="0" alt="ドリームサポートネットーワークのブログ-f02 InputTest2-1" src="https://stat.ameba.jp/user_images/20121023/22/d-s-network/22/8f/j/o0258005812251642665.jpg"></a><br>レシピに書かれている「切干大根」分量は25グラムでしたので、<br>「25」と入力し、Enterを押します。<br><br><br><a href="http://stat.ameba.jp/user_images/20121023/22/d-s-network/f1/41/j/o0228003612251642664.jpg"><img border="0" alt="ドリームサポートネットーワークのブログ-f03 InputTest2-2" src="https://stat.ameba.jp/user_images/20121023/22/d-s-network/f1/41/j/o0228003612251642664.jpg"></a><br>入力した「25」グラムが何人分の分量かですが、<br>レシピは「２人分」となっていましたので、<br>「2」と入力し、Enterを押します。<br><br>ちなみに、先ほど「myStringA」と「"は、何人分か記してください"」の間に「＋」演算子がありましたが、ここで見事に文字列が連結されたことがわかりますね！<br><br><br><a href="http://stat.ameba.jp/user_images/20121023/22/d-s-network/0c/e6/j/o0292003512251642666.jpg"><img border="0" alt="ドリームサポートネットーワークのブログ-f04 InputTest2-3" src="https://stat.ameba.jp/user_images/20121023/22/d-s-network/0c/e6/j/o0292003512251642666.jpg"></a><br>今入力したレシピの分量をもとに何人分の分量を知りたいかですが、<br>特にこだわりはないのですが、今回は「10人分」としようと思いますので、<br>「10」と入力し、Enterを押します。<br><br><br><a href="http://stat.ameba.jp/user_images/20121023/22/d-s-network/e6/f9/j/o0189005912251642667.jpg"><img border="0" alt="ドリームサポートネットーワークのブログ-f05 InputTest2-4" src="https://stat.ameba.jp/user_images/20121023/22/d-s-network/e6/f9/j/o0189005912251642667.jpg"></a><br>全ての入力したデータが、<br>最後にまとめて表示されました。</p><br><br><p>もちろん、わたしが最終的に目指すのは計算して結果を出すことですが、<br>まず第２段階の目標としては、意図した入力を受け付けることでしたので、<br>「分量」「人数」「知りたい分量」を受け付けられたという点で、<br>第２段階の目標は達成としたいと思います。</p><br><br><br><p>次回は第三段階として、<br>この受け付けた値を使って計算を行ない、結果を表示できるように、<br>さらにアレンジしたいと思います。</p><br><br><br><br><br><p>最後に、今回の復習です。<br><br>　文字列と文字列を連結するには、<b>演算子「＋」</b>を使う！<br></p>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11384402572.html</link>
<pubDate>Tue, 23 Oct 2012 23:09:54 +0900</pubDate>
</item>
<item>
<title>「料理分量計算ツール」－第２段階　単純なプログラムの記述（その７：String型）</title>
<description>
<![CDATA[ <p>HOです。</p><br><p>前回、参照型変数と実データをどのように作成するか考えてみました。</p><p>今回は、参照型のひとつString型についてもう少し詳しく見ていきたいと思います。<br></p><br><br><br><br><p>さて、前回以下の記述がどうなるか課題を作ってみました。</p><p>【プログラム１】</p><p>----------------------------------------</p><p>class TestString{<br>&nbsp;&nbsp;public static void main(String[] args) {</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;String myString;</p><p>&nbsp;&nbsp;&nbsp;&nbsp;myString = new String("Test1"); //①</p><p>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myString);</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Test2"); //②</p><br><p>&nbsp;&nbsp;}</p><p>}</p><p>---------------------------------------</p><br><br><br><br><br><p>いつもどおり、以上のプログラムを実行すると、<br><a href="http://stat.ameba.jp/user_images/20121010/02/d-s-network/1e/b8/j/o0233005312229644655.jpg"><img alt="ドリームサポートネットーワークのブログ-g02　String2" src="https://stat.ameba.jp/user_images/20121010/02/d-s-network/1e/b8/j/o0233005312229644655.jpg" border="0"></a> <br>となりました。</p><p><br></p><p>・・・まぁ、予想通りですよね！</p><br><p><br><br></p><p>ところで、ここで考えたい点が、</p><p>通常「参照型」の変数と実データを作成する場合、</p><p>------------------------------------</p><p>型名 変数名；</p><p>変数名 = new 型名()；<br>------------------------------------</p><p>と記述すると前回取り上げました。</p><p>それで【プログラム１】の①でもそのように記述しているわけです。</p><br><p><br></p><br><p>しかし、②にある文字列はどうでしょうか。</p><p>「new」の文字は見当たりません。</p><p>しかし、同じように文字を表示させることができているのです。</p><p>なぜ、このようなことができるのでしょうか？</p><p><br></p><p>ここがString型の特殊な部分です。</p><p><br></p><p><br><br></p><p><strong><u><font size="2">特殊な参照型変数「String」型</font></u></strong></p><br><p>今まで取り上げてきたとおり、</p><p>通常、実データを作成するには「new」キーワードを使います。</p><br><br><p>しかし、Stringが扱う文字列というのは、</p><p>プログラムが扱う型の中でも、特に重要な型です。</p><br><br><p>それで、「String」は参照型ではあるのですが、</p><p>Javaでは、このきわめて重要な「String」型に対して、</p><p>実データを作成する特別な文法が使えるようにしています。<br></p><br><p>それは、文字列をダブルクォート（” ”）で囲むという方法です。</p><br><br><br><br><br><br><p>では、次の記述を実行してみましょう。</p><p>【プログラム２】</p><p>----------------------------------------</p><p>class TestString{</p><p>&nbsp;&nbsp;public static void main(String[] args) {</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;String myString1 = new String("Test1"); //①<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myString1);<br><br>&nbsp;&nbsp;&nbsp;&nbsp;String myString2 = "Test2"; //②<br>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(myString2);</p><br>&nbsp;&nbsp;}<br>}<br><p>---------------------------------------</p><p>どうなったでしょうか？</p><br><br><br><p>・</p><p>・</p><p>・</p><p>・</p><p>・</p><p>・</p><p>・<br><a href="http://stat.ameba.jp/user_images/20121010/02/d-s-network/1e/b8/j/o0233005312229644655.jpg"><img height="53" alt="ドリームサポートネットーワークのブログ-g02　String2" src="https://stat.ameba.jp/user_images/20121010/02/d-s-network/1e/b8/j/o0233005312229644655.jpg" width="233" border="0"></a> <br></p><br><p>・・・やはり、予想通りの結果となりましたね！</p><br><br><br><br><p>では、このプログラムを分析していきたいと思いますが、</p><br><p>【プログラム２】の①について</p><p>----------------------------------------------<br></p><p>　　String myString1 = new String("Test1");　//①</p><p>----------------------------------------------</p><p>としました。</p><br><br><br><p>【プログラム１】の①では、「参照型」の変数と実データを作成する場合、</p><p>------------------------------------</p><p>型名 変数名；</p><p>変数名 = new 型名()；<br>------------------------------------</p><p>と書きましたが、これを省略して、</p><p>------------------------------------</p><p>型名 変数名 = new 型名()；<br>------------------------------------</p><p>と１行で２行分書く方法にしています</p><br><br><br><br><br><p>続いて、②について</p><p>---------------------------------------<br></p><p>　　String myString2 = "Test2"; //②</p><p>---------------------------------------<br></p><p>と書くことで、</p><p>実データ「Test2」が、どこかの場所に作成され、</p><p>その場所(メモリアドレス)を、参照型変数「myString2」に入れています。</p><p><br>このような特殊な記述をJavaが提供しているために、</p><p>「String」は参照型変数であるにもかかわらず、</p><p>基本データ型のような記述ができてしまうわけです。<br><br><br></p><p>そして、かなり大雑把な説明をすると、</p><p>「"Test2"」は、「new String("Test2")」と同じ動作と言えます。</p><p>厳密にJavaを理解している方には、</p><p>全く同じ動作とは言えないと指摘されることと思いますが、</p><p>少なくとも現時点ではそのように考えることとします。<br></p><p><br></p><p>それで、最後に次の記述を考えてみましょう。</p><p>【プログラム３】</p><p>-----------------------------------</p><p>class TestString{<br>&nbsp;&nbsp;public static void main(String[] args) {</p><br><p>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(new String("Test1")); //①<br></p><p>&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("Test2"); //②</p><br><p>&nbsp;&nbsp;}<br>}</p><p>---------------------------------------</p><p>このプログラムを実行すると・・・</p><br><p><br><a href="http://stat.ameba.jp/user_images/20121010/02/d-s-network/1e/b8/j/o0233005312229644655.jpg"><img height="53" alt="ドリームサポートネットーワークのブログ-g02　String2" src="https://stat.ameba.jp/user_images/20121010/02/d-s-network/1e/b8/j/o0233005312229644655.jpg" width="233" border="0"></a> <br></p><p>・・・結果はいつも同じなので、もう見飽きましたね！（=_=；）</p><br><br><p>ただ、【プログラム３】の①②ともに、</p><p>実データがどこにあるかを示す「"ロッカーの鍵"を入れる"ロッカー"」を作成することなく</p><p>つまり、「参照型変数」を作成することなく、直接文字を表示させているという点で、</p><p>いままでとは違うパターンと言えます。</p><br><br><br><p>これで、長かった"Stringの森"ハイキング初心者コースは何とか踏破したこととしたいと思います。</p><p>実際には、"Stringの森"はもっと深い部分があるのですが、</p><p>わたしの今の実力では、遭難の恐れがあるので（^-^；）、今回はここまでとしたいと思います。</p><br><br><p>それで、この森を入るきっかけとなった次の文をまとめたいと思います。</p><p>もう忘れかけているのですが・・・（<a href="http://ameblo.jp/d-s-network/entry-11364130624.html" target="_blank">こちら</a> の記事のことです）</p><p>--------------------------------------</p><p>String myStringA = myReader.readLine(); </p><p>--------------------------------------</p><p>という記述ですが、</p><br><p>この「myStringA」というのは、文字列を入れる「String」型の変数ということでした。</p><p>この中には実データが入っているのではなく、実データの場所がどこかを示す"鍵"が入っていました。</p><br><p>そして、「myString」を「myStringA」に変えたのは、</p><p>1度目に入力されたデータを入れる場所（myStringA）と、</p><p>そのあと2度目に入力されたデータを入れる場所(myStringB)を</p><p>別個に用意する必要があったからでした。</p><br><p>それでは、これまでしばらく"Stringの森"に寄り道しましたが、</p><p>次回は、本題に戻って、料理分量ツールのアレンジの続きをしていきたいと思います。</p><br><br>・<br>・<br>・<br>・<br><p>久しぶりですが、今日のポイントです！</p><br><p>「String」型は、参照型変数ではあるが、</p><p>よく使う変数なので、<strong><font color="#0000ff">ダブルクォート("")</font></strong>で囲むことによって、</p><p>実データが作成され、かつ基本データ型のように記述することができる。</p>
]]>
</description>
<link>https://ameblo.jp/d-s-network/entry-11375793709.html</link>
<pubDate>Sat, 20 Oct 2012 21:46:05 +0900</pubDate>
</item>
</channel>
</rss>
