1read 100read
2011年10月1期プログラムjava講座を一緒に受けよう! TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【注意】STLの落とし穴【危険】
プログラム関係の雑誌について
アプリケーションの国際化対応の話題スレ
SDL=Simple DirectMedia Layerでゲームだ


java講座を一緒に受けよう!


1 :05/03/07 〜 最終レス :11/08/13
ひょんなことから、今日から2週間、javaの家庭教師をすることになりました。
で、生徒がプログラム作ってる間暇なことが判明。
なので、もしよかったら参加しませんか?
詳しいルールは>>2以降です。
開催は朝9:00〜夜18:00までです。

2 :
ルール
sage進行
全ての質問に答えられるとは限りません。
(当然、生徒優先です。)

3 :
3月7日
javaのインストール
ttp://swsdlcuat.central.sun.com/ECom/docs/Welcome.jsp?StoreId=22&PartDetailId=jdk-1.5.0_02-oth-JPR&SiteId=JSC&TransactionId=noreg
上記をインストールします。
c:\の下にフォルダを作って、インストールしてください。
(ディフォルトでは、c:\Program files\〜になっています。変更してください。)
以下のようになります(細かい数字は、バージョンによって変わります。)
c:\j2sdk1.5.0_02

4 :
c:\の下にJavaProgramというフォルダを新しく作ります。
ここに、プログラムを入れます。
以降は、このフォルダの中で作業をします。
※最初は、エクリプスを使わないでやります。

5 :
まず、helloWorld.javaというテキストファイルを作ります。
中身は、以下のようにします。
文字の使い方
public class helloWorld {

public static void main(String[] args) {
// 文字を表示する
System.out.println("Hello World");
}
}

6 :
次に、バッチファイルを作ります。
j.batというテキストファイルを作って、中身を以下のようにします。
※最初の1行の数字は、インストールしたフォルダにあわせてください。
SET JAVA_HOME=D:\j2sdk1.5.2_06
SET PATH=%PATH%;%JAVA_HOME%\bin
SET CLASSPATH=.;%JAVA_HOME%\lib\tools.jar

7 :
これで準備が出来たので、DOSプロンプトを開きます。
cd c:\JavaProgram
で、プログラムのおいてあるフォルダに移動したら
j.bat
を実行して、設定をします。
これで準備完了
まずは、javaのプログラムをコンパイルします。
javac helloWorld.java
何も表示されなかったら成功です。
次に、コンパイルしたプログラムを実行します。
java helloWorld
画面にHello Worldと出たら成功です。
失敗した場合は、大文字小文字を間違えていないか
確認してください。
×javac helloworld.java

