忍者ブログ

5年ぶりのプログラミング

「 JAVA 」

[PR]

2024.05.10 Friday 23:19

×

[PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。

JAVA勉強するにあたって、おすすめ教材

2008.12.07 Sunday 21:02

JAVAの勉強をするにあたり、JAVAの参考書、本を買おうと2日ほど、いろいろな本屋をめぐっていましたが、

初心者が求める本の条件としては、

・読みやすい
・アプリケーションをつくれるようになりたい
・単にサンプルを写すだけでなく、根本的なことを理解できるようになりたい。

だと思います。


そこでいろいろ調べた結果、ちょっと値段は高い(4000円くらい)もしますが、IT技術の本では最高峰であるオライリーが一番よさそうです。

オライリーというと難しそうなイメージはありますが、このHead Firstシリーズは絵や図を多用して、初心者を飽きさせないというコンセプトで作成されており、また変数やオブジェクト指向というJAVAの基本的な概念からSWINGなどの実用的なものまで、一冊の本で書かれているため、

一冊きっちりとやれば、JAVAについてそこそこのレベルになれるためです。


PR

オブジェクト指向の必要性について

2008.10.14 Tuesday 23:26

さて、ジャンケンプログラムは無事作成完了しました。
さてさて、いよいよなぜ、オブジェクト指向が必要かについてです。

今回作ったジャンケンプログラムに、今度は改良せよと書かれています。

1.プレイヤー1という名前ではなく、○○さんというように具体的に名前をつけられるようにする
2.プレイヤーの人数を変更できるようにする
3.プレイヤーの手の出し方を、すべてランダムではなく、プレイヤーごとに変えられるようにする



改良て・・・1.は大したことないか、あーでも、完全にハードコーディングしてるから、名前を変える度に書き直しにはなるけど。変数つかって、その変数の値だけを変えるようにしてと・・・

2は、人数の変更か。けっこうメンドクサイな。勝敗の判定は、すべてIF文で、プレイヤー1が勝つときのパターンを書いてるから・・めんどくさ!

もう完全に本に書かれた通りの術中にはまってしまっています。


つまり、一度作成したプログラムに仕様変更などが入り、改良するというのはかなり大変で、一から作ったほうがいいんじゃないかのか。というレベルなのです。

これを改善するのがオブジェクト指向で、だから必要なのです。



ということらしいです。オブジェクト指向って。


でも、オブジェクト指向なら本当に仕様変更に強いのかね?そこがよくわからんな・・・




ようやくJavaのプログラミングにはいれた。

2008.10.14 Tuesday 22:47

Javaの環境作りだけでやたらと時間がかかった・・・。さて、元の道に戻ろう。Javaにつきものであるオブジェクト指向を学ぶのだった。

その学び方としては、オブジェクト指向の学ぶ本を使う。
なぜ、あなたはJavaでオブジェクト指向開発ができないのか。




まずは、オブジェクト指向の考え方を使わずに、プログラムを作成して、オブジェクト指向がどういう場面で必要に駆られるのかというところを説明している良書である。

オブジェクト指向を使わずに、じゃんけんプログラムを作れと書かれている。
じゃんけんといっても、下記ルールで作成する。

・プレイヤーは二人で、ジャンケンの様子を再現する
・ジャンケンは3回勝負
・3回勝負で勝った回数の多いプレイヤーが勝ち
・引き分けも1回の勝負
・3回勝負後の勝ち数が同じ場合は、引き分けとする




おし。作成だ。といってもJava未経験に近い俺には、創り方がまったくわからんので、
本に載っているやり方を完全に真似て、作成する。

そして、コンパイル。26個エラー。

まねしたつもりが・・

どこどこだ。


うーんほとんどシンボルが見つかりません。だな。
なんだろう・・・これ。


乱数作成で使っていた関数がramdomになってた・・。8個。
とりあえず修正して、再度コンパイル。

8個減って、残り18個。


のあ!

はさみを示す変数、SCISSORが、定義はSCISSORなのに対して、実際に呼び出すところでは、SCISSORSというように複数形にしてました。なんたることだ。


他にもいろいろでたが、同じようなもので、それらを修正して、コンパイル・・・

今度は、特にエラーもなく通った。

OK!


実行結果は、こんな感じ。

C:\tmp>java SimpleJanken
ジャンケン開始

チョキグー
プレイヤー2が勝ちました!

グーパー
プレイヤー2が勝ちました!

チョキグー
プレイヤー2が勝ちました!

ジャンケン終了

0VS3でプレイヤー2の勝ちです!





まあ、地味だけど、ええんや!Javaの勉強中なんや!




 

やっぱりjava実行、駄目でした・・・・その後原因判明

2008.10.14 Tuesday 19:02

C:\tmp>java C:\tmp\test.class
Exception in thread "main" java.lang.NoClassDefFoundError: C:\tmp\test/class
Caused by: java.lang.ClassNotFoundException: C:\tmp\test.class
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)



さっきのサイトでさらに調べる。

・名前が正しいか?(スペルが正しいか?)
・本当にファイルが存在しているか
・クラスパスが通っているか。



3点のうち、上2つに関しては問題がない。先ほどチェックしたので。
ということはやはりクラスパスのせいのか!?

クラスパスにファイルの存在するパスまで、きっちり書いてさらに実行してみる。


C:\tmp>java -classpath c:\tmp test












Javaプログラム作成中
















うごいたあああああああ!!


ええ?クラスパスのせいか!?
というか、まさか、ファイルに拡張子をつけなかったのがよかったのか!?





C:\tmp>java test
Javaプログラム作成中








ぎゃあああああああああああああああああ。それだけかよ!!!!!!!!!!!!!!!!




まだJavaが実行できない・・・NoClassDefFoundErrorの対処

2008.10.14 Tuesday 18:52

C:\tmp>java sample.java
Exception in thread "main" java.lang.NoClassDefFoundError: sample/java
Caused by: java.lang.ClassNotFoundException: sample.java
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClassInternal(Unknown Source)


WEBで適当に拾ってきたSampleをコンパイルして、実行すると上記のようなエラーになってしまいます。。。なぜなんでしょう。


NoClassDefFoundError:の対処ということで、検索してみる。



まず。sample.classというクラスが本当に存在しているかチェックをする。

んなもん、あるに決まっているやろうが!!







あれ?




あれれ?




sample.javaをコンパイルしたら、test.classになっていた。
なんとお!!


 

1 2 | NEXT

忍者ブログ