java講座を一緒に受け ..
481:385 ◆qVkH7XR8gk
05/06/26 04:34:03
>>479
プログラミングってそんなもんなんですか。
ただ、料理に例えてますけど、料理人なら
原料、ある程度の調味料の作成工程は知ってるものじゃないでしょうか。
それに、自分の欲しい調味料がないときは自作するのではないですか?
それはただの変人なんですかね。
それに私でも料理はできます。でも料理人ではないんです。
それでもおいしい料理はできます。
あーわかんなくなった。もうだめかもしれんね。
ちょっと消えます。
482:デフォルトの名無しさん
05/06/26 04:40:39
フルスクラッチでライブラリを書けない奴は勉強不足だが、
フルスクラッチでライブラリを書く奴は単なる馬鹿だ。
483: ◆WtRerEDlHI
05/06/26 11:18:28
>>481
調味料の中身を知っていれば、知らないよりは良いし
何かの役に立つかもしれないけれど、
知らなくても使えるし、料理は作れるよね?
料理人の目的は、あくまでもおいしい料理を作ることだってことを
忘れてるんじゃないかな?
プログラムにしても、たとえばライブラリだと大きく分けて
数値演算系とハードウェア系とその他の便利な命令に分かれると思うんだけど、
たとえば数値計算で、乱数にしても、乱数を使う人が
均等でスピードの速い乱数の求め方とかを知ってる必要は無いんだよね。
ていうか、そういうアルゴリズムっていうのは何年もかけていろんな人が
研究して作った結果だしね。
ハードウェア系にしても、たとえば画面に点を書くにはハードウェアのVRAM領域の
ここにアクセスして・・・なんてことを知ってる必要は無いよね?
っていうか、そんな膨大なハードウェアの資料を調べたりそれを元に
各個人がそんな命令を作るのは不可能だし非常に生産性が悪い。
それよりも、もっと根本的なこと・・・それらを利用して目的のプログラムを作ることに
重点を置くといいと思います。
ただ、ライブラリの中身に興味を持つのはいいことだと思う。
とくに、javaの場合ライブラリが充実しているので、ほかの言語で似たような処理を行う
場合とか、参考になるかもしれないし。
もしかして、自分でもっと凄いアルゴリズムを発見して、それがライブラリに反映されるかも
しれないですしね!
まあ、ライブラリについては、「便利な世の中になってよかったなあ」程度の認識でよいのでは
ないでしょうか。先生はそう思いながらつかってます。
484:デフォルトの名無しさん
05/06/26 12:49:16
どうでもいいよ。
485:デフォルトの名無しさん
05/06/29 17:31:04
えーっと○×です。MaruBatuという名前のパッケージを作ってください。
まずは、点数を管理するクラスです。
package MaruBatu;
public class Score {
private int win;
private int lose;
private int drow;
public int getWin() {
return win;
}
public int getLose() {
return lose;
}
public int getDrow() {
return drow;
}
public void setWin(int argWin) {
win = argWin;
}
public void setLose(int argLose) {
lose = argLose;
}
public void setDrow(int argDrow) {
drow = argDrow;
}
}
486:デフォルトの名無しさん
05/06/29 17:37:41
次が、座標を管理するメソッドです。
isUseには、その座標が有効かどうか(使用するかどうか)がはいります。
package MaruBatu;
public class Zahyou {
private int x;
private int y;
private boolean isUse;
public int getX() {
return x;
}
public int getY() {
return y;
}
public boolean isUse() {
return isUse;
}
public void setX(int argX) {
x = argX;
}
public void setY(int argY) {
y = argY;
}
public void setIsUse(boolean argIsUse) {
isUse = argIsUse;
}
}
487:デフォルトの名無しさん
05/06/29 17:38:15
ここから先が、メインです。まずは、最初の部分
package MaruBatu;
public class MaruBatu {
public static final int ROUND = 10;
public static String[] hako = {
"・",
"○",
"×"
};
488:デフォルトの名無しさん
05/06/29 17:38:43
メイン関数
public static void main(String[] args) {
Score[] score = new Score[2];
for (int i = 0; i < 2; ++i) {
score[i] = new Score();
}
for (int i = 0; i < ROUND; ++i) {
int winPlayer = playGame();
if (winPlayer == 1) {
score[0].setWin(score[0].getWin() + 1);
score[1].setLose(score[1].getLose() + 1);
} else if (winPlayer == 2) {
score[0].setLose(score[0].getLose() + 1);
score[1].setWin(score[1].getWin() + 1);
} else {
score[0].setDrow(score[0].getDrow() + 1);
score[1].setDrow(score[1].getDrow() + 1);
}
}
System.out.println();
System.out.println("Player 1:" + score[0].getWin());
System.out.println("Player 2:" + score[1].getWin());
System.out.println("DrawGame:" + score[0].getDrow());
}
489:デフォルトの名無しさん
05/06/29 17:38:57
private static int playGame() {
int winPlayer = 0;
int[][] map = new int[3][3];
int player = 1;
int teki = 2;
while (winPlayer == 0) {
map = putMap(map, player, teki);
printMap(map);
winPlayer = checkWin(map);
if (player == 1) {
player = 2;
teki = 1;
} else {
player = 1;
teki = 2;
}
}
if (winPlayer == 3) {
System.out.println("引き分け");
} else {
System.out.println("PLAYER " + winPlayer + " の勝ち");
}
return winPlayer;
}
490:デフォルトの名無しさん
05/06/29 17:39:13
private static int[][] putMap(int[][] argMap, int argPlayer, int argTeki) {
if (argPlayer == 1) {
cpu2(argMap, argTeki, argPlayer);
} else {
cpu2(argMap, argTeki, argPlayer);
}
return argMap;
}
491:デフォルトの名無しさん
05/06/29 17:39:25
private static int [][] cpu1(int [][] argMap, int argPlayer) {
boolean isPut = false;
while (!isPut) {
int x = (int) (Math.random() * 3);
int y = (int) (Math.random() * 3);
if (argMap[x][y] == 0) {
isPut = true;
argMap[x][y] = argPlayer;
}
}
return argMap;
}
492:デフォルトの名無しさん
05/06/29 17:39:52
private static int [][] cpu2(int [][] argMap, int argTeki, int argPlayer) {
boolean isPut = false;
Zahyou zahyou;
zahyou = checkReach(argMap, argPlayer);
if (zahyou.isUse()) {
argMap[zahyou.getX()][zahyou.getY()] = argPlayer;
isPut = true;
}
if (isPut == false) {
zahyou = checkReach(argMap, argTeki);
if (zahyou.isUse()) {
argMap[zahyou.getX()][zahyou.getY()] = argPlayer;
isPut = true;
}
}
if (isPut == false ) {
if (argMap[1][1] == 0) {
argMap[1][1] = argPlayer;
isPut = true;
} else {
while (!isPut) {
int x = (int) (Math.random() * 3);
int y = (int) (Math.random() * 3);
if (argMap[x][y] == 0) {
argMap[x][y] = argPlayer;
isPut = true;
}
}
}
}
return argMap;
}
493:デフォルトの名無しさん
05/06/29 17:40:06
private static int checkWin(int[][] argMap) {
int winPlayer = 0;
for (int i = 1; i < 3; ++i) {
if ((argMap[0][0] == i && argMap[0][1] == i && argMap[0][2] == i) ||
(argMap[1][0] == i && argMap[1][1] == i && argMap[1][2] == i) ||
(argMap[2][0] == i && argMap[2][1] == i && argMap[2][2] == i) ||
(argMap[0][0] == i && argMap[1][0] == i && argMap[2][0] == i) ||
(argMap[0][1] == i && argMap[1][1] == i && argMap[2][1] == i) ||
(argMap[0][2] == i && argMap[1][2] == i && argMap[2][2] == i) ||
(argMap[0][0] == i && argMap[1][1] == i && argMap[2][2] == i) ||
(argMap[2][0] == i && argMap[1][1] == i && argMap[0][2] == i)
) {
winPlayer = i;
}
}
if (winPlayer == 0) {
if (argMap[0][0] != 0 && argMap[0][1] != 0 && argMap[0][2] != 0 &&
argMap[1][0] != 0 && argMap[1][1] != 0 && argMap[1][2] != 0 &&
argMap[2][0] != 0 && argMap[2][1] != 0 && argMap[2][2] != 0
) {
winPlayer = 3;
}
}
return winPlayer;
}
494:デフォルトの名無しさん
05/06/29 17:47:26
リーチ状態を調べるメソッドです。長いので2分割
private static Zahyou checkReach(int[][] argMap, int argPlayer) {
Zahyou zahyou = new Zahyou();
zahyou.setIsUse(false);
if ((((argMap[0][1] == argPlayer && argMap[0][2] == argPlayer) || (argMap[1][0] == argPlayer && argMap[2][0] == argPlayer) || (argMap[1][1] == argPlayer && argMap[2][2] == argPlayer)) && argMap[0][0] == 0)) {
zahyou.setX(0);
zahyou.setY(0);
zahyou.setIsUse(true);
} else if ((((argMap[0][0] == argPlayer && argMap[0][2] == argPlayer) || (argMap[1][1] == argPlayer && argMap[2][1] == argPlayer)) && argMap[0][1] == 0)){
zahyou.setX(0);
zahyou.setY(1);
zahyou.setIsUse(true);
} else if ((((argMap[0][0] == argPlayer && argMap[0][1] == argPlayer) || (argMap[2][0] == argPlayer && argMap[1][1] == argPlayer) || (argMap[1][2] == argPlayer && argMap[2][2] == argPlayer)) && argMap[0][2] == 0)) {
zahyou.setX(0);
zahyou.setY(2);
zahyou.setIsUse(true);
} else if ((((argMap[0][0] == argPlayer && argMap[2][0] == argPlayer) || (argMap[1][1] == argPlayer && argMap[1][2] == argPlayer)) && argMap[1][0] == 0)){
zahyou.setX(1);
zahyou.setY(0);
zahyou.setIsUse(true);
495:デフォルトの名無しさん
05/06/29 17:47:47
} else if ((((argMap[0][2] == argPlayer && argMap[2][2] == argPlayer) || (argMap[1][0] == argPlayer && argMap[1][1] == argPlayer)) && argMap[1][2] == 0)){
zahyou.setX(1);
zahyou.setY(2);
zahyou.setIsUse(true);
} else if ((((argMap[0][0] == argPlayer && argMap[1][0] == argPlayer) || (argMap[0][2] == argPlayer && argMap[1][1] == argPlayer) || (argMap[2][1] == argPlayer && argMap[2][2] == argPlayer)) && argMap[2][0] == 0)){
zahyou.setX(2);
zahyou.setY(0);
zahyou.setIsUse(true);
} else if ((((argMap[0][1] == argPlayer && argMap[1][1] == argPlayer) || (argMap[2][0] == argPlayer && argMap[2][2] == argPlayer)) && argMap[2][1] == 0)){
zahyou.setX(2);
zahyou.setY(1);
zahyou.setIsUse(true);
} else if ((((argMap[0][0] == argPlayer && argMap[1][1] == argPlayer) || (argMap[2][0] == argPlayer && argMap[2][1] == argPlayer) || (argMap[0][2] == argPlayer && argMap[1][2] == argPlayer)) && argMap[2][2] == 0)){
zahyou.setX(2);
zahyou.setY(2);
zahyou.setIsUse(true);
}
return zahyou;
}
496:デフォルトの名無しさん
05/06/29 17:48:29
最後は盤の表示
private static void printMap(int[][] argMap) {
for (int i = 0;i < 3; ++i) {
for (int j = 0;j < 3; ++j) {
System.out.print(hako[argMap[i][j]]);
}
System.out.println();
}
System.out.println();
}
}
497:デフォルトの名無しさん
05/06/29 17:50:24
簡単に解説すると、思考ルーチンが2個あって(cpu1とcpu2)
そいつらで戦わせてます。
cpu1は適当に置くだけ
cpu2は、あがれたらそこにおく、リーチがあったらとめる、
真ん中が開いてたらおく、てきとうにおくというのを最初に書いたほうから
順番にやっていきます。
分からないことがあったらきいてください。
498:デフォルトの名無しさん
05/06/29 17:59:54
新しいことを覚えます、まずはswitchです。
switch(式) {
case 条件1:
命令1;
break;
case 条件2:
命令2
case 条件3
命令3
default:
命令4
}
式の値が条件1なら、命令1を実行します。
条件2なら、命令2を・・・という感じです。それ以外ならdefaultを実行します
命令の実行はbreakが書かれるまで続きます。
なので、上記の例だと式の値が条件2の場合は、
命令2、命令3と実行した後にbreakでおわります。
defaultが無い場合は、条件に一致するのが無かったらなにもしません。
499:デフォルトの名無しさん
05/06/29 18:03:01
例:
switch (x) {
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
case 3:
System.out.println("3");
break;
default:
System.out.println("def");
break;
}
System.out.println("END");
500:デフォルトの名無しさん
05/06/29 18:09:34
次は、コンストラクタです。
クラスと同じ名前のメソッドをつくることが出来ます、
クラスが作成されるときに、よばれます。
例:
public class Score {
public String name;
public Score() {
name = "NO NAME";
}
}
上記の場合
Score score = new Score();
と、メインクラスで呼んだときに、Score()が実行されます。
501:デフォルトの名無しさん
05/06/29 18:10:33
引数を使うことも出来ます。
public class Score {
public String name;
public Score(String argName) {
name = argName;
}
}
上記の場合
Score score = new Score("なまえ");
と、メインクラスで呼ぶことになります。
502:デフォルトの名無しさん
05/06/29 18:16:46
次は、オーバーロードです。
同じ名前で、違う引数のメソッドを作ることが出来ます。
ただそれだけ。
例:
public int add (int arg1, int arg2) {
return arg1 + arg2;
}
public int add (int arg1, int arg2,int arg3) {
return arg1 + arg2 + arg3;
}
503:デフォルトの名無しさん
05/06/29 18:17:15
ちなみに、コンストラクタも、オーバーロードすることが出来ます。
504:デフォルトの名無しさん
05/06/29 18:25:01
それでは、新しいことを覚えます。今までうやむやにしていた参照です。
まずは、次を実行してみてください。どうなりますか?
public class Main {
public static void main(String[] args) {
int x = 0;
test(x);
System.out.println(x);
}
public static void test(int argX) {
argX = argX + 1;
System.out.println(argX);
}
}
505:デフォルトの名無しさん
05/06/29 18:25:38
1
0
となったとおもいます。
では、つぎはどうでしょう?
public class Main {
public static void main(String[] args) {
int[] x = new int[1];
x[0] = 0;
test(x[0]);
System.out.println(x[0]);
}
public static void test(int argX) {
argX = argX + 1;
System.out.println(argX);
}
}
506:デフォルトの名無しさん
05/06/29 18:26:20
それでは、本題、次を実行するとどうなるでしょう?
public class Main {
public static void main(String[] args) {
int[] x = new int[1];
x[0] = 0;
test(x);
System.out.println(x[0]);
}
public static void test(int[] argX) {
argX[0] = argX[0] + 1;
System.out.println(argX[0]);
}
}
507:デフォルトの名無しさん
05/06/29 18:38:39
1
1
となったとおもいます。これはどうしてでしょうか?
508: ◆WtRerEDlHI
05/06/30 00:57:43
と、いうわけで解説です。
int型は基本型、配列は、参照型なので、違いが出てくるのでした。
それでは、参照型とはなんでしょうか?
その前に、基本型とは何かを説明します。
509: ◆WtRerEDlHI
05/06/30 01:05:05
■基本型
intなどのプリミティブ型は、基本型になります。
宣言したときに、メモリ上に値を保持する場所を確保し、
値を直接保持します。
例(左の数字は行番号)
01 int x;
02 int y;
03 x=10;
04 y = x;
05 x = 5;
01
int xとやった時点で、メモリにxの場所が作られる
メモリの001番地(xの場所):0
02
同様に、int yとやった時点で、メモリにyの場所が作られる
メモリの001番地(xの場所):0
メモリの002番地(yの場所):0
03
xに10を代入すると、メモリにその値がかかれる
メモリの001番地(xの場所):10
メモリの002番地(yの場所):0
04
yにxを代入すると、メモリにその値がかかれる
メモリの001番地(xの場所):10
メモリの002番地(yの場所):10
05
xに5を代入すると、メモリにその値がかかれる
メモリの001番地(xの場所):5
メモリの002番地(yの場所):10
※yの値は変わらない
510: ◆WtRerEDlHI
05/06/30 01:14:03
■参照型
objectや、配列は参照型になります。変数には、メモリのどこに実際の値が入っているかのメモがはいります。
実際の値は、newした時点で、メモリに場所が作られてそこにはいります。
代入した場合は参照の代入となり、メモリのどの場所かを示すメモがわたされます。
例
01 Score sc;
02 sc = new Score();
03 sc.setWin(1);
04 Score sc2;
05 sc2 = sc;
01
scがメモリに作られる、メモの中身はnull
メモリの001番地(scの場所):null
02
newされたので、メモリにScore()が新しく作られたあと、
scに、そのメモリ上の場所がメモされる
メモリの001番地(scの場所):002番地
メモリの002番地(02で作られたScore())
03
scのメモを見て、メモリ002番地につくられたScore()の中のsetWin()を実行する
04
sc2がメモリに作られる、メモの中身はnull
メモリの001番地(scの場所):002番地
メモリの002番地(02で作られたScore())
メモリの003番地(sc2の場所):null
05
scのメモの内容がsc2に代入される
メモリの001番地(scの場所):002番地
メモリの002番地(02で作られたScore())
メモリの003番地(sc2の場所):002番地
※この状態で、sc.setWin(1); と sc2.setWin(1); は、同じ意味になる
511: ◆WtRerEDlHI
05/06/30 01:19:59
配列の場合も、同じ感じで
10 int[] x;
20 x = new int[2];
30 x[0] = 1;
40 int[] y;
50 y = x;
512: ◆WtRerEDlHI
05/06/30 01:20:04
10
xがメモリに作られる
メモリの001番地(x):null
20
newされたので、メモリにint[2]の場所が作られる
xに、int[2]のメモリ上の場所のメモがかかれる
メモリの001番地(x):002番地
メモリの002番地([0]):0
メモリの003番地([1]):0
30
xにメモってある002番地の[0]に、1が代入される
メモリの001番地(x):002番地
メモリの002番地([0]):1
メモリの003番地([1]):0
40
yがメモリに作られる
メモリの001番地(x):002番地
メモリの002番地([0]):1
メモリの003番地([1]):0
メモリの004番地(y):null
50
メモの内容が代入される
メモリの001番地(x):002番地
メモリの002番地([0]):1
メモリの003番地([1]):0
メモリの004番地(y):002番地
※この状態で、 x[0] = x[0] + 1; と y[0] = y[0] + 1; は、同じ意味
513: ◆WtRerEDlHI
05/06/30 01:25:21
と、こんな感じになります。
参照は注意しないと、大変なことになります。
たとえば、引数の5倍をもどす関数を作る場合は
public int gobai(int argX) {
argx = argx * 5;
return argX;
}
これでOKですが、
引数の配列の先頭の数字の5倍を戻す関数を
同じ感覚で作ってしまうと
public int gobai(int[] argX) {
argx[0] = argx[0] * 5;
return argX[0];
}
引数に与えた配列の中身が変わってしまい、
大変なことになります。
(上記はあくまで例です、普通なら
return argX[0] * 5;
という関数を作れば良いので、何も問題ないです。)
514: ◆WtRerEDlHI
05/06/30 01:33:14
引数と参照の関係ですが、
基本的には、「引数の値は変更されない」というのが、きれいな形です。
この辺のプログラムを作成するときの指針は難しいのですが、
実際それをするには、いちいち引数をコピーして退避したりなど
面倒なことも多いのも事実です。
このへんは、プログラムの作成時に決めておくといいと思います。
参照という概念をあたまにおいて、もう一度今まで作った
プログラムを見てみると、結構適当だと思います。
(引数が変更されているのも多いですよね。)
この辺を、どういうふうにすればきれいになるかを
考えてみてください。
515:182 ◆CAV6Nl68js
05/07/06 00:04:47
いやぁ、久しぶりにここに来ました。トリップ上手く付いてるかな?
さっそくですが先生、>>509-510 の解説はマズいですよ。
プログラミング言語の引数は「引数渡し」か「参照渡し」だけだと思うのですが。
要は、引数の実体が渡されるのか、引数がコピーされたものが渡されるのか、という…。
で、Java には「参照渡し」しか存在しない訳で。必ず引数はコピーされたものが渡る、って説明が良いのでは?
でないと、C で「構造体を引数にした時には、構造体がそのままコピーされたものが渡される」という事が説明できない…。
構造体は基本型じゃないし。
うーん、Java に限って話をすれば構わないのかもしれないけど…。Java はオブジェクトは全て参照で扱うし、難しいのかも知れませんが…。
516:デフォルトの名無しさん
05/07/07 21:46:56
JAVAはファイル名=クラス名なんでしょ?
ひとつのファイルにたくさんのクラスがあるときは
その中のどのクラスをファイル名にするんですか?
517:デフォルトの名無しさん
05/07/07 21:51:18
>516
[.java]ファイルのpublicなクラス名がファイル名です。
だから1つの[.java]ファイルにはpublicなクラスが1つしか作れず、それがファイル名になります。
コンパイル後の[.class]ファイルは作成したクラスだけ作られます。
518:182 ◆CAV6Nl68js
05/07/08 01:46:19
>>517
すまん、微妙に違う。
Java では、1ソースファイルにいくつでも (これはものの謂い。言語仕様的上限はある) クラス定義が書ける。
コンパイルすると、定義したクラスの数だけクラスファイルができる。
ただし、public なクラスは 1ソースファイルに 1つだけしか定義できない。
そして、public なクラスを定義する場合は、public なクラスの名前とソースファイル名が一致しなければならない。
というのが正しい。
だから public でないクラス定義のみのソースファイルもコンパイル OK。
何故こんな言語仕様になっているのかについては、パッケージの概念について勉強されたし。
519: ◆WtRerEDlHI
05/07/09 00:42:30
>>515
おひさしぶりです。
えーっと、ちょっとせつめいが足りなかったかな?いってることは同じだと思う。
基本型の場合、変数には実際の値が入る。
参照型の場合、変数にはメモ(アドレス、メモリ上の場所)が入る。
それをふまえて、
javaの代入
a = b
は、bの内容をaにコピーするということなので
基本形の場合、実際の値が入っているので
実際の値がコピーされる
参照系の場合、メモがはいっているので、
メモがコピーされる
ということです。代入自体は、「コピーされたものが渡る」という考え方なのですが、
変数の種類によって「実際の値」がコピーされるのか、メモがコピーされるのかの
違いが有り、メモがコピーされた場合、本体が増えるわけではないので、
注意してね・・・って言うことがいいたかったのですが・・・
どうでしょう。
520: ◆WtRerEDlHI
05/07/09 00:47:27
>>516-518
このへんは>>233-234に書いてあるので参考にしてください。
最初は、1ファイルにpublicなクラスを1個書くというふうに、
おぼえてしまって差し支えないと思います。
521: ◆WtRerEDlHI
05/08/11 02:27:59
お久しぶりです。
みんな、夏休みだしプログラム作ってる?
先生は、今日から旅に出ます。しばらく質問とか答えられないかもなので
ゆるしてくれ!ちなみに、四国をお遍路さんでまわってくるお。
そいではー。
522:デフォルトの名無しさん
05/08/25 11:43:41
あげとこ
523:デフォルトの名無しさん
05/09/13 22:12:09
保守
524:デフォルトの名無しさん
05/09/16 03:22:30
age
525:デフォルトの名無しさん
05/09/17 15:38:27
んじゃオラ今日からはじめる打
526:デフォルトの名無しさん
05/09/23 23:38:01
コマンドライン引数
応用問題1
コマンドラインから数字と演算子を入力し計算結果を出力するプログラム
を作成せよ
(+とーのみにする)ただし、引数が不足している場合はエラーメッセージ
を出力して処理を終了させる
実行例 java cale 10+2
これのソースわかる人いる?
527:デフォルトの名無しさん
05/09/24 02:28:00
>526
スレリンク(tech板)
528:デフォルトの名無しさん
05/09/24 16:29:54
>>526
ほれ、こんな感じか?
public class Sample1 {
static int calc = 0; static int curVal = 0; static int curOps = 0; // 0..nop 1..plus 2.. minus
public static void main(String[] args) {
if (args.length != 1) { System.err.println("Argument missmatch"); System.exit(1); }
boolean lastIsNumber = false;
for(int p=0; p< args[0].length(); p++) {
char ch = args[0].charAt(p);
if((ch >= '0') && (ch <= '9')) { if (!lastIsNumber) curVal = 0; curVal *= 10; curVal += (int)(ch - '0'); lastIsNumber = true; }
else if (ch == '+') { calcOps(); curOps = 1; lastIsNumber = false; }
else if (ch == '-') { calcOps(); curOps = 2; lastIsNumber = false; }
else { lastIsNumber = false; }
}
calcOps(); System.out.println(calc); System.exit(0);
}
private static void calcOps() {
if (curOps == 1) calc += curVal; else if (curOps == 2) calc -= curVal; else calc = curVal; curVal = 0;
}
}
529:デフォルトの名無しさん
05/09/24 17:52:39
cale だが?
530:528
05/09/24 18:15:12
>>529
おおすまん、そこを見逃してた。Sample1をcaleに変えてくれ
eclipse上でソース入力して動かして結果でたからこれで完成と思ってたよ
久しぶりに入力してそのままエラー無しで動いたプログラムだったからちょっと興奮してた
531:デフォルトの名無しさん
05/09/24 23:40:41
一桁の乱数を作るにはどうしたらいいのでしょうか?
532:デフォルトの名無しさん
05/09/24 23:48:15
>531
Math.random()が0以上1未満の乱数を作るんだから、
ちょっと考えればわかるはず・・・
533:デフォルトの名無しさん
05/09/25 16:47:45
>わかるはず・・・
10倍して小数点以下を切り捨てれば0〜9、ってなかなか思いつかないと思うけどな
534:デフォルトの名無しさん
05/09/25 22:00:29
>533
やっぱそうかな・・・
書き込んだ後よく考えたら初心者にはわからないかもとちょっと思ったんだ。
>531ごめんよ(´・ω・`)
535:デフォルトの名無しさん
05/09/25 23:51:42
>>534
初心者というより数学的な勘って奴じゃないかと思う
536:デフォルトの名無しさん
05/09/28 23:42:40
先生質問です!!
何かの機能を実装するとき、staticにするか否かは
どういう基準で判断すればいい?
そのときの気分?
537: ◆WtRerEDlHI
05/09/29 17:46:48
なんか盛り上がってるね
久しぶりです
まだ香川県なのでしばらく質問には答えられない予感
ごめんなさい
531 536 は、過去ログ嫁
521もにた奴があったはず
ちなみにスレ違いだけど
URLリンク(blog.livedoor.jp)
こんな感じで旅してます
538:デフォルトの名無しさん
05/09/29 18:04:51
あと528のサンプルなんだけど、もうちょっとわかりやすくなると思う
具体的には
calcOpsに引数と戻り値をついかすれば、static変数がいらなくなるし、すっきりする
curValを初期化する場所が二カ所にあるcalcOpsにはいらないのでは?
こんな感じでなおしてみたらどうでしょう
539:デフォルトの名無しさん
05/09/29 18:14:11
>537
お疲れさん。ブログ、さっと見た。
うまそうなもんばっか食ってんじゃないよw
羨ましいぞ畜生め。
540:デフォルトの名無しさん
05/09/29 18:29:07
>>528
static使ったのはわざとだったりするw
クラス化すんのめんどくさかった
curValを初期化するのが2回あるのはこのプログラムだと余計だね
calcOpsはリファクタリングして抜き出したけど、最初は一気に作ってて初期化されないと嫌だっただけ
すまん、初心者じゃない人間が作ってしまったw
541:デフォルトの名無しさん
05/10/04 23:04:52
なんとなく上げてみる
542:デフォルトの名無しさん
05/10/10 02:58:33
このスレ終わっちゃってるのかな
勉強したかったぜ
543: ◆WtRerEDlHI
05/10/16 18:23:45
>>542
帰ってきたからしつもんとかどうぞ
544: ◆WtRerEDlHI
05/10/16 18:26:41
>>538 はこんな感じかな
public class TestMain {
public static void main(String[] args) {
if (args.length != 1) {
System.err.println("Argument missmatch");
System.exit(1);
}
int calc = 0;
int curOps = 0; // 0..nop 1..plus 2.. minus
int curVal = 0;
boolean lastIsNumber = false;
for (int p = 0; p < args[0].length(); p++) {
char ch = args[0].charAt(p);
if ((ch >= '0') && (ch <= '9')) {
if (!lastIsNumber) {
curVal = 0;
}
curVal *= 10;
curVal += (int) (ch - '0');
lastIsNumber = true;
545: ◆WtRerEDlHI
05/10/16 18:26:46
} else if (ch == '+') {
calc = calcOps(calc, curOps, curVal);
curOps = 1;
lastIsNumber = false;
} else if (ch == '-') {
calc = calcOps(calc, curOps, curVal);
curOps = 2;
lastIsNumber = false;
} else {
lastIsNumber = false;
}
}
calc = calcOps(calc, curOps, curVal);
System.out.println(calc);
System.exit(0);
}
private static int calcOps(int argCalc, int argCurOps, int argCurVal) {
if (argCurOps == 1) {
argCalc += argCurVal;
} else if (argCurOps == 2) {
argCalc -= argCurVal;
} else {
argCalc = argCurVal;
}
return argCalc;
}
}
546: ◆WtRerEDlHI
05/10/16 18:27:54
あー、クラス名なおしてなかった
まあ、こんな感じにすれば、すっきりすると思う
calcOpsが独立した関数として機能してるしね
547:デフォルトの名無しさん
05/10/18 10:31:49
i⌒ヽ i⌒ヽ (⌒ヽ
_,,,ヽ `─、 _,,,ヽ `─、 \ \___
(______ 、一' (______ 、一' > ___)
___) | ___ ___) | / /
( ____ノ (___ ̄ヽ ( ____ノ | (
ヽ \__ __) | ヽ \__ ヽ ヽ____
\___) (___ノ \___) \____)
___ _| ̄|_ __
|__ | | ̄| |_ _| __| ̄|_|__| _
__| | | | |_ _| | __ _| | |
| __| | | | |_ | | | |. | |
|__ | | | | ._|. | ||_ \_. | |
| | | | | ̄| |_ |/ \_|. | | _
__/ /. | | ノ \_____. | ヽ__ノ ノ
|__/ |_| ヽ_ノ ̄ ̄\____| \_____/
548:デフォルトの名無しさん
05/11/02 13:54:34
なかなかために成った。
でももう>>1はこない悪寒がする。
549:851
05/11/04 15:32:50
>>1さま
おかげで,Java本1冊終えられました。
ありがとうございました.
550: ◆WtRerEDlHI
05/11/04 23:09:27
ん?まだたまにみてるよー
ていうか、>>851って誰だ。まだ>>550ジャマイカ
551:デフォルトの名無しさん
05/11/06 14:45:56
もう家庭教師は首に成ったのか?
552:デフォルトの名無しさん
05/11/16 20:28:21
なんとなく読んだけど、自分が今まで学んできたことの復習になったよ
ありがとう先生
553:デフォルトの名無しさん
05/11/16 22:50:10
>550
スレッド立てときながら
いつのまにか傍観者の立場になってるし。。
554:デフォルトの名無しさん
05/11/29 12:24:13
あーごめんなさい
家庭教師はおわりました
旅から帰ってきました
働きました
デスマーチ←いまここ
スレはまあ、あれだ勉強したいひとのために残しておくので質問とかあったらどうぞー
555:デフォルトの名無しさん
05/11/29 19:14:56
デスマってJavaなデスマ?
556: ◆WtRerEDlHI
05/12/02 14:29:43
vb.netなデスまでした
↓
とりあえず、契約切れたからおしまい
↓
面接を受ける
↓
一時面接合格
↓
来週二次面接←いまここ
ていうか、あれだ、java勉強の話をしてくれよw
557:デフォルトの名無しさん
06/01/08 21:08:08
あげてみる。
100ぐらいまで読んだがためになるスレだな。
>>1さん
自分は携帯向けjavaやりたいんですが、また講義できますか?
558:デフォルトの名無しさん
06/01/10 05:21:56
今日から東京!
あたらしいプロジェクトです
質問かいてくれれば分かる範囲でこたえますよー
559:デフォルトの名無しさん
06/01/17 23:34:44
とりあえず>>63まで読みました。
560:デフォルトの名無しさん
06/01/18 01:18:31
おらは今ポーカー作っとります。
561:デフォルトの名無しさん
06/01/18 08:34:15
お、みんな頑張ってるなあ
携帯からだからトリップなし
質問あったらお気軽にどうぞー
562:560 ◆6ailJWJdSU
06/01/19 00:59:33
毎回新しいカードセットからカードを配るんじゃなくて、山や捨て場というようなものを使いたい場合、
こういったものはどうやって書けば良いんでしょうか。
ポーカーでも、他のゲームでも使えるようにしたいんですが。
山や捨て場は、例えばカードを操作するクラスみたいなのを作って、そこで保持させるよりも、
Pokerクラスが保持した方が良いですか?
シャッフルするだとか、手札にカードを配るだとか、いろんなゲームで使う機能なので、
カードを操作するクラスみたいなのを作ろうかと思ったんだけど、
そこでカードを保持するのもどうなのかと思って。
あと、ランダムな要素を使うときにMathクラスのrandom()メソッドを使うのは分かるんですが、
java.util.RandomクラスのnextIntメソッドを使うと、整列したカードをシャッフルした後に
毎回同じような並びになってる気がしたんですが、このクラスのランダムってそういうものなのでしょうか。
563: ◆WtRerEDlHI
06/01/19 08:41:21
トリップこれでいいかな?先生です。
>山や捨て場というようなものを使いたい場合、
いままでのサンプルで言ったら、山=デッキです。
いままでは、ゲーム開始時にシャッフルしていたのを、シャッフルしないようにすれば
いいと思います。その場合、カードがなくなった場合の処理を入れる必要があるでしょう。
(ゲーム開始時に、カードが10枚以下なら新しいデッキでやるとか、枚数が0になったら新しいデッキにするとか)
捨て場は、捨て場を作ってカードを入れていけばいいと思います。
難しくはないと思う。
>山や捨て場は、例えばカードを操作するクラスみたいなのを作って、そこで保持させるよりも、
>Pokerクラスが保持した方が良いですか?
デッキや捨て場は、独立しているのでそれぞれクラスを作って、
それをPOKERの中で使うといいかと思います。
俺だったら
ゲームクラス(プレイヤー制御、勝敗管理とか)
ポーカークラス(約の判定とか)
デッキクラス(シャッフルとか、一枚引くとか)
捨て場クラス(何枚捨てられているか、最後に捨てられたのはなにかとか)
カードクラス(マーク、数字)
こんな感じかな。完成したら、ぜひupしてください。
>java.util.RandomクラスのnextIntメソッドを使うと、整列したカードをシャッフルした後に
>毎回同じような並びになってる気がしたんですが、このクラスのランダムってそういうものなのでしょうか。
ソース希望、ならないと思うけどなあ
564:デフォルトの名無しさん
06/04/12 07:53:23
保守
565:デフォルトの名無しさん
06/04/12 14:51:51
基本的に擬似乱数はシードを適切に初期化しないと同じ結果が出るだろ
566:デフォルトの名無しさん
06/04/15 20:11:42
携帯だからトリップなし
utilのはオブジェクトを作ったときの時間で作られるからその辺きにしなくていいはず
なんでソース見たかったです
567:デフォルトの名無しさん
06/05/15 23:46:52
良スレ保守
568:デフォルトの名無しさん
06/06/25 05:43:59
先生まだいますか??
569:デフォルトの名無しさん
06/07/03 09:44:24
たまにのぞいてるから
質問あったらどぞー
570:デフォルトの名無しさん
06/07/04 14:15:30
クラスが持つプロパティやメソッドを表すのに
「.」ではなく、#で表現されているのもありますが、
どういう場合に#で表すのですか?
571:デフォルトの名無しさん
06/07/04 20:53:13
時給1000円でJava教えてくださるかたを募集します
場所 最寄駅 所沢(池袋・高田馬場から直通)
よろしくおねがいします
i−want−to−study−java@hotmail.co.jp
572: ◆WtRerEDlHI
06/07/06 23:47:16
>>570
説明するときに、
staticの場合は.
staticじゃない場合は#
と書くことによって使い方を表します。
別の言い方で言うと、
インスタンスメソッドを表す記号です。
>>571
通信教育なら良いよwww
このスレでどうぞー
573:デフォルトの名無しさん
06/07/10 10:20:11
>>572
ご回答、どうもありがとうございます。
その意味を探せ出せなくて、つっかえて
いたところでした。
574:571
06/07/17 21:37:52
>>572 レスありがとうございます (´∀` )
教える対象は超初心者です。
専門学校などでJavaを勉強されていて夏休みだけ教えたいという方も歓迎です
575:デフォルトの名無しさん
06/07/17 22:41:12
非常に情けない質問で恐縮なのですが
j2se5.0の日本語のダウンロード画面が
白紙で何も表示されないで困っております。
解決法を教えていただけないでしょうか?
よろしくお願いします
576:デフォルトの名無しさん
06/07/19 15:14:04
>>572
Googleで検索してキャッシュってとこ押したら表示できるよ!
577:デフォルトの名無しさん
06/07/27 15:04:18
>>575
ヒント:SunはアンチMS
ヒント:IEはMS製
578:デフォルトの名無しさん
06/07/27 15:37:26
>>575
2se5.0の日本語のダウンロード画面って URLリンク(java.sun.com) のこと?
IE6を使ってるなら、「表示」→「エンコード」のところで「Unicode(UTF-8)」を選べば表示されると思う。
それかFirefoxとかOperaとかの、IE以外のブラウザで見る。
579:デフォルトの名無しさん
06/09/30 21:59:01
(´・ω・`)
580:デフォルトの名無しさん
06/10/17 23:20:07
今日からはじめたお。とりあえず>10まですすんだお
581:デフォルトの名無しさん
06/10/22 00:09:45
質問あったらどぞー
たまにみてますよー
582:デフォルトの名無しさん
06/11/28 02:50:02
講座もうやんないの?
903も発表されたことだし、iアプリも交えた講座をやってくれると嬉しい
583:デフォルトの名無しさん
06/12/02 22:33:02
iアプリかー
先生auなんだよー
携帯アプリは興味あるんで質問してくれたら答えるよー
先生てきにはwii買ったからブラウザゲーム作ってwiiで遊びたいなあ
とか妄想
584:デフォルトの名無しさん
07/02/04 01:53:35
過疎ってるのにこうやって書き込むと即効でレス返す先生萌え
585:デフォルトの名無しさん
07/02/05 01:54:33
すまん。日付見てなかった。へそを曲げないでくれ>先生
586:デフォルトの名無しさん
07/02/11 11:22:56
たまに見てるよー
携帯からだからトリップなしなり
587:デフォルトの名無しさん
07/05/10 21:24:44
そして伝説へ・・・
じゃなくて、先生まだ見てたらファイル操作とかGUIとか教えてほしいな
講座的にはもう終わり?
588:デフォルトの名無しさん
07/05/28 18:30:14
期待あげ
589:デフォルトの名無しさん
07/06/04 02:45:10
お気に入りに保存。
590:デフォルトの名無しさん
07/06/12 23:33:57
保守
591:デフォルトの名無しさん
07/07/12 18:45:10
592:デフォルトの名無しさん
07/08/20 08:58:01
定期あげ
593:デフォルトの名無しさん
07/08/20 09:13:59
>>583
つ オープンアプリ
594:できるかな?
07/12/06 13:57:34
課題:じゃんけんゲームを作りなさい。
仕様:ユーザーとコンピュータで、じゃんけんを5回行い、ユーザー観点からの勝敗結果を出力する。
--------結果-------
○ × ○ × ○
あなたの勝ちです!。
本システムでは、1 = グー、2 = チョキ、3 = パーとする。
補足:キーボードの値を渡すには、System.inを使用。
コンピュータの手を決めるには、Ramdom.nextInt(int n) を使用。
どぞ☆
595:デフォルトの名無しさん
07/12/20 16:47:02
mpeg compass.jp
名古屋駅近辺でお話しましょう
596:デフォルトの名無しさん
08/02/12 21:34:30
ほしゅ
597:デフォルトの名無しさん
08/02/25 21:31:14
群馬県館林のホテル スリーベル
URLリンク(www.members.aol.com)
598:デフォルトの名無しさん
08/03/09 11:24:01
初心者ですいません
>>12
>>11はx:0では?
599:デフォルトの名無しさん
08/03/09 11:30:56
言いたいことが良く分からん
600:デフォルトの名無しさん
08/03/09 11:42:31
>>598
>>11で合ってますよ
int型の変数xを定義してそれに0を代入するわけですから。
601:デフォルトの名無しさん
08/03/09 18:01:29
>>600
>>11をコンパイルして実行しても
x:0になってx:5にはならないのだけど
何か勘違いしてる?
602:デフォルトの名無しさん
08/03/09 21:27:09
>>601
いや合ってる
恐らく先生の勘違いだろ
public class helloWorld {
public static void main(String[] args) {
// 変数の定義
int x;
// xに5を代入
x = 5;
// 文字を表示する
System.out.println("x:" + x);
}
}
だね
603:デフォルトの名無しさん
08/03/09 22:20:03
>>602
ありがとう
よかった、なんせ初心者だから
自分がとんちんかんな事やってるのかと
604:デフォルトの名無しさん
08/04/09 05:34:43
ほ
605:デフォルトの名無しさん
08/04/20 20:57:31
ほ
606:デフォルトの名無しさん
08/04/25 22:43:53
>>20
kyuryo の初期化は必要だと思うんだけど
607:デフォルトの名無しさん
08/04/25 23:47:06
よ〜くかんがえよ〜
初期化はだいじだよ〜
608:デフォルトの名無しさん
08/04/26 17:16:36
さすがにもう先生はいないかな〜
609:デフォルトの名無しさん
08/06/03 10:53:55
先生久しぶりにきました
確かに勘違いですね
すみません
610:デフォルトの名無しさん
08/08/13 15:16:40
てst
611:デフォルトの名無しさん
08/10/14 00:34:24
オブジェクト化の概念を分かりやすく説明して頂けないでしょうか。
また、オブジェクト化=インスタンス化 ではないのでしょうか?
調べてみてもさまざまな見解があり、よく分からない状態です。
そのクラスで使用できる形にする
//オブジェクト化
「呼び出すクラス」 変数a = new 呼び出すクラス();
変数a.変数b();
のような形で、変数a型として変数bのメソッドを呼び出すことができるとは思うのですが、
この意味を説明しなさいといわれると、なんと説明してよいか言葉に詰まります。
オブジェクト化しないと、「呼び出すクラス」 は使えないと思って良いのですよね?
612:デフォルトの名無しさん
08/10/14 02:59:08
オブジェクト=G7
インスタンス=各国レベルの政策
613: ◆WtRerEDlHI
08/10/15 01:45:00
先生です。トリップこれでいいんだっけ・・・
>>611
まず、オブジェクトといっても、文脈によって意味がいろいろあるので「クラス」ということで話を進めます。
まず、クラスを定義します。これは、設計図のようなもので実体はありません。
public class Test { ...(略)... }
実際に使用するときは、クラスを実体化します。
Test a = new Test();
いままで、設計図でしかなかった「Test」を実際に使える形「a」にします。
オブジェクト化っていってるのは、この部分だよね。
「a」は、「Test」っていう設計図をもとに作成した「実体」になります。
「a」は、実体なので、使うことができます。
>オブジェクト化しないと、「呼び出すクラス」 は使えないと思って良いのですよね?
クラスは「設計図」なので、「実体化」しないと使えない。と、最初は覚えるといいと思います。
たとえば、車だったら、「設計図」だけじゃ乗れないので、「実体化」して、はじめて乗れるようになります。
public class Car { ...(略)... }
という車クラスがあったとして、
Car a = new Car();
Car b = new Car();
:
というように、何台も車を作って、それぞれ乗ることができます。
※ちなみに、「設計図」の段階で、使用できるものもあります。staticと定数がそれにあたるんだけど、そのへんは>>53とかを読んでみてください。
614:デフォルトの名無しさん
08/10/15 02:15:41
先生お帰りw 待ってたよ
615:デフォルトの名無しさん
08/10/15 05:09:21
なるほど!
クラス基準で考えた方が分かりやすいのですね。
ありがとうございました。
616:デフォルトの名無しさん
08/10/15 18:06:31
先生ほんとわかりやすいですね
説明が上手です
うちのポリテクの講師と交代してほしいです
617:デフォルトの名無しさん
08/10/17 18:21:48
今日、このスレ見つけて色々ためになりました
先生質問です。自分、情報学科ですがプログラミングが全然できません…
例題の文章を打っているけど、学校の課題をやるときはいつもつまずき、友達のプログラムをコピーする毎日……
解答みたら納得できますが、自分ではなかなか作成できません……
どうしたら上達しますか?
618: ◆WtRerEDlHI
08/10/21 01:40:59
>>617
うーん、多分だけど、「分からない場所が分からない」のが問題じゃないかな。課題のときとか、どういう風にプログラム作ってる?
まずは、自分のできる範囲でプログラムを作ってみて、わからない場所を明確にしていけばいいと思う。
たとえば、サイコロプログラムを作るとしよう。
どうやってサイコロを振るかはわからなくても、とりあえず
こんな感じのプログラムは作れるよね。
public static void main(String[] args) {
System.out.println("さいころの目:1");
}
絶対に1しかでないプログラムだけど、ここまではできる。
そのあと、変数を使うことを思いつけば、
public static void main(String[] args) {
var x;
x = 1;
System.out.println("さいころの目:" + x);
}
こんな感じのプログラムは作れると思う。
619: ◆WtRerEDlHI
08/10/21 01:44:35
ここまでできて、どうしてもサイコロの値を求める方法がわからなかったら、
友達に聞くなり、ネットで調べるなりすればいいと思う。
「途中までできたんだけどさあ、絶対1しか出ないんだよね。」
「1〜6までの数をもとめるのってどうやるの?」
みたいな感じで。
こうやって、わからない場所を明確にしていけば、質問もしやすいし、
友達のプログラムをただコピーするだけって感じにもならないと思う。
まずは、できる範囲から形にしていくといいんじゃないかな。
参考になったでしょうか?
620:デフォルトの名無しさん
08/10/21 20:47:22
先生
()の中に()いれたりとか
.〜〜().〜〜()
って.が続くのがさっぱりわかりませぬ
この複雑なやつの意味が理解できなくて
サーブレットになると意味不明になります
621:デフォルトの名無しさん
08/10/21 21:27:58
>>620
分かりやすく言うと、東京都千代田区大手町を
東京都.千代田区.大手町
都道府県(13).市区郡(001).町村(0022)
みたいな。
622:デフォルトの名無しさん
08/10/22 11:15:54
括弧の中に括弧を入れるのがわからないというのは
1 / ((2 + 3) * 4)
のような?
ドットが続くのは例えば
n = x.y().z();
の場合
a = x.y();
n = a.z();
ということ
623:デフォルトの名無しさん
08/10/23 01:39:50
>>621-622
なるほど〜
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in))
こういう( )を入れ子にするのの意味がわからないんです
意味がわからないままやってたんですけどサーブレットとかアプレットとか
やり出したらきつくなってきて
624:デフォルトの名無しさん
08/10/23 02:36:56
>>623
ただの入れ子じゃなくてnewの入れ子か。
それは僕も分からん。
625: ◆WtRerEDlHI
08/10/23 03:25:26
>>623
InputStreamReader stream = new InputStreamReader(System.in);
BufferedReader reader = new BufferedReader(stream);
これを1行に合体しただけだよ。
なんで、こういう書き方をするかというと
・すっきりまとまる
・streamは1回しか使わないので名前をつけたくない
という理由だと思います。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5398日前に更新/311 KB
担当:undef