8 :
動いたのでプログラムの解説
>public class helloWorld {
helloWorldって名前のクラスを定義します。
クラスというのは、プログラムの塊みたいなものです。
javaでは、クラス名=ファイル名になります。
>public static void main(String[] args) {
今度は、メインというなまえの、メソッドを定義します。
javaでは、プログラムが実行されると、このmainが最初に
実行されます。
他の細かいpublicとかstaticとかは、とりあえず後で説明します。
いまは、こういうものだと思っておいてください。
{}で囲まれた単位がブロックになっています。
なので、helloWorldクラスの中に、mainメソッドがあると
いえます。

9 :
mainの中には、
>// 文字を表示する
>System.out.println("Hello World");
となっています。
//はコメントといって、それ以降の文字は無視されます。
プログラムに説明やメモを書くのに使います。
>System.out.println("Hello World");
は、画面に文字を出す命令です。
""でくくってある文字を出します。

10 :
なんとなくわかった?
というわけで、次のステップへ

11 :
変数の使い方1
helloWorld.javaを以下のように書き換えます。以降も、そんな感じで
やっていくので、バックアップを取りながらやりましょう。
public class helloWorld {
public static void main(String[] args) {
// 変数の定義
int x;
// xに0を代入
x = 0;
// 文字を表示する
System.out.println("x:" + x);
}
}

12 :
コンパイルして実行すると、
x:5
と出たと思います。
解説です。
>// 変数の定義
>int x;
xという名前のint型の変数を定義しています。
変数というのは、箱のようなものです。
intというのは、箱の種類をあらわします。
intは、整数を入れられる箱です。
まとめると、整数を入れられる箱xを作ったということです。
>// xに0を代入
>x = 0;
xに0をいれます。
>// 文字を表示する
>System.out.println("x:" + x);
xの中身を表示します。これは、こういうものだとおもっておいてください。

13 :
Q&A
・変数には最初なにがはいっているの?
→わかりません。変数に値を入れる前に、使おうとするとコンパイルエラーになります。
・変数の種類は?
→ほかにも、文字を入れる変数、小数点が使える変数など色々ありますが
あとでおしえます。

14 :
応用。割り算です。
/が÷の意味です。でてこないけど、*は×です。
計算
public class helloWorld {
public static void main(String[] args) {
// 変数の定義
int x;

// xに10を代入
x = 10;

// 計算
x = x / 5;

// 文字を表示する
System.out.println("x:" + x);
}
}

15 :
さらに応用です。
//男子800、女子700円で8時間働いた額を求める
public class helloWorld {
public static void main(String[] args) {
// 変数の定義と初期化
int jikyuDansei = 800;
int jikyuJosei = 700;
int kyuryoDansei = 0;
int kyuryoJosei = 0;

// 8時間バイトしたときの給料
kyuryoDansei = jikyuDansei * 8;
kyuryoJosei = jikyuJosei * 8;
// 文字を表示する
System.out.println("男性給料:" + kyuryoDansei);
System.out.println("女性給料:" + kyuryoJosei);
}
}

16 :
こんな感じでもOKですね。
//男子800、女子700円で8時間働いた額を求める(別の例)
public class helloWorld {
public static void main(String[] args) {
// 変数の定義と初期化
int jikyuDansei = 800;
int jikyuJosei = 700;
int kyuryo = 0;

// 8時間バイトしたときの給料
kyuryo = jikyuDansei * 8;
// 文字を表示する
System.out.println("男性給料:" + kyuryo);
// 8時間バイトしたときの給料
kyuryo = jikyuJosei * 8;
// 文字を表示する
System.out.println("女性給料:" + kyuryo);
}
}

17 :
以上、変数については、なんとなく分かってきたので
次は、メソッドを覚えます。
//メソッドのサンプル
public class helloWorld {
// メソッドの定義
private static void helloWorld() {
System.out.println("Hello World");
}
public static void main(String[] args) {
// 文字表示
helloWorld();
}
}

18 :
>private static void helloWorld() {
helloWorldというメソッドを作ります。
中身は
>System.out.println("Hello World");
なので、Hello Worldという字を出すメソッドです。
このメソッドは定義しただけなので、中身がいつ実行されるかは
わかりません。
mainは、
>// 文字表示
>helloWorld();
となっています。ここで、helloWorld()として、メソッドを呼び出しています。
実行結果はいかのようになります。
Hello World

19 :
次は、戻り値のあるメソッドです。
//メソッドのサンプル2
public class helloWorld {
// メソッドの定義
private static int pi() {
return 3;
}
public static void main(String[] args) {
int x;
x = pi();
System.out.println(x);
}
}

20 :
先生。質問!
>>16において
変数 kyuryo の初期化は不要なように思えますが

21 :
>private static int pi() {
piというメソッドを定義します。
さっきまでvoidだった場所が、intになっています。
これは、メソッドの戻り値の型をあらわします。
>return 3;
returnは戻り値を返すという命令です。
>x = pi();
pi()メソッドの戻り値は3になるので、実行結果は
3
になります。

22 :
>>20
正解です。不要ですね。

23 :
ちなみに、コメントのつけ方や、変数の初期化などは後でまとめて
おしえます。いまはまあ、細かいことは言わずに、
まずは全体的な流れをおぼえるという感じでいきましょう。

24 :
メソッドの最後は、引数です。
//男子800、女子700円で8時間働いた額を求める
public class helloWorld {
public static void main(String[] args) {
// 変数の定義と初期化
int jikyuDansei = 800;
int jikyuJosei = 700;
int kyuryo = 0;
// 8時間バイトしたときの給料
kyuryo = kyuryoKeisan(jikyuDansei, 8);
// 文字を表示する
System.out.println("男性給料:" + kyuryo);
// 8時間バイトしたときの給料
kyuryo = kyuryoKeisan(jikyuJosei, 8);
// 文字を表示する
System.out.println("女性給料:" + kyuryo);
}

// メソッドの定義(給料計算メソッド)
private static int kyuryoKeisan(
int argJikyu, // 時給
int argJikan // 勤務時間
) {
// 給料
int kyuryo = 0;
// 時給と勤務時間から給料を求める
kyuryo = argJikyu * argJikan;
// 求めた給料を返却
return kyuryo;
}
}

25 :
メソッドの定義です。
>private static int kyuryoKeisan(
>int argJikyu, // 時給
>int argJikan // 勤務時間
>) {
()のなかで、argJikyuとargJikanというのを定義しています。
これを引数といいます。
呼び出すところでは、
>kyuryo = kyuryoKeisan(jikyuDansei, 8);
という感じでよびます。
こうすると、kyuryoKeisanメソッドを呼んだときに、
jikyuDanseiがargJikyuに、8がargJikanにはいります。
kyuryoKeisanメソッドのなかで、給料を計算して、結果を返します。

26 :
なんとなく分かったところで、次はif文です。
//if文
public class helloWorld {
public static void main(String[] args) {
int a = 2;
if (a == 1) {
System.out.println("aは1");
} else {
System.out.println("aは1以外");
}
}
}

27 :
if文は条件を判断する命令です。
>if (a == 1) {
()の中の式が正しかったら{}の中を、違ってたらelse {}の中を
実行します。
if ()の条件式の書き方
a == 1 :aが1と等しい
a != 1 :aが1と等しくない(1以外)
a > b
a >= b
a < b
a <= b
他にもありますが、基本はこんな感じです。

28 :
さっきの給料計算を改造して、6000以上だったら
ボーナス1000円もらえるようにしましょう。
答えは以下のとおり
// メソッドの定義(給料計算メソッド)
private static int kyuryoKeisan(
int argJikyu, // 時給
int argJikan, // 勤務時間
int argBonus // ボーナス
) {
// 給料
int kyuryo = 0;
// 時給と勤務時間から給料を求め規定額以上かを判定する
kyuryo = argJikyu * argJikan;
if (kyuryo >= 6000) {
kyuryo = kyuryo + 1000;
} else {
kyuryo = kyuryo;
}
// 求めた給料を返却
return kyuryo;
}

29 :
最後はfor文です
これは、繰り返しです。
//for文
public class helloWorld {
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
System.out.println(i);
}
}
}

30 :
>for (int i = 0; i < 10; ++i) {
最初のint i=0
これは、繰り返しに使う変数定義です。
最初に一回だけ実行されます。
i<10
これは、繰り返しの条件です
i<10の間だけ、繰り返します。
++i
これは、増分を書くところで、ループの最後に呼ばれます。
(++iというのは、i=i+1の省略形です。)
まとめると、
i=0からはじまって、i=1,i=2....i=9まで繰り返すということです。
1からはじまって10までなら
for (i = 1; i <= 10; ++i)
または
for (i = 1; i < 11; ++i)
と書くといいでしょう。
どっちでもいいですが、上のほうが10回という数字に意味があるので
分かりやすいかと思います。

31 :
応用問題1
0から9までの数を表示するプログラムをつくりなさい。
ただし、5のばあいは、500を表示すること
応用問題2
掛け算の九九を表示するプログラムを作りなさい。
1*1〜9*9までを表示すること。
以上、正解は明日。
今日は、講座の終わりに書き込みましたが、明日からは講座をしながら
少しずつ書いていきたいと思います。

32 :
先生。質問!
>>28におけるkyuryoKeisanの引数argBonus
は不要では無いでしょうか

33 :
>>32
あーごめんなさい。不要ですね。
(生徒が間違ったプログラムを作った名残です。ごめんなさい)

34 :
良スレの予感

35 :
応用問題1の答え
//for文
public class helloWorld {
public static void main(String[] args) {
for (int i = 0; i <= 10; ++i) {
if (i == 5) {
System.out.println("500");
} else {
System.out.println(i);
}
}
}
}

36 :
応用問題2の答え
public class helloWorld {
public static void main(String[] args) {
for (int i = 1; i <= 9; i = i + 2) {
System.out.println(i + "の段");
for (int j = 2; j <= 8; j = j + 2) {
System.out.println(i + "*" + j + "=" + (i * j));
}
}
}
}

37 :
というわけで、今日の授業開始
まずは、昨日のおさらいもかねて、
九九を9の段から順番に表示するプログラムを作る

38 :
回答。簡単ですね。
public class helloWorld {
public static void main(String[] args) {
for (int i = 1; i <= 9; i = i + 2) {
System.out.println(i + "の段");
for (int j = 2; j <= 8; j = j + 2) {
System.out.println(i + "*" + j + "=" + (i * j));
}
}
}
}

39 :
今日は配列をやります。
public class helloWorld {
public static void main(String[] args) {
int[] x = { 0, 1, 2 };
for (int i = 0; i <= 2; ++i) {
System.out.println(x[i]);
}
}
}

40 :
>int[] x = { 0, 1, 2 };
xという変数を配列で定義して、値を初期化しています。
x[0] = 0;
x[1] = 1;
x[2] = 2;
という意味です。

41 :
別の書き方をするとこうなります。
public class helloWorld {
public static void main(String[] args) {
int[] x = new int[3];
x[0] = 10;
x[1] = 11;
x[2] = 12;
for (int i = 0; i <= 2; ++i) {
System.out.println(x[i]);
}
}
}

42 :
>int[] x = new int[3];
これは、xをint型の配列[]で定義して
そこにint型で[3]の配列を代入するみたいな意味です。
これで、x[0],x[1],x[2]の3個の箱が出来ます。
new int[3]の3は、箱の数です。箱の番号は0から始まるので、
箱の最大番号は2になるのを理解してください。
箱の番号を表す[]の中の数字を添え字といいます。
添え字と箱の中身は別です。
x[0] = 10
というのは、0番目の箱に10を入れるということです。

43 :
それでは、応用問題
10個箱を作って、1〜10間での数をいれたあと
表示するプログラムを作りなさい。

44 :
答え。あってるけど何か変です。
public class helloWorld {
public static void main(String[] args) {
int[] x = new int[10];
for (int h = 0; h <= 9; ++h){
x[h] = h + 1;
}
for (int i = 0; i <= 9; ++i) {
System.out.println(i + " : " + x[i]);
}
}
}

45 :
>for (int h = 0; h <= 9; ++h){
>x[h] = h + 1;
>}
ループ用の変数にhを使っていますが、これはiにしたほうがいいでしょう。
一般的にループ用の変数の名前にはiが使われます。
ちなみに、
うえのループとしたのループは別々の{}で囲まれているので
iも別々に定義されます。

46 :
じゃあ、逆に10〜1を入れるにはどうすればいい?
答えはこんな感じ
public class helloWorld {
public static void main(String[] args) {
int[] x = new int[10];
for (int i = 0; i <= 9; ++i){
x[i] = 10 - i;
}
for (int i = 0; i <= 9; ++i) {
System.out.println(i + " : " + x[i]);
}
}
}

47 :
というわけで、超基本編はおしまい。
ここからは、eclipseというソフトを使っておこないます。

48 :
本体
ttp://www.eclipse.org/downloads/download.php?file=/eclipse/downloads/drops/R-3.0.1-200409161125/eclipse-SDK-3.0.1-win32.zip
日本語化
http://download.eclipse.org/eclipse/downloads/drops/L-3.0.1_Translations-200409161125/NLpack-eclipse-SDK-3.0.x-win32.zip
上記をダウンロードして
c:\eclipse
にインストールします。

49 :
以降は、
プロジェクト名
test
パッケージ名
testJava
クラス名
MainJava
という感じでクラスを作って行います。
前回までは、helloWorld.javaを使っていましたが、名前が変だったので
MainJavaにします。
クラスの最初の文字は大文字です。(helloWorldが間違っていた)

50 :
コテハン記憶チェックつけるの忘れてました。
すみません。
で、ここまでできたら、さっきのプログラムを移植して
動くかどうかテストしてみてください。
eclipseの使い方については省略します。

51 :
Eclipseだけインストールしてもだめみたい
javaにバグがあるそうなので、下記を見てインストールを
http://www.eclipsewiki.net/eclipse/?%A5%A4%A5%F3%A5%B9%A5%C8%A1%BC%A5%EB

52 :
IBMのJREをインストールすれば、eclipseきちんと動くようです。
>>51のページに書いてあります。
今日は、昨日の復習・・・かなりつまづいているので
復習だけで終わりそう?

53 :
こんどは、新しいクラスを作ってみる
掛け算と足し算のメソッドが入ったクラスSubJavaを作る
package testJava;
public class SubJava {
public static int kakezan(
int argHidari,
int argMigi
){
int kotae = argHidari * argMigi;
return kotae;
}
public static int tasizan(
int argHidari,
int argMigi
){
int kotae = argHidari + argMigi;
return kotae;
}
}

54 :
これをmainで使う場合は、以下のとおり
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {
int kotae;
kotae = SubJava.kakezan(1, 5);
System.out.println(kotae);
kotae = SubJava.tasizan(1, 5);
System.out.println(kotae);
}
}

55 :
まず、SubJavaがMainJavaから使えるようにする。
>import testJava.SubJava;
あとは、使いたい場所でクラス名.メソッド名と書けばOK
>kotae = SubJava.kakezan(1, 5);
>kotae = SubJava.tasizan(1, 5);

56 :
つぎに、tashizanのstaticをはずしてみる。
public int tasizan(
int argHidari,
int argMigi
){
int kotae = argHidari + argMigi;
return kotae;
}

57 :
そうすると、MainJavaでtashizanが使えなくなるので、
以下のように変える
public static void main(String[] args) {
int kotae;

kotae = SubJava.kakezan(1, 5);
System.out.println(kotae);

SubJava subJava = new SubJava();
kotae = subJava.tasizan(1, 5);
System.out.println(kotae);

}

58 :
javaでは、コンパイルしたら、設計図みたいなのが出来るだけで、
本体は出来ない。そこで、本体を作ってあげる必要がある。
>SubJava subJava = new SubJava();
ここで、subjavaをSubJava型で新しく作る。
(xという箱をint型で作るのと同じ感じ)
>kotae = subJava.tasizan(1, 5);
subjavaの中のtashizanを使う
じゃあなんで、staticは使えたのか?
staticの場合は、設計図みたいなとこに本体があって
みんなで使う感じになってる。
なんで、本体を作らなくても使える。
逆に、本体を作っても、staticだけは、新しく作られずに
設計図のが使われる。

59 :
わかりやすくするために、変数でやってみる。
package testJava;
public class SubJava {
public static int x = 0;
public int y = 0;
public static int kakezan(
int argHidari,
int argMigi
){
int kotae = argHidari * argMigi;
return kotae;
}
public int tasizan(
int argHidari,
int argMigi
){
int kotae = argHidari + argMigi;
return kotae;
}
}

60 :
これを使うMainJavaはこんな感じ
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {

SubJava.x = SubJava.x + 1;
System.out.println(SubJava.x);

SubJava subJava = new SubJava();
subJava.x = subJava.x + 1;
System.out.println(subJava.x);

subJava.y = subJava.y + 1;
System.out.println(subJava.y);
}
}

61 :
xはstaticなので、そのまま本体を作らなくても使える。
>SubJava.x = SubJava.x + 1;
でも、yは本体を作る必要がある
ついでに、本体のxにも1を足してみる
>SubJava subJava = new SubJava();
>subJava.x = subJava.x + 1;
>subJava.y = subJava.y + 1;
実行結果は
1
2
1
になる。
>subJava.x = subJava.x + 1;
の結果が2になることを理解してほしい。
xはstaticなので、本体を作っても設計図のほうに+1される。

62 :
本体を2個作ることも出来る
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {
SubJava subJava = new SubJava();
subJava.x = subJava.x + 1;
System.out.println(subJava.x);
subJava.y = subJava.y + 1;
System.out.println(subJava.y);
SubJava subJava2 = new SubJava();
subJava2.x = subJava2.x + 1;
System.out.println(subJava2.x);
subJava2.y = subJava2.y + 1;
System.out.println(subJava2.y);
}
}

63 :
実行結果は
1<-x
1<-y
2<-x
1<-y
になる。(<-yとかはわかりやすくするためにつけた、表示されない)
xはstaticなので2になる。
subJavaでもsubJava2でも同じのを使っているため。
yは本体の中に組み込まれているので、
別々の値になる。なので1になる。

64 :
staticあり、なしの区別と
本体を作るということが理解できただろうか?
応用問題
合計を求めるメソッドを作れ。
goukei(1) -> 1
goukei(5) -> 6
goukei(16) -> 22
というような感じで、どんどん足していって答えを返すメソッド。
メインでは、以下のように呼び出す。
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {
SubJava subJava = new SubJava();
subJava.goukei = subJava.goukei + subJava.kazu;
System.out.println(subJava.goukei(1));
System.out.println(subJava.goukei(5));
System.out.println(subJava.goukei(16));
}
}

65 :
まちがえた、メインは以下のとおり
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {
SubJava subJava = new SubJava();
System.out.println(subJava.goukei(1));
System.out.println(subJava.goukei(5));
System.out.println(subJava.goukei(16));
}
}

