かんたんなJava入門これからJavaを始めようという人の為の超入門サイトです。?テストの結果、Aさんは80点、Bさんは65点、Cさんは70点、Dさんは95点でした。何のテストやらよく分かりませんが、この点数を管理するプログラムを作りたいと思います。class名は簡単に「Scores」でいきます。お決まりのmainメソッドを書いてから、その中でまずはAさんからDさんまでそれぞれの点数を入れる変数を用意します。}}こういう同じ変数型を複数、宣言するのってなんか面倒くさいですよね。そんな時は、以下のようにまとめて宣言することもできます。scoreD;このように変数名をコンマで区切って続けて書くと全部int型変数と認識してくれます。変数型を何回も書かなくていい分ちょっと楽ですね。点数を30人分入力するとなるとどうでしょう?30個も変数を用意しないと駄目ですよね。上記のやり方では変数型は1回で済みますが、変数名は30個用意しなくてはいけません。それではさすがに大変です。いう時に使えるのが配列です。配列を使えば、同じ変数型の変数の連続を、一つの配列変数として扱うことができます(同じ変数型でないと駄目です)。することで一人一人の点数を格納する変数を宣言しなくても、一つの配列変数の宣言だけで全員分の点数を順番にその配列に格納できるので楽ちんです。変数の宣言が楽になるのは確かですが、もちろんそれだけの為に配列を使うわけではありません。配列を使うことでプログラムの幅がぐっと広がっていろんな事が出来るようになるので、使い方や使い所を掴んで下さい。配列の宣言と初期化というわけで、配列を使ってやっていくので、さきほどのintの宣言文を書き換えます。配列変数も普通の変数と同じようにまず宣言する必要があります。]をつけると、その「変数型の配列」という意味になります。scoresは配列変数の名前です(複数系の単語にすると分かりやすくてgood)。普通の変数の宣言と形は全く同じですね。これでint配列を入れるscoresという名前の箱を用意したわけです。配列の初期化は普通の変数の初期化と違って、その配列にいくつの要素を入れるのかを書く必要があります。いくつ入れるかまだ分からないので後で適当に足していきます、なんていう使い方はできません。以下の形で配列の要素数について記述します。int[4];「new」というのは演算子の一種で非常に重要な役割を果たします。今のところは「新しく作る」みたいな意味でとらえていて下さい。これで初期化は完了です。・・完了といってもこの段階では箱を4つ用意しただけで箱の中身(int変数)については何の値も入れていないですよね。これで初期化と言えますでしょうか??基本データ型の変数では何も値を入れずに(初期化せずに)使うとコンパイルエラーになりましたよね。実はnewした時点で各要素は勝手に全て0で初期化されているんです。int[4]」で0が入ったint変数を4つ用意しているわけです。int[4];これでもOKです。配列の宣言と初期化によって、0が入った4つの箱(要素)が用意できました。全部0じゃ意味ないので用意した4つの要素に値を代入します。一つずつ入れていきましょう。95;このように「配列変数名[通し番号]」の形で、用意した4つの要素のうちの一つを指し示すことができます。一つの要素を指し示してしまえば一つのint型変数と同じように扱えて、上記のように普通に値を代入できます。気をつけないといけないのは、配列の1番目の要素の通し番号は1番ではなく0番だということです。これは覚えてください。配列の通し番号の最初は0番です。配列の個数が4つならば、通し番号は0から3までということです。80;こうしてしまうと、アウトです。「scores[4]」というのは5番目の要素を指してしまいます。箱は4つしか用意していないので5番目の箱はありませんってことでエラーになります。これをやってしまうとコンパイルは通してくれるのですが、実行すると「例外」というのが投げられてプログラムが止まります(「例外」についてはまたの機会に)。慣れない内は要注意です。point「配列変数名[通し番号]」でその配列内の要素を示す通し番号は0番から始まる。値を代入する作業は正直、面倒ですね。「配列なんて面倒なだけじゃないか」とお嘆きの方に朗報です。実はわざわざ一つずつ代入しなくても、一発で各要素に値を入れて初期化してしまう方法もあります。}」をつけ足してその中に各要素の値を順番に「,」で区切りながら書いていきます。int[4]」のようにいくつ要素を用意するかの数字を書いてはいけません。}の中に入れた要素の数がそのままこの配列の要素数になります。5つの要素を用意したいが値を入れるのは4つだけにするなんてことはできません。縮めてこんなのもありです。{80,65,70,95};ただ、ここまで省略してしまうと、ちょっと品がないような・・。初心者の方は楽だからという理由でとにかく短い書き方を選ぶのはよくないです。構文を分かった上で短く書きたい人の為の省略形だと思っておいて下さい。プログラムの方も値を指定した初期化の仕方に書き換えておきます。int[]{80,65,70,95};たった一行になってしまいました。配列のありがたみが分かってきましたね。{要素1,要素2,要素3,・・・}も同じく配列を出力するでは配列として保持したこの4つの値、80、65、70、95を順番に出力していきます。値を代入した時と同じで「配列変数名[通し番号]」の形で各要素にアクセスできます。"点");これで実行すると、こうなります。面白くもなんともなくて申し訳ないです。]」のつける場所なんですが、これが慣れない内は非常に混乱します。見ると変数型の後ろにつけたり、配列変数名の後ろにつけたりしてますよね。80;これは覚えてしまいましょう。・newする時は変数型の後ろ・通し番号を入れる時は変数名の後ろです。あともう一つ、宣言する時です。宣言する時は実はどっちでもいいんです。scores[];どちらでもOKなので、宣言については自分で分かりやすい・使いやすい方にしたらいいと思います。]をつけるのは、どうも気持ち悪いので、型の方につけるようにしています。資格試験を受けるような方はこういうのを完全に覚える必要があります。このどっちでもいいとか、こっちじゃないとダメとかっていうのが非常にやっかいで、配列の宣言・初期化の問題は簡単そうに見えて案外間違います(体験談)。int[4];//2これは具体的に何をしているかと言うと、1配列を入れるscoresという名前の箱を用意する。2intを入れる箱を4つ用意して、それをscoresという箱の中に入れる(代入する)。・・・これちょっと不思議じゃないですか?まずscoresという箱を作ってから、その箱の中に後から別の箱を4つも持ってきて入れろと?4つならまだしも、もし100個も持って来られたら果たして入るのだろうか・・。考えると、初めに配列を格納する箱(scores)を用意する時、一体どんな大きさの箱を用意すればいいのか分かりませんよね。比喩ですが、一旦用意した箱を後から大きくしたりはできないですし、そもそも箱の中に他の箱を入れるなんてことはできません。このソースコードを見る限り箱の中にを4つの箱をぶち込んでいるように見えますよね?一体どういうこと?説明します。int[4]」で、int型変数(intを入れる箱)を4つ確かに作っているのですが、箱を作った後scoresに代入されるのは、4つの箱自体ではありません。配列の要素(intを入れる箱4つ)は作った場所に置いたまま、その箱が置いてある場所を示す値が、配列変数scoresに代入されます。言うなら、場所を示す番地が書かれた紙切れ一枚をscoresという箱に入れているようなものです。それなら箱100個であろうとも、急に後から言われようとも代入できますよね。箱が何個であってもscoresに入れるのは紙切れ一枚で済むんですから(あくまで比喩です)。このように変数(箱)の中に、値そのものではなく、「値を入れた箱の場所」を示す参照値(番地みたいなもの)が入っている変数を、参照型変数と言います。配列変数は参照型変数の一種と言えます。それに対して、基本データ型変数は、用意した箱に値そのものが入っています。基本データ型変数は型の種類によってそれぞれ箱の大きさが決まっているんです(bit数)。ちなみに基本データ型変数にはその箱の大きさを超えるような値は入れられません(コンパイルエラーになります)。ここで問題です!以下のプログラムで一体何が出力されるでしょうか?これは参照型変数と基本データ型変数の大きな違いが分かるプログラムです。一行ずつ理解していけば全然難しくはないので、何が出力されるか自分で考えてみてください。}}問11int配列aを宣言、要素は1,2,3。2int配列bを宣言、そこに配列変数aを代入。ここがポイント!aには何が入っていたんでしたか?配列そのものではなく、配列を置いてある場所を示した紙切れです。紙切れに書いてある番地(値)を代入したんです。これでbも同じ紙切れを持つことになりました。同じ配列を参照するようになったんです。3b[0]に5を代入。a[0]の値は何でしょうか??問24int変数cを宣言し、そこに1を代入。5int変数dを宣言し、そこにcを代入。cに入っているのは値そのものです。値そのものをdに代入しています。これでdはcと同じ値を持つことになりました。cの値は何でしょうか??分かりますでしょうか?本気で考えてみて下さい。参照型変数の仕組みを理解している人は、この問題が簡単に解けると思います。答え合わせはご自身で実行してもらいたいところですが、それではさすがに不親切だと思うので、実行結果を載せておきます。?正解していましたか?間違っていた人はこのプログラムがしていることを一行ずつ順を追って理解していってください。一つ、おもしろいプログラムを。}}配列変数aをprintlnメソッドの引数に渡すと、一体何が出力されるでしょうか?「1,2,3」だと思った方、残念です。答えは紙切れに書いてある値です。しつこいようですが、配列変数aの中身は配列そのものではなく、ただの紙切れです。その紙切れに書かれているのは配列を置いてある場所を示す番地です。このプログラムを実行するとprintlnメソッドによってその「番地」が出力されます。「番地」とはどんなものなのか?暇な人はこのプログラムを(コピペして)実行してみて下さい。基本データ型変数に入っているのは値そのもの配列の基本的な使い方、参照型変数というものの仕組みがちょっとは掴めましたでしょうか?(参照型についてのもうちょっと詳しい説明→基本データ型変数と参照型変数)次回は繰り返し処理for文を使って、もうちょっと複雑なプログラムを作りたいと思います。18:01初心者も初心者な状態でこのサイトを頼りに勉強を進めています!何度か読み返しながら同じものを打ちこみ続けてようやく、といった状態です。23:45Nobuo先生こんにちは^^最近このサイトでJavaを勉強しております。最後の一つ目のテストをやってみました。これって、同一ファイルを複数の編集者で同時編集する感覚にとてもそっくりです。同じファイルを編集(変数を代入)するのだから、すべての編集者(変数)に反映されるのは当たり前と考えたらとてもわかりやすかったです。30万円未満この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Java上級者を目指すなら必読の一冊![詳細]フォローするtwitterfeedline管理人Nobuo_CREATEWordPressテーマPrinciple、マテリアルを作ったり、Androidアプリを作ったり、Java入門サイトを作ったり、本を書いたりしています。大阪の北野田駅近くのマイスタイルという学習塾を経営しています。オススメ書籍この本は全く何も分からない初心者の方にお勧めです。プログラミングをするには覚えなければならない事が無茶苦茶いっぱいありますが、この本は教えてくれる順番、その構成が素晴らしいです。RPGのゲームを作るというストーリーにのっとってちょっとずつ難しいことを教えてもらえます。無機質で膨大なデータが載っているような本は読む気にならないという方は、こういうストーリー仕立ての本でチャレンジしてみてはいかがでしょうか?(注:RPGを作る為の本ではありません。)ある程度、Javaを読み書きできるようになったら、オブジェクト指向について学ぶべきです。本書は、抽象的で分かったような分からんようなオブジェクト指向という考え方について、非常に分かりやすい例を出して説明してくれています。オブジェクト指向とは何なのか?という本質を掴むのにこれほど適した本はないと思います。オブジェクト志向の理念を理解できれば、より効率のいいコードをより楽に書けるようになるはずです。Reserved.arrowuphome。