java講座を一緒に受けよう!
at TECH
1: ◆WtRerEDlHI
05/03/07 16:20:44
ひょんなことから、今日から2週間、javaの家庭教師をすることになりました。
で、生徒がプログラム作ってる間暇なことが判明。
なので、もしよかったら参加しませんか?
詳しいルールは>>2以降です。
開催は朝9:00〜夜18:00までです。
2: ◆WtRerEDlHI
05/03/07 16:22:09
ルール
sage進行
全ての質問に答えられるとは限りません。
(当然、生徒優先です。)
3: ◆WtRerEDlHI
05/03/07 16:25:42
3月7日
javaのインストール
URLリンク(swsdlcuat.central.sun.com)
上記をインストールします。
c:\の下にフォルダを作って、インストールしてください。
(ディフォルトでは、c:\Program files\〜になっています。変更してください。)
以下のようになります(細かい数字は、バージョンによって変わります。)
c:\j2sdk1.5.0_02
4: ◆WtRerEDlHI
05/03/07 16:28:19
c:\の下にJavaProgramというフォルダを新しく作ります。
ここに、プログラムを入れます。
以降は、このフォルダの中で作業をします。
※最初は、エクリプスを使わないでやります。
5: ◆WtRerEDlHI
05/03/07 16:32:56
まず、helloWorld.javaというテキストファイルを作ります。
中身は、以下のようにします。
文字の使い方
public class helloWorld {
public static void main(String[] args) {
// 文字を表示する
System.out.println("Hello World");
}
}
6: ◆WtRerEDlHI
05/03/07 16:34:41
次に、バッチファイルを作ります。
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: ◆WtRerEDlHI
05/03/07 16:37:42
これで準備が出来たので、DOSプロンプトを開きます。
cd c:\JavaProgram
で、プログラムのおいてあるフォルダに移動したら
j.bat
を実行して、設定をします。
これで準備完了
まずは、javaのプログラムをコンパイルします。
javac helloWorld.java
何も表示されなかったら成功です。
次に、コンパイルしたプログラムを実行します。
java helloWorld
画面にHello Worldと出たら成功です。
失敗した場合は、大文字小文字を間違えていないか
確認してください。
×javac helloworld.java
8: ◆WtRerEDlHI
05/03/07 16:48:06
動いたのでプログラムの解説
>public class helloWorld {
helloWorldって名前のクラスを定義します。
クラスというのは、プログラムの塊みたいなものです。
javaでは、クラス名=ファイル名になります。
>public static void main(String[] args) {
今度は、メインというなまえの、メソッドを定義します。
javaでは、プログラムが実行されると、このmainが最初に
実行されます。
他の細かいpublicとかstaticとかは、とりあえず後で説明します。
いまは、こういうものだと思っておいてください。
{}で囲まれた単位がブロックになっています。
なので、helloWorldクラスの中に、mainメソッドがあると
いえます。
9: ◆WtRerEDlHI
05/03/07 16:50:05
mainの中には、
>// 文字を表示する
>System.out.println("Hello World");
となっています。
//はコメントといって、それ以降の文字は無視されます。
プログラムに説明やメモを書くのに使います。
>System.out.println("Hello World");
は、画面に文字を出す命令です。
""でくくってある文字を出します。
10: ◆WtRerEDlHI
05/03/07 16:50:36
なんとなくわかった?
というわけで、次のステップへ
11: ◆WtRerEDlHI
05/03/07 16:52:26
変数の使い方1
helloWorld.javaを以下のように書き換えます。以降も、そんな感じで
やっていくので、バックアップを取りながらやりましょう。
public class helloWorld {
public static void main(String[] args) {
// 変数の定義
int x;
// xに0を代入
x = 0;
// 文字を表示する
System.out.println("x:" + x);
}
}
12: ◆WtRerEDlHI
05/03/07 17:01:05
コンパイルして実行すると、
x:5
と出たと思います。
解説です。
>// 変数の定義
>int x;
xという名前のint型の変数を定義しています。
変数というのは、箱のようなものです。
intというのは、箱の種類をあらわします。
intは、整数を入れられる箱です。
まとめると、整数を入れられる箱xを作ったということです。
>// xに0を代入
>x = 0;
xに0をいれます。
>// 文字を表示する
>System.out.println("x:" + x);
xの中身を表示します。これは、こういうものだとおもっておいてください。
13: ◆WtRerEDlHI
05/03/07 17:02:48
Q&A
・変数には最初なにがはいっているの?
→わかりません。変数に値を入れる前に、使おうとするとコンパイルエラーになります。
・変数の種類は?
→ほかにも、文字を入れる変数、小数点が使える変数など色々ありますが
あとでおしえます。
14: ◆WtRerEDlHI
05/03/07 17:03:48
応用。割り算です。
/が÷の意味です。でてこないけど、*は×です。
計算
public class helloWorld {
public static void main(String[] args) {
// 変数の定義
int x;
// xに10を代入
x = 10;
// 計算
x = x / 5;
// 文字を表示する
System.out.println("x:" + x);
}
}
15: ◆WtRerEDlHI
05/03/07 17:04:28
さらに応用です。
//男子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: ◆WtRerEDlHI
05/03/07 17:04:53
こんな感じでも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: ◆WtRerEDlHI
05/03/07 17:21:22
以上、変数については、なんとなく分かってきたので
次は、メソッドを覚えます。
//メソッドのサンプル
public class helloWorld {
// メソッドの定義
private static void helloWorld() {
System.out.println("Hello World");
}
public static void main(String[] args) {
// 文字表示
helloWorld();
}
}
18: ◆WtRerEDlHI
05/03/07 17:24:20
>private static void helloWorld() {
helloWorldというメソッドを作ります。
中身は
>System.out.println("Hello World");
なので、Hello Worldという字を出すメソッドです。
このメソッドは定義しただけなので、中身がいつ実行されるかは
わかりません。
mainは、
>// 文字表示
>helloWorld();
となっています。ここで、helloWorld()として、メソッドを呼び出しています。
実行結果はいかのようになります。
Hello World
19: ◆WtRerEDlHI
05/03/07 17:25:01
次は、戻り値のあるメソッドです。
//メソッドのサンプル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:デフォルトの名無しさん
05/03/07 17:25:17
先生。質問!
>>16において
変数 kyuryo の初期化は不要なように思えますが
21: ◆WtRerEDlHI
05/03/07 17:29:36
>private static int pi() {
piというメソッドを定義します。
さっきまでvoidだった場所が、intになっています。
これは、メソッドの戻り値の型をあらわします。
>return 3;
returnは戻り値を返すという命令です。
>x = pi();
pi()メソッドの戻り値は3になるので、実行結果は
3
になります。
22: ◆WtRerEDlHI
05/03/07 17:31:03
>>20
正解です。不要ですね。
23: ◆WtRerEDlHI
05/03/07 17:32:13
ちなみに、コメントのつけ方や、変数の初期化などは後でまとめて
おしえます。いまはまあ、細かいことは言わずに、
まずは全体的な流れをおぼえるという感じでいきましょう。
24: ◆WtRerEDlHI
05/03/07 17:33:26
メソッドの最後は、引数です。
//男子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: ◆WtRerEDlHI
05/03/07 17:41:08
メソッドの定義です。
>private static int kyuryoKeisan(
>int argJikyu, // 時給
>int argJikan // 勤務時間
>) {
()のなかで、argJikyuとargJikanというのを定義しています。
これを引数といいます。
呼び出すところでは、
>kyuryo = kyuryoKeisan(jikyuDansei, 8);
という感じでよびます。
こうすると、kyuryoKeisanメソッドを呼んだときに、
jikyuDanseiがargJikyuに、8がargJikanにはいります。
kyuryoKeisanメソッドのなかで、給料を計算して、結果を返します。
26: ◆WtRerEDlHI
05/03/07 17:44:02
なんとなく分かったところで、次は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: ◆WtRerEDlHI
05/03/07 17:46:22
if文は条件を判断する命令です。
>if (a == 1) {
()の中の式が正しかったら{}の中を、違ってたらelse {}の中を
実行します。
if ()の条件式の書き方
a == 1 :aが1と等しい
a != 1 :aが1と等しくない(1以外)
a > b
a >= b
a < b
a <= b
他にもありますが、基本はこんな感じです。
28: ◆WtRerEDlHI
05/03/07 17:47:33
さっきの給料計算を改造して、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: ◆WtRerEDlHI
05/03/07 17:48:27
最後はfor文です
これは、繰り返しです。
//for文
public class helloWorld {
public static void main(String[] args) {
for (int i = 0; i < 10; ++i) {
System.out.println(i);
}
}
}
30: ◆WtRerEDlHI
05/03/07 17:52:23
>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: ◆WtRerEDlHI
05/03/07 17:54:56
応用問題1
0から9までの数を表示するプログラムをつくりなさい。
ただし、5のばあいは、500を表示すること
応用問題2
掛け算の九九を表示するプログラムを作りなさい。
1*1〜9*9までを表示すること。
以上、正解は明日。
今日は、講座の終わりに書き込みましたが、明日からは講座をしながら
少しずつ書いていきたいと思います。
32:デフォルトの名無しさん
05/03/07 17:57:30
先生。質問!
>>28におけるkyuryoKeisanの引数argBonus
は不要では無いでしょうか
33: ◆WtRerEDlHI
05/03/07 18:03:49
>>32
あーごめんなさい。不要ですね。
(生徒が間違ったプログラムを作った名残です。ごめんなさい)
34:デフォルトの名無しさん
05/03/08 02:14:14
良スレの予感
35: ◆WtRerEDlHI
05/03/08 08:57:11
応用問題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: ◆WtRerEDlHI
05/03/08 08:57:42
応用問題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: ◆WtRerEDlHI
05/03/08 08:58:39
というわけで、今日の授業開始
まずは、昨日のおさらいもかねて、
九九を9の段から順番に表示するプログラムを作る
38: ◆WtRerEDlHI
05/03/08 09:06:44
回答。簡単ですね。
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: ◆WtRerEDlHI
05/03/08 09:14:43
今日は配列をやります。
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: ◆WtRerEDlHI
05/03/08 09:17:22
>int[] x = { 0, 1, 2 };
xという変数を配列で定義して、値を初期化しています。
x[0] = 0;
x[1] = 1;
x[2] = 2;
という意味です。
41: ◆WtRerEDlHI
05/03/08 09:22:27
別の書き方をするとこうなります。
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: ◆WtRerEDlHI
05/03/08 09:27:38
>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: ◆WtRerEDlHI
05/03/08 09:58:08
それでは、応用問題
10個箱を作って、1〜10間での数をいれたあと
表示するプログラムを作りなさい。
44: ◆WtRerEDlHI
05/03/08 09:58:41
答え。あってるけど何か変です。
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: ◆WtRerEDlHI
05/03/08 10:00:26
>for (int h = 0; h <= 9; ++h){
>x[h] = h + 1;
>}
ループ用の変数にhを使っていますが、これはiにしたほうがいいでしょう。
一般的にループ用の変数の名前にはiが使われます。
ちなみに、
うえのループとしたのループは別々の{}で囲まれているので
iも別々に定義されます。
46: ◆WtRerEDlHI
05/03/08 10:19:01
じゃあ、逆に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: ◆WtRerEDlHI
05/03/08 10:35:05
というわけで、超基本編はおしまい。
ここからは、eclipseというソフトを使っておこないます。
48:デフォルトの名無しさん
05/03/08 10:47:35
本体
URLリンク(www.eclipse.org)
日本語化
URLリンク(download.eclipse.org)
上記をダウンロードして
c:\eclipse
にインストールします。
49:デフォルトの名無しさん
05/03/08 10:51:00
以降は、
プロジェクト名
test
パッケージ名
testJava
クラス名
MainJava
という感じでクラスを作って行います。
前回までは、helloWorld.javaを使っていましたが、名前が変だったので
MainJavaにします。
クラスの最初の文字は大文字です。(helloWorldが間違っていた)
50: ◆WtRerEDlHI
05/03/08 10:52:22
コテハン記憶チェックつけるの忘れてました。
すみません。
で、ここまでできたら、さっきのプログラムを移植して
動くかどうかテストしてみてください。
eclipseの使い方については省略します。
51: ◆WtRerEDlHI
05/03/08 11:52:51
Eclipseだけインストールしてもだめみたい
javaにバグがあるそうなので、下記を見てインストールを
URLリンク(www.eclipsewiki.net)
52: ◆WtRerEDlHI
05/03/08 13:45:02
IBMのJREをインストールすれば、eclipseきちんと動くようです。
>>51のページに書いてあります。
今日は、昨日の復習・・・かなりつまづいているので
復習だけで終わりそう?
53: ◆WtRerEDlHI
05/03/08 14:13:19
こんどは、新しいクラスを作ってみる
掛け算と足し算のメソッドが入ったクラス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: ◆WtRerEDlHI
05/03/08 14:13:53
これを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: ◆WtRerEDlHI
05/03/08 14:16:01
まず、SubJavaがMainJavaから使えるようにする。
>import testJava.SubJava;
あとは、使いたい場所でクラス名.メソッド名と書けばOK
>kotae = SubJava.kakezan(1, 5);
>kotae = SubJava.tasizan(1, 5);
56: ◆WtRerEDlHI
05/03/08 14:17:45
つぎに、tashizanのstaticをはずしてみる。
public int tasizan(
int argHidari,
int argMigi
){
int kotae = argHidari + argMigi;
return kotae;
}
57: ◆WtRerEDlHI
05/03/08 14:18:52
そうすると、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: ◆WtRerEDlHI
05/03/08 14:31:23
javaでは、コンパイルしたら、設計図みたいなのが出来るだけで、
本体は出来ない。そこで、本体を作ってあげる必要がある。
>SubJava subJava = new SubJava();
ここで、subjavaをSubJava型で新しく作る。
(xという箱をint型で作るのと同じ感じ)
>kotae = subJava.tasizan(1, 5);
subjavaの中のtashizanを使う
じゃあなんで、staticは使えたのか?
staticの場合は、設計図みたいなとこに本体があって
みんなで使う感じになってる。
なんで、本体を作らなくても使える。
逆に、本体を作っても、staticだけは、新しく作られずに
設計図のが使われる。
59: ◆WtRerEDlHI
05/03/08 14:32:02
わかりやすくするために、変数でやってみる。
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: ◆WtRerEDlHI
05/03/08 14:33:03
これを使う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: ◆WtRerEDlHI
05/03/08 14:35:19
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: ◆WtRerEDlHI
05/03/08 14:36:17
本体を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: ◆WtRerEDlHI
05/03/08 14:41:50
実行結果は
1<-x
1<-y
2<-x
1<-y
になる。(<-yとかはわかりやすくするためにつけた、表示されない)
xはstaticなので2になる。
subJavaでもsubJava2でも同じのを使っているため。
yは本体の中に組み込まれているので、
別々の値になる。なので1になる。
64: ◆WtRerEDlHI
05/03/08 14:44:55
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: ◆WtRerEDlHI
05/03/08 14:45:38
まちがえた、メインは以下のとおり
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: ◆WtRerEDlHI
05/03/08 14:46:08
合計の値をどうやって保持するか?
というのが難しい?
67: ◆WtRerEDlHI
05/03/08 15:00:26
答えはこんな感じ
(goukeiをstaticにしないのは、本体を何個も作っても個別に合計を計算できるように。)
package testJava;
public class SubJava {
public int goukei = 0;
public int goukei(
int argKazu
){
goukei = goukei + argKazu;
return goukei;
}
}
68: ◆WtRerEDlHI
05/03/08 15:12:52
さて、一応正解なのですが、たとえば、mainで
subJava.goukei = 100;
などとされると、合計の値がおかしくなってしまいます。
そこで、
public int goukei = 0;
を
private int goukei = 0;
に変えます。
privateは、定義されている{}の外から見えなくなるという意味です。
定義されている{}の中やさらにその中の{}の中では見れます。
なんで、mainJavaからは、goukei という変数はみれませんが、
SubJavaのなかでは、普通に使えるというわけです。
予断ですが、変数とメソッドに同じ名前をつけています。
わかりづらいですね。やめたほうがいいです。
69: ◆WtRerEDlHI
05/03/08 15:44:11
応用問題
本体を複数作られたとしても、大丈夫な、総合計を求めるメソッドを作りなさい。
メインはこんな感じ
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: ◆WtRerEDlHI
05/03/08 15:50:54
答えはこんな感じ。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: ◆WtRerEDlHI
05/03/08 15:51:45
ちなみに、クラスも配列に出来る。
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: ◆WtRerEDlHI
05/03/08 15:53:08
ポイントは、
>SubJava[] subJava = new SubJava[2];
ここでは、配列の数を決めただけで、初期化はされていないので、
>subJava[0] = new SubJava();
各添え字ごとに、初期化をする必要があるということ。
あとは、intとかの配列と一緒だと思ってかまわないです。
73: ◆WtRerEDlHI
05/03/08 16:07:53
次はセッター、ゲッターの考え方を覚えましょう
まずは、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: ◆WtRerEDlHI
05/03/08 16:11:18
>private int no = 0;
>private int jikyu = 0;
で変数を定義していますが、privateなのでMainJavaからはみえません
そこで、
>public int getNo() {
>return no;
>}
>public void setNo(int argNo) {
>no = argNo;
>}
をつくってアクセスできるようにします。
75: ◆WtRerEDlHI
05/03/08 16:12:45
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: ◆WtRerEDlHI
05/03/08 16:15:23
tonosamaとpuzzleの二人について、社員番号と時給を設定している感じです。
このように、classは、ゲッターセッターを使うことによって
おっきな変数の塊のようなかんじで使うことが出来ます。
社員情報をSubJavaというクラスにまとめているわけです。
例では、tonosamaの社員情報を作成して、社員番号と時給を設定
そのあとに、puzzleの社員情報を作成して、社員番号と時給を設定しています
77: ◆WtRerEDlHI
05/03/08 16:15:55
それでは問題。
時給2000円以上の場合は、2000円にするという処理をいれたいけど
どうすればいいでしょう?
78: ◆WtRerEDlHI
05/03/08 16:31:14
生徒がだした回答が以下のとおり
うーん、確かにあってるんだけど・・・・。
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: ◆WtRerEDlHI
05/03/08 16:34:39
とりあえず、正解ということにしておいて次の問題
引数に勤務時間を入れると給料が取得できるメソッドを作りなさい。
計算式は
給料=勤務時間×時給
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: ◆WtRerEDlHI
05/03/08 17:01:00
答えはこんな感じです・・・と、おもったら
public int getKyuryo(int argJikan) {
return jikyu * argJikan;
}
81: ◆WtRerEDlHI
05/03/08 17:03:00
うまくいかないですね。なぜでしょう?
それは、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: ◆WtRerEDlHI
05/03/08 17:04:37
こんな感じです。
逆に、内部で2000ではなく、2000以上の値で処理したい場合には、
return jikyu * argJikan;
ではなく
return getJikyu() * argJikan;
にすればよかったです。
これは、どっちがいいかというと、どっちともいえませんが、
セットするときに値を調整したほうが、分かりやすいと思います。
83: ◆WtRerEDlHI
05/03/08 17:05:40
と、いうわけで、今日はこんな感じでおしまい。
よく、復習しておいてください。
何か質問あったら遠慮なくどうぞ。
84:デフォルトの名無しさん
05/03/09 09:13:31
おはようございます。
今日もがんばりましょう。
85:sage
05/03/09 21:16:27
先生!今更ごめんなさい!
どうしてJavaのインストール先がデフォルトのままじゃいけないんですか?
86: ◆WtRerEDlHI
05/03/10 02:23:21
先生です。きょうは、1日復習で終わってしまった・・・。
生徒が文法や単語を覚え切れてないので、明日は自習になりました。
>>85
ディフォルトのインストール先はProgram Filesなので、
フォルダ名に空白が入るからです。
コマンドプロンプトや環境変数の設定などで
空白がはいってると不便だし誤動作するといやなので
別のフォルダに入れました。
あと、外人の作ったアプリは、日本語名の入ったフォルダに
対応していないことが多いのでこれも注意しよう!
87:デフォルトの名無しさん
05/03/10 22:10:30
◆WtRerEDlHI先生頑張ってくれ!
ずっとこのスレ続けていってほしいYO
88: ◆WtRerEDlHI
05/03/11 02:20:47
>>87
応援ありがとう!先生うれしいよ。
あしたもがんばるぜ!
みんなも質問あったら遠慮なくどうぞ。
先生、初心者が疑問に思う点とか分からないから
質問してもらえると勉強になるデス。
89:デフォルトの名無しさん
05/03/11 03:28:07
超良スレ。がんがれ。
先生しつもーん。
オブジェクト指向がなかなか身につかない気がするの。
何が分からないのか分からない状態だから、
こんなこと聞くと困るかもしれないけど、何が原因だと思う?
一応、一通りは勉強しました。
読んだ本は「10日でおぼえるオブジェクト指向入門」。
90: ◆WtRerEDlHI
05/03/11 04:58:44
先生さあ、なんか昼間10時間くらい寝たからねむくないんだよねー
明日起きれるのだろうか・・・
それはさておき、質問にこたえますです。
>オブジェクト指向がなかなか身につかない気がするの。
うーん、難しいなあ。オブジェクト指向以前の言語は知っていますか?
オブジェクト指向の言語が出てきたときに、「あ、俺が求めていた言語だ」って喜んだ人と、
「なにこれ、意味分からない」って思った人と2種類いると思うんだよね。
ちなみに、先生は前者でした。
前者なら、あとは、いろいろ実践を積む・・・なんか作ってみたりして、それを
人に見せる機会を設ける。
後者なら、各機能について、どうして、既存の言語と違ってこうなってるんだろう?
っていうのを考えてみるといいと思う。
最初から、オブジェクト指向を覚えた人は・・・、どうなんだろうなあ。
91: ◆WtRerEDlHI
05/03/11 05:07:13
オブジェクト指向にしても、ほかの事についてもそうなんだけど
たとえば、昔はGOTOしかなかったわけだ。それが、GOSUB〜RETURNが
できて、関数ができて・・・という風に、どんどん
拡張されてきた。
で、GOSUBしかなかった時代に「関数があったらいいな」って思っていたの人なら
関数を始めて目にしたときに、その意味、利点が分かっていると思うんだよね。
そういう人は、あとはもう、関数の文法だけ覚えれば使いこなせるはず。
そうじゃなくて、GOSUBで満足していた人にとっては、「関数って何だ?」って
ことになるわけだ。そういう人にとって関数を覚えるのはただ複雑な機能にしか
過ぎないんだよね。文法を覚えても、いまいち使いこなせない。
そもそも、GOSUBでも同じことができるわけだし。
そういう人は、「どうして関数という機能が追加されたか」ってことを考えれば
いいと思う。そうすれば、意味や利点が分かってくる。
そうやって、自分の物にしてけばいいと思うよ。
92: ◆WtRerEDlHI
05/03/11 05:18:17
ちなみに、オブジェクト指向のなにがいまいち分からない?
・クラスとかそのへん
・デザインパターン
・UML
クラスとかそのへんは、ある程度しっかり理解しておいたほうがいいと思う。
実際すべての機能を使うかどうかは別として。
英語の文法みたいなものだから、覚えないと話せないからね。
デザインパターンは、いうなれば、過去のプログラムのよくある形をまとめただけ
だから、知らなくても何とかなるし、実践で使う機会にならなければ「ふーん」ってな
もんだと思う。デザインパターンが生み出される前から同じ形のプログラムを作ってた人も
多いと思うし。ただ、しっていて損することはないよね。
基本設計をするときに、「これは、あのパターンでやろう」とかいえたらすごいと思う。
数学の公式みたいなものだから。知らなくても自分で考えれば何とかなる。
けど、自分で考えるより公式知ってれば早いし正確だし無駄がない。
UMLもデザインパターンと同じ位置づけだよね。
ただ、仕事でやるんなら、コミニュケーションの手段として必要かもしれない。
そうなったらきちんと覚えないと。でも、それまでは気にしなくていいと思う。
93: ◆WtRerEDlHI
05/03/11 05:22:21
なんか、読み返してみると分かりづらいですが、
参考になったでしょうか?
そいでは。また明日もがんばりましょう。
ていうか、今日だ。
94: ◆WtRerEDlHI
05/03/11 09:04:54
おはようございます。
今日は2次元配列から
int[][] x = new x[3][3];
int[][] x = { {0,1,2}, {3,4,5}, {6,7,8} };
こんな感じで配列の配列をつくれます。
95: ◆WtRerEDlHI
05/03/11 09:47:46
サンプルはこんな感じ
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: ◆WtRerEDlHI
05/03/11 09:48:43
それでは問題
1:九九の答えを配列に入れる
2:答えの配列の中身を表示
こんな感じのプログラムを作れ
ただし、1と2のループは分ける事
97: ◆WtRerEDlHI
05/03/11 10:36:58
答えはこんな感じ
最初のループは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: ◆WtRerEDlHI
05/03/11 10:50:23
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: ◆WtRerEDlHI
05/03/11 10:53:34
boolean型には、trueかfalseがはいります。
trueは真、falseは偽という意味です。
if文は if ( 条件式 ) という感じで条件の中身によって分岐しますが
じつは、これは条件式の結果がtrueかどうかを判断しています。
なので、
>isX = true;
>if (isX) {
とすれば、trueになります。
逆に言うとbolean型には条件式の判断結果を入れることが出来ます。
>isX = (1 == 1);
とすれば、isXにはtrueがはいります。
100: ◆WtRerEDlHI
05/03/11 10:55:03
boolean型は名前をつけるときにisXXXXという感じでつけます。
たとえば、えらーかどうかならisErrorです。
OKかどうかならisOK。
isCheckとかはだめです。チェックの結果がどういうときにtrueか分からないからです。
isOKなら、OKだったらtrueというのが、名前を見ただけでわかります。
101: ◆WtRerEDlHI
05/03/11 10:55:38
次に、Stringを覚えます。
package testJava;
public class MainJava {
public static void main(String[] args) {
String s = new String("あいうえお");
String t = "かきくけこ";
s = s + t;
System.out.println(s);
}
}
102: ◆WtRerEDlHI
05/03/11 10:57:59
Stringは文字列の入る型です。正確には文字列の入るクラスのようなものです。
>String s = new String("あいうえお");
このようにして、文字列を入れることが出来ます。
>String t = "かきくけこ";
newの部分は省略可能です。
文字列は足し算のみできます。
>s = s + t;
文字が連結されます。
103: ◆WtRerEDlHI
05/03/11 10:59:52
文字列の比較は、==ではなく、equarlsというメソッドを使ってやります。
Stringはクラスなので、メソッドを持っています。
そのなかに、引数と自分の中身が同じ文字ならtrueを返すという
equarlsメソッドがあるので、これを使うわけです。
package testJava;
public class MainJava {
public static void main(String[] args) {
String s = new String("あいうえお");
String t = "かきくけこ";
if (s.equals(t)) {
System.out.println("True");
} else {
System.out.println("False");
}
}
}
104: ◆WtRerEDlHI
05/03/11 11:01:12
と、いうわけで練習問題
引数の中身が”あ”かどうか調べて、”あ”だったらtrueを返却する
isAというメソッドを作りなさい。
105: ◆WtRerEDlHI
05/03/11 12:40:43
こんな感じかな
package testJava;
public class MainJava {
public static void main(String[] args) {
String s = new String("あ");
String t = "か";
if (isA(s)) {
System.out.println("True");
} else {
System.out.println("False");
}
if (isA(t)) {
System.out.println("True");
} else {
System.out.println("False");
}
}
public static boolean isA(
String argS
) {
boolean isA;
if ("あ".equals(argS)) {
isA = true;
} else {
isA = false;
}
return isA;
}
}
106: ◆WtRerEDlHI
05/03/11 12:41:41
ちなみに、
>if (isA(s)) {
>System.out.println("True");
>} else {
>System.out.println("False");
>}
この部分は
System.out.println(isA(s));
でOKです。
107:デフォルトの名無しさん
05/03/11 13:24:27
先生質問!
>>105 の
if ("あ".equals(argS)) {
は
if (argS.equals("あ")) {
と等価と思えますが正しいですか?
108: ◆WtRerEDlHI
05/03/11 13:44:34
否定
booleanに!をつけると逆の意味になります。
package testJava;
public class MainJava {
public static void main(String[] args) {
boolean isX;
isX = (1 == 1);
System.out.println(isX);
isX = (1 == 1);
System.out.println(!isX);
isX = !(1 == 1);
System.out.println(isX);
isX = !(1 == 1);
System.out.println(!isX);
}
}
109: ◆WtRerEDlHI
05/03/11 13:49:11
>>105
結果は同じですが、意味は違います。
>if ("あ".equals(argS)) {
"あ"のメソッドequarlsを使って、比較をしています
>if (argS.equals("あ")) {
argSのメソッドequarlsを使って、比較をしています
結局一緒じゃん?って思うかもしれませんが、実は深い意味があります。
まだおしえていませんが、argSにnullが入った場合に変わってきます。
とりあえず、ここでは、
「文字列と変数を比べる場合は、文字列を左に書く」
と単純に覚えてそういう癖をつけてください。
他の言語だと
変数 == 文字列
なので違和感あるかもしれませんが、癖をつけておいてください。
110: ◆WtRerEDlHI
05/03/11 14:25:24
上のレス>>107の間違いでした。
111: ◆WtRerEDlHI
05/03/11 14:54:52
パラメータ
public static void main(String[] args) {
のString[] argsのところには、クラスを実行したときのパラメータが入る
たとえば、
javac MainJava ああああ いいいい
としたばあい、
args[0] = ああああ
args[1] = いいいい
になる。
Eclipseのばあい、実行のところで、プログラム引数を設定すればいい
112: ◆WtRerEDlHI
05/03/11 15:04:21
配列の数
package testJava;
public class MainJava {
public static void main(String[] args) {
int i = args.length;
System.out.println(i);
int[] x = new int[100];
i = x.length;
System.out.println(i);
}
}
113: ◆WtRerEDlHI
05/03/11 15:08:21
配列の数(要素数)を取得できます。
配列名.length;
>int i = args.length;
と、いうわけで応用問題
引数の内容を全部表示するプログラムを作れ
例
java MainJava あ い う
あ
java MainJava あ い う
あ
い
う
114: ◆WtRerEDlHI
05/03/11 15:35:27
答えはこんな感じ、配列の数の分だけループするということに
気がつけば簡単?
package testJava;
public class MainJava {
public static void main(String[] args) {
int i = args.length;
System.out.println(i);
int[] x = new int[100];
i = x.length;
System.out.println(i);
}
}
115: ◆WtRerEDlHI
05/03/11 16:28:06
つぎのもんだい
引数の1こめと2こめをくらべて、結果を出すプログラムを作れ
ただし、引数の数が2こじゃないばあいは、めっせーじをひょうじすること
答えは、こんな感じ
public class MainJava {
public static void main(String[] args) {
int len = args.length;
if (len < 2) {
System.out.println("少ない");
} else {
if (len > 2) {
System.out.println("多い");
} else {
if (args[0].eqauls(args[1])) {
System.out.println("OK牧場");
} else {
System.out.println("OK農場");
}
}
}
}
}
116: ◆WtRerEDlHI
05/03/11 16:29:25
String にも、長さを調べるメソッドがある
String s = "あああ";
System.out.println(s.length());
こんな感じ。
では、
引数の1こめと2こめをくらべて、どっちが長いかを出すプログラムを作れ
ただし、引数の数が2こじゃないばあいは、めっせーじをひょうじすること
117: ◆WtRerEDlHI
05/03/11 17:46:36
こんな感じ
public class MainJava {
public static void main(String[] args) {
if (args.length == 2) {
if (args[0].length() == args[1].length()) {
System.out.println("同じだよ");
} else {
if (args[0].length() < args[1].length()) {
System.out.println("後の方が長いよ");
} else {
System.out.println("前の方が長いよ");
}
}
} else {
System.out.println("適していません");
}
}
}
118:デフォルトの名無しさん
05/03/11 21:06:55
先生 >114 が正しく動きません
119:デフォルトの名無しさん
05/03/11 23:59:15
先生、話がとんで申し訳ないんですが、例外のthrowsについて全く理解出来ません。
try,catchの処理とどう違うのでしょうか?
120: ◆WtRerEDlHI
05/03/12 01:19:24
>>118
本当だ・・・>>114ぜんぜん違うソースですね。申し訳ありません。
環境が手元にないので動かしていませんが、下記のようになると思います。
package testJava;
public class MainJava {
public static void main(String[] args) {
int len = args.length;
for (int i = 0; i < len; ++i) {
System.out.println(args[i]);
}
}
}
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5394日前に更新/311 KB
担当:undef