66 :
合計の値をどうやって保持するか?
というのが難しい?

67 :
答えはこんな感じ
(goukeiをstaticにしないのは、本体を何個も作っても個別に合計を計算できるように。)
package testJava;
public class SubJava {
public int goukei = 0;
public int goukei(
int argKazu
){
goukei = goukei + argKazu;
return goukei;
}
}

68 :
さて、一応正解なのですが、たとえば、mainで
subJava.goukei = 100;
などとされると、合計の値がおかしくなってしまいます。
そこで、
public int goukei = 0;

private int goukei = 0;
に変えます。
privateは、定義されている{}の外から見えなくなるという意味です。
定義されている{}の中やさらにその中の{}の中では見れます。
なんで、mainJavaからは、goukei という変数はみれませんが、
SubJavaのなかでは、普通に使えるというわけです。
予断ですが、変数とメソッドに同じ名前をつけています。
わかりづらいですね。やめたほうがいいです。

69 :
応用問題
本体を複数作られたとしても、大丈夫な、総合計を求めるメソッドを作りなさい。
メインはこんな感じ
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {

SubJava subJava1 = new SubJava();
System.out.println(subJava1.goukei(1));
System.out.println(subJava1.goukei(5));
System.out.println(subJava1.goukei(16));
SubJava subJava2 = new SubJava();
System.out.println(subJava2.goukei(1));
System.out.println(subJava2.goukei(5));
System.out.println(subJava2.goukei(16));

System.out.println(SubJava.soGoukei());
}
}

70 :
答えはこんな感じ。staticを使うというのに気づけば楽勝
package testJava;
public class SubJava {
private int goukei = 0;
private static int soGoukei = 0;
public int goukei(
int argKazu
){
goukei = goukei + argKazu;
soGoukei = soGoukei + argKazu;
return goukei;
}
public static int soGoukei(){
return soGoukei;
}
}

71 :
ちなみに、クラスも配列に出来る。
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {
SubJava[] subJava = new SubJava[2];
subJava[0] = new SubJava();
System.out.println(subJava[0].goukei(1));
System.out.println(subJava[0].goukei(5));
System.out.println(subJava[0].goukei(16));
subJava[1] = new SubJava();
System.out.println(subJava[1].goukei(1));
System.out.println(subJava[1].goukei(5));
System.out.println(subJava[1].goukei(16));
System.out.println(SubJava.soGoukei());
}
}

72 :
ポイントは、
>SubJava[] subJava = new SubJava[2];
ここでは、配列の数を決めただけで、初期化はされていないので、
>subJava[0] = new SubJava();
各添え字ごとに、初期化をする必要があるということ。
あとは、intとかの配列と一緒だと思ってかまわないです。

73 :
次はセッター、ゲッターの考え方を覚えましょう
まずは、SubJava
package testJava;
public class SubJava {
private int no = 0;
private int jikyu = 0;
public int getJikyu() {
return jikyu;
}
public void setJikyu(int argJikyu) {
jikyu = argJikyu;
}
public int getNo() {
return no;
}
public void setNo(int argNo) {
no = argNo;
}
}

74 :
>private int no = 0;
>private int jikyu = 0;
で変数を定義していますが、privateなのでMainJavaからはみえません
そこで、
>public int getNo() {
>return no;
>}
>public void setNo(int argNo) {
>no = argNo;
>}
をつくってアクセスできるようにします。

75 :
MainJavaはこんな感じになります。
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {

SubJava tonosama = new SubJava();
tonosama.setNo(1);
tonosama.setJikyu(3000);
System.out.println("no:" + tonosama.getNo());
System.out.println("jikyu:" + tonosama.getJikyu());
SubJava puzzle = new SubJava();
puzzle.setNo(2);
puzzle.setJikyu(2700);
System.out.println("no:" + puzzle.getNo());
System.out.println("jikyu:" + puzzle.getJikyu());
}
}

76 :
tonosamaとpuzzleの二人について、社員番号と時給を設定している感じです。
このように、classは、ゲッターセッターを使うことによって
おっきな変数の塊のようなかんじで使うことが出来ます。
社員情報をSubJavaというクラスにまとめているわけです。
例では、tonosamaの社員情報を作成して、社員番号と時給を設定
そのあとに、puzzleの社員情報を作成して、社員番号と時給を設定しています

77 :
それでは問題。
時給2000円以上の場合は、2000円にするという処理をいれたいけど
どうすればいいでしょう?

78 :
生徒がだした回答が以下のとおり
うーん、確かにあってるんだけど・・・・。
package testJava;
public class SubJava {
private int no = 0;
private int jikyu = 0;
public int getJikyu() {
if (jikyu >= 2000){
return 2000;
} else {
return jikyu;
}
}
public void setJikyu(int argJikyu) {
jikyu = argJikyu;
}
public int getNo() {
return no;
}
public void setNo(int argNo) {
no = argNo;
}
}

79 :
とりあえず、正解ということにしておいて次の問題
引数に勤務時間を入れると給料が取得できるメソッドを作りなさい。
計算式は
給料=勤務時間×時給
MainJavaはこんな感じ
package testJava;
import testJava.SubJava;
public class MainJava {
public static void main(String[] args) {
SubJava tonosama = new SubJava();
tonosama.setNo(1);
tonosama.setJikyu(3000);
System.out.println("no:" + tonosama.getNo());
System.out.println("jikyu:" + tonosama.getJikyu());
System.out.println("kyuryo:" + tonosama.getKyuryo(8));

SubJava puzzle = new SubJava();
puzzle.setNo(2);
puzzle.setJikyu(2700);
System.out.println("no:" + puzzle.getNo());
System.out.println("jikyu:" + puzzle.getJikyu());
System.out.println("kyuryo:" + puzzle.getKyuryo(8));
}
}

80 :
答えはこんな感じです・・・と、おもったら
public int getKyuryo(int argJikan) {
return jikyu * argJikan;
}

81 :
うまくいかないですね。なぜでしょう?
それは、getJikyuで2000以上かどうか見てるからです。
と、いうわけで、セットするときに2000以上だったら2000でセットするように改造しましょう。
package testJava;
public class SubJava {
private int no = 0;
private int jikyu = 0;
public int getJikyu() {
return jikyu;
}
public int getKyuryo(int argJikan) {
return jikyu * argJikan;
}
public void setJikyu(int argJikyu) {
if (argJikyu >= 2000){
jikyu = 2000;
} else {
jikyu = argJikyu;
}
}
public int getNo() {
return no;
}
public void setNo(int argNo) {
no = argNo;
}
}

82 :
こんな感じです。
逆に、内部で2000ではなく、2000以上の値で処理したい場合には、
return jikyu * argJikan;
ではなく
return getJikyu() * argJikan;
にすればよかったです。
これは、どっちがいいかというと、どっちともいえませんが、
セットするときに値を調整したほうが、分かりやすいと思います。

83 :
と、いうわけで、今日はこんな感じでおしまい。
よく、復習しておいてください。
何か質問あったら遠慮なくどうぞ。

84 :
おはようございます。
今日もがんばりましょう。

85 :
先生!今更ごめんなさい!
どうしてJavaのインストール先がデフォルトのままじゃいけないんですか?

86 :
先生です。きょうは、1日復習で終わってしまった・・・。
生徒が文法や単語を覚え切れてないので、明日は自習になりました。

>>85
ディフォルトのインストール先はProgram Filesなので、
フォルダ名に空白が入るからです。
コマンドプロンプトや環境変数の設定などで
空白がはいってると不便だし誤動作するといやなので
別のフォルダに入れました。

あと、外人の作ったアプリは、日本語名の入ったフォルダに
対応していないことが多いのでこれも注意しよう!

87 :
◆WtRerEDlHI先生頑張ってくれ!
ずっとこのスレ続けていってほしいYO

88 :
>>87
応援ありがとう!先生うれしいよ。
あしたもがんばるぜ!
みんなも質問あったら遠慮なくどうぞ。
先生、初心者が疑問に思う点とか分からないから
質問してもらえると勉強になるデス。

89 :
超良スレ。がんがれ。
先生しつもーん。
オブジェクト指向がなかなか身につかない気がするの。
何が分からないのか分からない状態だから、
こんなこと聞くと困るかもしれないけど、何が原因だと思う?
一応、一通りは勉強しました。
読んだ本は「10日でおぼえるオブジェクト指向入門」。

90 :
先生さあ、なんか昼間10時間くらい寝たからねむくないんだよねー
明日起きれるのだろうか・・・
それはさておき、質問にこたえますです。
>オブジェクト指向がなかなか身につかない気がするの。
うーん、難しいなあ。オブジェクト指向以前の言語は知っていますか?
オブジェクト指向の言語が出てきたときに、「あ、俺が求めていた言語だ」って喜んだ人と、
「なにこれ、意味分からない」って思った人と2種類いると思うんだよね。
ちなみに、先生は前者でした。
前者なら、あとは、いろいろ実践を積む・・・なんか作ってみたりして、それを
人に見せる機会を設ける。
後者なら、各機能について、どうして、既存の言語と違ってこうなってるんだろう?
っていうのを考えてみるといいと思う。
最初から、オブジェクト指向を覚えた人は・・・、どうなんだろうなあ。

91 :
オブジェクト指向にしても、ほかの事についてもそうなんだけど
たとえば、昔はGOTOしかなかったわけだ。それが、GOSUB〜RETURNが
できて、関数ができて・・・という風に、どんどん
拡張されてきた。
で、GOSUBしかなかった時代に「関数があったらいいな」って思っていたの人なら
関数を始めて目にしたときに、その意味、利点が分かっていると思うんだよね。
そういう人は、あとはもう、関数の文法だけ覚えれば使いこなせるはず。
そうじゃなくて、GOSUBで満足していた人にとっては、「関数って何だ?」って
ことになるわけだ。そういう人にとって関数を覚えるのはただ複雑な機能にしか
過ぎないんだよね。文法を覚えても、いまいち使いこなせない。
そもそも、GOSUBでも同じことができるわけだし。
そういう人は、「どうして関数という機能が追加されたか」ってことを考えれば
いいと思う。そうすれば、意味や利点が分かってくる。
そうやって、自分の物にしてけばいいと思うよ。

92 :
ちなみに、オブジェクト指向のなにがいまいち分からない?
・クラスとかそのへん
・デザインパターン
・UML
クラスとかそのへんは、ある程度しっかり理解しておいたほうがいいと思う。
実際すべての機能を使うかどうかは別として。
英語の文法みたいなものだから、覚えないと話せないからね。
デザインパターンは、いうなれば、過去のプログラムのよくある形をまとめただけ
だから、知らなくても何とかなるし、実践で使う機会にならなければ「ふーん」ってな
もんだと思う。デザインパターンが生み出される前から同じ形のプログラムを作ってた人も
多いと思うし。ただ、しっていて損することはないよね。
基本設計をするときに、「これは、あのパターンでやろう」とかいえたらすごいと思う。
数学の公式みたいなものだから。知らなくても自分で考えれば何とかなる。
けど、自分で考えるより公式知ってれば早いし正確だし無駄がない。
UMLもデザインパターンと同じ位置づけだよね。
ただ、仕事でやるんなら、コミニュケーションの手段として必要かもしれない。
そうなったらきちんと覚えないと。でも、それまでは気にしなくていいと思う。

93 :
なんか、読み返してみると分かりづらいですが、
参考になったでしょうか?
そいでは。また明日もがんばりましょう。
ていうか、今日だ。

94 :
おはようございます。
今日は2次元配列から
int[][] x = new x[3][3];
int[][] x = { {0,1,2}, {3,4,5}, {6,7,8} };
こんな感じで配列の配列をつくれます。

95 :
サンプルはこんな感じ
yは使ってないけど、こんなふうにできるってことで。
package testJava;
public class MainJava {

public static void main(String[] args) {

int[][] x = {
{ 0, 1, 2},
{ 3, 4, 5},
{ 6, 7, 8}
};
int[][] y = new int[3][3];

for (int i = 0; i <= 2; ++i) {
for (int j = 0; j <= 2; ++j) {
System.out.println(x[i][j]);
}
}
}
}

96 :
それでは問題
1:九九の答えを配列に入れる
2:答えの配列の中身を表示
こんな感じのプログラムを作れ
ただし、1と2のループは分ける事

97 :
答えはこんな感じ
最初のループは0から始めてもいい(その場合は計算式が変わる)
package testJava;
public class MainJava {

public static void main(String[] args) {
int[][] x = new int[9][9];

for (int i = 1; i <= 9; ++i) {
for (int j= 1; j <= 9; ++j) {
x[i - 1][j - 1] = i * j;
}
}

for (int i = 0; i <= 8; ++i) {
for (int j = 0; j <= 8; ++j) {
System.out.println(x[i][j]);
}
}
}
}

98 :
boolean型をおぼえます
package testJava;
public class MainJava {
public static void main(String[] args) {
boolean isX;
isX = true;
if (isX) {
System.out.println("True");
} else {
System.out.println("False");
}
isX = false;
if (isX) {
System.out.println("True");
} else {
System.out.println("False");
}
if (1 == 1) {
System.out.println("True");
} else {
System.out.println("False");
}
isX = (1 == 1);
if (isX) {
System.out.println("True");
} else {
System.out.println("False");
}
}
}

99 :
boolean型には、trueかfalseがはいります。
trueは真、falseは偽という意味です。
if文は if ( 条件式 ) という感じで条件の中身によって分岐しますが
じつは、これは条件式の結果がtrueかどうかを判断しています。
なので、
>isX = true;
>if (isX) {
とすれば、trueになります。
逆に言うとbolean型には条件式の判断結果を入れることが出来ます。
>isX = (1 == 1);
とすれば、isXにはtrueがはいります。

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 削除依頼
・ 次のスレ
【注意】STLの落とし穴【危険】
プログラム関係の雑誌について
アプリケーションの国際化対応の話題スレ
SDL=Simple DirectMedia Layerでゲームだ