【初心者】Java質問・相談スレ46【大歓迎】

1デフォルトの名無しさん
過去ログ、関連スレの一覧や、これからJavaでプログラミングを
始めたいが何をすればいいかわからない人は、下のリンクをクリック。
http://www.wikiroom.com/java/

以下のエラーが表示されて、途方にくれているあなたは、下のリンクを。
「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path%2Cclasspath

JavaScriptの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc2.2ch.net/hp/

エクリプスに関する質問は同板の「統合開発環境Eclipse」スレへ

前スレ
【初心者】Java質問・相談スレ45【大歓迎】
http://pc5.2ch.net/test/read.cgi/tech/1083740382/l50

すべてのクラス (Java 2 プラットフォーム SE v1.4.0)
http://java.sun.com/j2se/1.4/ja/docs/ja/api/index.html
Java (TM) 2 SDK ドキュメント
http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
Java言語規定 第2版 目次
http://www.y-adagio.com/public/standards/tr_javalang2/jTOC.doc.html
2デフォルトの名無しさん:04/05/21 18:08
      ____
     /∵∴∵∴\
    /∵∴/∴∵\\
   /∵∴●∴∴.● |  
   |∵∵∵/ ●\∵|
   |∵∵ /三 | 三| | 2get
   |∵∵ |\_|_/| | 
    \∵ | \__ノ .|/ 
   / \|___/\
>>1 乙っ。

>>前スレ993
プログラミングは、Java だとか C だとかに関係ない、アルゴリズムの部分がかなり大事。
例えばソート法を考えたりそれをソースに書き起こすのはいい訓練になるが、
Java だけをやってる限りは、その訓練の機会がない。勝手にソートしてくれる API があるからね。
他にも似たようなことはたくさんある。

その手の本で、その部分をカバーできるかというと、該当するのは 3~4章あたりだが、ちょっと疑問だ。
なるほど "Java プログラミング" はできるようになるだろうが、"プログラミング" はいかがなものか。
中身を知らないから分からないけど。

オブジェクト言語のオの字もついていない、"アルゴリズム" と名のついた本で、
できれば Java、仕方なければ C を対象にしたものも携えておくと、いいかもしれない。
数学関係のプログラミングの本は、やっててつらいかもしれないが、いい勉強になるかもしれない。
http://pc5.2ch.net/test/read.cgi/tech/1083740382/993
いい本だと思うよ。その本は読んだことはないが、
その元になったチュートリアルのページは、
初心者Javaプログラマーが最初に読むべき基本中の基本のページの一つだから。

まあ基本の書でも、時代とともに内容が古びて勧められなくなることもあるので、
読んだことがあい俺にはなんとも言えないが。

pc2サーバの過去ログ倉庫、全部消えていない?
誰か保管庫作ってないの?
Hogehoge hghg = new Hogehoge();
System.out.println( hghg.getDouble() );
HogehogeクラスのgetDoubleは、staticでないメソッドなんです。
HogehogeクラスのgetDoubleは、よく分からないけどdouble型の値を返すんです。
System.out.println( (new Hogehoge()).getDouble );
のようなことができないかなぁと思って試したらできませんでした。
これができたら何がいいことがあるってわけではないんですが、
「インスタンスを定義するのに一行使いたくない」というわがままは通せませんか?
>>5
普通に動くようですが。。。

public class Main {
public static void main(String[] args) {
class Hoge {
double getDouble(){
return 3.1;
}
}
System.out.println((new Hoge()).getDouble());
}
}
質問です。

「フィールドは、インスタンス変数とクラス変数で構成される。」
はYESですか?NOですか?
NOだったら説明お願いします。
>>7
NOかな。
フィールドにはインスタンス変数とクラス変数の2種類があるけど。
 class フィールド;
 class インスタンス変数 extends フィールド;
 class クラス変数 extends フィールド;
という関係になるけど
 class フィールド{
  インスタンス変数
  クラス変数
 }
という関係にはならない。
ヘンな質問なんですが、JAVAアプリケーションで、
スーファミぐらいの格ゲーって作れるでしょうか?
無理ならがんばってC++やるつもりなんですが。。
>>9
スーファミ程度ならなんとでもなると思うけど。(もちろん PC の性能にもよる)
でもゲーム用のプログラミング言語でもなし、作れるようになるまではだいぶかかるぞ。
それは C++ でも同じことだがな。
>>9
Java でできなきゃ C++ で頑張っても無理。
12デフォルトの名無しさん:04/05/21 22:13
Javaゲームプログラミング アルゴリズムとフレームワーク
http://www.amazon.co.jp/exec/obidos/ASIN/4797318422
>>5
「試したらできない」の意味が不透明。
見たままとると、コンパイルエラーになると思うんだけど。(>>6 では getDouble に () がついている)
コンパイルを試したのか、実行を試したのか。両者は全然違う。
どちらにしてもできなかったら「コンパイルエラーになった」「例外が起きた」「何も起こらなかった」「予想と違うことが起きた」
こういうことを調べて、分析して、考えて、どうしても分からない、となってから、じゃぁどうなったのか、ということを書かないと。
もっと込み入った質問だったら取り合ってもらえないよ。

>>8 は初見の奴には意味不明。。。
何で「フィールド」という語とそんな風に扱う? 何故継承関係を書く?

>>7
フィールドとは何かの情報群の一部としての情報を持つものであり、
情報群とはすなわちクラス「か」インスタンス、だからフィールドとはクラス変数「か」インスタンス変数のこと。「と」ではない。
同じ変数でも、メソッドで一時的に使われ、メソッドが終われば用済みになる「ローカル変数」とは違う。
また、変数ではなく定数の場合もある。値を変更できないだけで、扱いは似ている。

君の表現だと、「国会は衆議院と参議院で構成される」みたいな、両方が要るような言い方だ。
知らん人が初めて聞いたらそうとりかねんし、だから君が勘違いしているようにもとれる。

ではなくて、「朝定食には、納豆定食と焼魚定食(と特朝定食)がある」という関係。
豚鮭定食も定食だが、朝定食ではない。
×何で「フィールド」という語とそんな風に扱う?
○何で「フィールド」という語をそんな風に扱う?
158:04/05/21 22:41
>>13
めんどくさいから。
関係をあらわすのに簡潔にかけるから。
あとで>>13のように親切なやつがかきくだしてくれるから。
>>9
2Dならなんとかなるんでない?
3DでもJava3D使えばなんとかなるんでない?

GCとの戦いになるだろうけど。
格闘ゲーム程度ならGC問題にならないな
オブジェクト数が多いSTGであらゆるオブジェクトを毎フレーム大量に
インスタンス生成してるがGCの速度は全く問題にならないくらいだし
>>8=15
めんどくさいなら書かなければいいんじゃね?
ウソ教える奴は有害だよ。
>>18
ウソじゃないと思われ。
Java についての話じゃなくて日本語についての話だけど。
>>18
うん、だから、記号で書いたんだよ。
めんどくさいから日本語で丁寧には書いてない。
うそは書いてないと思うんだけどな。
さすがに >>8 は正解が分かっている人にしか
読解できない独りよがりだな。
mainは
public static void main( String[] args )
public static void main( String args[] )
の2種類の書き方がされているようですが、
String[] argsとString args[]にはどんな違いがありますか?
何か違いがあると思うのですが解りません。
違いはありません

つーか、一つのスレにこの話題何度も出てくるから気をつけろ!
24デフォルトの名無しさん:04/05/22 00:34
変な質問いいですか?
最近JAVAに興味を持ち、勉強してみようと思っているのですが、
JAVAはかなり重いと聞きます。
高速な処理を必要とする物。
たとえば、上の方でも話してますが、
格闘ゲームなどはずっとループさせて当たり判定とか取ると思うのですが、
そういうゲームも、JAVAで作ってもスムーズに動くでしょうか?
かなりのマシンパワーが必要とか・・・?

ゲーム中心に開発をしたいと思っています。
JAVAでゲーム作るより、他の言語を勉強した方がよいでしょうか?
よろしくお願いします。
二次元格闘ゲームなら、普通に作れるよ。
ポリゴンつかうと、厳しいが。
>> 格闘ゲームなどはずっとループさせて当たり判定とか取ると思うのですが、
今でも待ちループとか使うの?なんか手法が古い希ガス。
マルチスレッド+イベントリスナでも出来るけど、
昔ながらの擬似マルチタスクの方がスッキリすることも多い。
>>24
>JAVAでゲーム作るより、他の言語を勉強した方がよいでしょうか?

ゲームよりももっと基礎的なこと(アルゴリズム周り)を勉強した方がいいでしょう。
適切なアルゴリズムを選んでないくせに、遅い遅いいう輩が多いから。
295:04/05/22 00:58
>6
すみません。
さっきは学校でやってたんですが、家で試したらうまくいきました。
何かのコーディングミスだったのでしょうか…うーん…
ありがとうございました。
java appletで画像を使わずに背景を真っ黒にする方法はありますか?
31デフォルトの名無しさん:04/05/22 01:00
たまに特にクラスが特別に継承もしていないのに
いきなり参照型でキャストしたりするソースとかありますが

Javaで親子関係のクラス以外でもキャストする場合があるのか?
たとえば参考書なんかだとキャストを説明するとき
かならずextendsでの継承されたクラスとの関係をベースにキャストを説明していますが・・・

>>30
Graphics、Graphics2Dのメソッド説明を穴があくほど読んで来い。
>>31
アップキャストは型が合わなきゃClassCastExceptionですよ。

親がいっぱいいる(interfaceとか)かもしれないし、爺さんヒイ爺さん
かもしれない。
>>32
しこたま読んできます。
>>33
ダウンキャストの間違いでは?
36デフォルトの名無しさん:04/05/22 01:32
>>33,35
ダウンキャストとかアップキャストとかって何でしょうか?
サブクラスをスーパークラスにキャストしたらアップキャスト
スーパークラスをサブクラスにキャストしたらダウンキャスト
>>30
あります。
>>24
心配しなくても、計算で重くなるようなゲームを作るのはしばらくの間>>24には無理だ。
それまでは勉強しやすいJavaでやるのがいいと思う。
40デフォルトの名無しさん:04/05/22 01:45
パッケージについて質問です
パッケージはだいたいjp\co\~みたいにあるとき
サーバにはc:\project_name\jp\co~
みたいなフォルダ構成になっていると思いますが
この場合のc:\project_name\はどこで設定するのでしょうか?
>>40
環境変数 CLASSPATH か
実行時オプション -classpath
>>25-28
>>39
ありがとうございました。
とりあえず、>>39さんの言葉で覚悟が決まりました。
JAVA勉強してきます。
フィールドの値をある一定値に初期化するコンストラクタがあります。
フィールドの値を初期化したくて、コンストラクタを呼ぶことによってそれを行おうとしたら、
ダメっぽいんですが、ダメなんですか?
YESだとしたら、普通のメソッドにコンストラクタとおんなじ文を書かなければなりませんか?
バグの元になりそうな気が…
>>43
よく分からんが,インスタンス生成後にあるメソッドを呼ぶとフィールドの値が
インスタンス生成時と同じ値に戻るようにしたいのか?
とりあえず全てのフィールドにある値を代入するメソッドを作っておいて,それを
コンストラクタから呼ぶようにしておけばそういうことができなくもない。
>44
普通はそうしますな。変数初期化のメソッドを作ってコンストラクタからもそれを使う。
4643:04/05/22 02:54
>44>45
それで解決します。頭が回りませんでした。ありがとうございました。
c言語では、改行したいときに、printfを使うと遅いということで、
puts( "" );とかputchar('\n')(←だったかな?忘れた。)を使えとのことを教わったのですが、
Javaでは今まではSystem.out.println();で何も指定しないで改行をしてみたりしてました。
他に何かいい方法は用意されてますか?
48デフォルトの名無しさん:04/05/22 04:00
>>47
System.currentTimeMillis()
とかでprintlnにかかる時間を計ってはみた?
System.getProperty("line.separator")
一応本題の、改行コードの取得はこれね
ついでにprintlnで何やってるかはJDKに同封されてるsrc.zipの中にあるioのPrintWriterってクラス読めば分かるよ
sage忘れたorz
JDBC経由でPostgreSQLをDBとして利用している初心者です。

テーブルを以下のように作成し、
create table test (
id serial not null,
name varchar(100) not null,
PRIMARY KEY (id)
);

これにStatementクラスを利用してinsertを実行するのは問題ないの
ですが、idをシリアルにしているので、insert後にinsertしたデータ
のidを取得したいと思います。

insert into test (name) values ('xxxxx');
SELECT currval('public.test_id_seq');

上のようなSQLをトランザクションとして処理して結果を
得たいのですが、executeQueryでは複数のSQL実行ができず
executeBatchではSELECTの結果を取得することができません。

こういった場合、どのように対応するのがよろしいでしょうか?
宣しくお願いします。
((org.postgresql.jdbc2.Statement)statement).getLastOID();
例えば、
int[] hoge = new int[100];
としたhogeがあって、hogeが大きさ100では足りなくなったので、
200とか100より大きな大きさにしたい。
または、100では多すぎたので、
10とか100より小さな大きさにしたい。
といったときには、どうすればいいでしょうか?
途中までは値が格納されていて、それを残したままにしたいです。
c言語(unix系だけかな?)のexit(3)のような機能はありますか?
要は、実行を完全に終了させたいのです。
>>52
int[] temp = new int[n];
System.arraycopy(hoge, 0, temp, 0, Math.min(temp.length, hoge.length));
hoge = temp;
するとか、他にもいろいろ。

>>53
java.lang.System#exit(int)
java.lang.Runtime#exit(int)
>>50

普通に2つ実行すればいいだけだろ
トランザクションとはまた別の話では?
もしかしてオートコミットモードのままやってるの?
56デフォルトの名無しさん:04/05/22 09:38
あるプログラムで、Imageを9こつくってPanelに表示しているのですが、
最初の3こくらいしかでません。
同じファイルからImagerを同時に作るのってよろしくないのでしょうか?
57デフォルトの名無しさん:04/05/22 09:54
一つを使いまわせば?
58デフォルトの名無しさん:04/05/22 10:32
ToolKitのGetImageはファイル名が同じ場合は、
すでに作成されたImageを返すってかいてあったので、
同じファイルからImageを複数作るのは問題ないのかとおもいました。
PaintメソッドでLoadが完了したImageをdrawしてあげればいいのかと
思いましたが、表示されなかったり、半分だけ描画されたりします。
AppletはMainが無いとかファイルのやり取りに規制があるとかありますが、

基本的にはアプリとクラスやメソッドの使い方や選び方は同じなんですか?
お騒がせしてすいません
Frameをshowした後にImageを描画するCanvasをFrameにaddしていたので、
Canvasをaddしてから、最後にshowしたらうまくいきました。
画面が表示された後でも、Imageを動的に追加できればよいのですが・・
>>59
Applet はブラウザが main を持ってるちょっと規制の多めなアプリだと考えればよい。

>>60
別にできるけど。
>>61
とんくすこ
6352:04/05/22 13:47
>>54
ありがとうございました。
64デフォルトの名無しさん:04/05/22 14:00
質問です。実際の業務でソフトをつくってるかたはGUIのアプリとかは何で開発
するのでしょうか?ぼくはJavaしか使えないんんですが、しかもswing程度しか
JavaでGUIのアプリを作るやつは、カスといわれました。
Javaを選んだのはまちがいだったでしょうか?
>>64
そーゆー話題はこっちでやってくれ。

GUIが貧弱なJavaはいずれシェアを奪われる
http://pc5.2ch.net/test/read.cgi/tech/1082151386/l50
JavaでGUI作ると風当たりが強いのは確か。
でもSwingでも*ちゃんと*作りこめば普通に使える。

でもそもそも、Javaを選んだのが間違いというよりも
Javaしか使えない、Java以外も勉強してこなかったことが間違い。
>61
サンプルとかありますか?
FrameのShowが呼ばれたことを、Conponentで知る方法ありますか?
あと、Conteinarに現在おいてあるすべてのComponentのPaintのすべて呼び出しが完了したことを知る方法ありますか?
> FrameのShowが呼ばれたことを、Conponentで知る方法ありますか?
show の呼び出しだけを検出したいなら framw の show をオーバーライドすれば捕捉できんでしょ。
ウィンドウの状態を監視したいなら java.awt.event.WindowListener の windowOpened(WindowEvent) とか windowActivated(WindowEvent) とかで。

> あと、Conteinarに現在おいてあるすべてのComponentのPaintのすべて呼び出しが完了したことを知る方法ありますか?
どの時点で「すべてのComponentのPaintのすべて呼び出しが完了」する、のか定義してくんないと無理では。
70java最高:04/05/22 15:21
StackTraceElementってThrowableからしか拾えないんでしょうか?
拾う為にExceptionを作るってのは邪道ですよね?
>>70
> StackTraceElementってThrowableからしか拾えないんでしょうか?
1.5 では java.lang.Thread#getStackTrace() で取れるようになってる。

> 拾う為にExceptionを作るってのは邪道ですよね?
邪道だろーけど 1.4 だとしょうが無いような。
javaアプレットのゲームサイトで、たまにゲーム終了後、ランキング表示してくるもの
がありますが、アレってどうやるんでしょうか?
アプレットを設置するサイトに CGI をしかけておけば可能
HTTP と CGI の何たるかが分かってないと作れない
>>733
どうも有難う。そこら辺を勉強済ます。
75デフォルトの名無しさん:04/05/22 18:58
サーブレットで
HttpRequestとHttpResponseでのメソッド
doPostとdoGetの違いって何でしょうか?

PostとGetの違いがよくわかりません
76デフォルトの名無しさん:04/05/22 19:13
>>72-73
orbというテもあるぞい。
http://www.horb.org/horb-j/

>>75
同じ。アドレスにデータが残らないだけdoPostの方が安全(に見える)
くらいかな?
オーダーn未満のソートは可能なのでしょうか?
ちなみに条件付きでも構いません。

JAVAというかアルゴリズムの質問なんですが、
JAVAやってるんでここに質問させていただきました。
78デフォルトの名無しさん:04/05/22 19:28
session.setAttribute("name",param);
String name = session.getAttribute("name");

この二つについて質問です
具体的に何をしているのでしょうか?
またAttributeの使いかたってSession以外でも目的は同じなのでしょうか?
79デフォルトの名無しさん:04/05/22 20:36
えと、ランダムに発生させた数を要素に持つ配列をつくりたいんですが。
ふつうに
Random random=new Random();
int[] nums=new int[12];
for(int i=0; i<nums.length; i++){
nums[i]=random.nextInt(31);
while(nums[i]==0){
nums[i]=random.nextInt(31);
}
}

こう書くと、配列の中で数字がだぶるんことがあるんですよぉ。
配列numsの12個の要素がだぶらないようにするには、どうしたらいいんでしょう?
高々12個の配列に乱数入れるという使い方が想定できてないんだが
そのままだと偏るのは当たり前

配列のサイズを変えるかだぶらない値を持つ配列をランダムに配置換えするしかない

どっちにしろアルゴリズムのお話でどう実装しようが自由
javaのお話じゃないね
>>76
どうもありがとう。HORBというものも調べます。
82java最高:04/05/22 21:55
>>71
そうですか、StackTraceElementは立派な情報持ってるわりに取得し辛いですね。立派な情報故にそうなのかも知れませんが
とにかく1.5入れてきます。情報ありがとう。
8377:04/05/22 22:08
やっぱりアルゴリズムの話はだめでしょうか。
駄目ならどこかいいスレを紹介していただけないでしょうか。
>>77=83
要素数 n でオーダ n 未満のソートができるわけがないだろ。
全要素をなめるだけでもオーダ n かかるのに。
オーダ n のソートは bin ソートとか radix ソートとかあるがな。
8577:04/05/22 23:09
あるキーの位置が決まればほかの何かのキーの位置も決まる、みたいな条件が付いても無理ですか?
コーディング規約で

1.自身が参照しているクラスのインスタンスフィールド/メソッドは全て"this"を付ける。
2.プリミティブでない型のフィールドには全て初期化でnull を入れる。

知り合いから、これが現在推奨されている規約だと聞きました。

私は1.はフィールド名と引数が同じ時にだけ、明示的に付けるようにしてましたし、
2.はコンストラクタが呼ばれる前にフィールドはデフォルト値で初期化されるので
無駄なバイトコードが増えるのでやってはいけないと思ってました。

実際の所どうなんでしょうか?
本当にこんな規約が推奨されているのでしょうか?
その知り合いが勝手に言ってるだけだろ?

1は個人の趣味だと言えるが
2は86が正しい。
>87
ありがとうございます。
その人曰く「Javaのコーディング規約を推奨している団体がやっている」
と言ってたので気になってました(どこの団体かまでは聞きませんでしたが)。
ちなみに2.ではnullを入れないとEmptyが入るとか言ってました。
Emptyってなんでしょう?
>>86
人による。↓のように考える人もいる。

頑健なJavaプログラムの書き方(Writing Robust Java Code)
http://www.alles.or.jp/~torutk/oojava/codingStandard/writingrobustjavacode_pid86_c3.html#doc1_778
アクセッサ・メソッドを適切に使用する鍵となる概念は、
フィールドを直接操作できるメソッドはアクセッサ・メ
ソッド自身だけであるということである。確かにフィー
ルドが定義されるクラスのメソッドからは、privateな
フィールドであっても直接アクセス可能であるが、クラ
ス内の結合度を増大させることになるのでそうしないこと。
9079:04/05/22 23:42
配列内の要素のダブリをチェックするwhileループでもないかなとおもって・・・。
30この問題の中から、ランダムに12こ選んで出題したいだけなんだが。

たかだか、30こから12この抽出なんで、ランダムに並べ替える事にしますた。
>>79=90
ダブりをチェックするよりリストか何かに要素を入れておいて
ランダムに取り出す度にリストから削除していけば重複はなくなる。
数が多くなるとスピードも断然速い。

ランダムに並べ替えるなら Arrays だったか Collections だったかに
shuffle とかいうメソッドがあるからそれを使うと楽。
9287:04/05/22 23:54
>>88
フィールドはデフォルト値で初期化される。Empty なんかない。
ローカル変数は初期化されないから
その知り合いはその辺のことと勘違いしてるのでは?
>>90
List chosen = new ArrayList();
for(int i = 0 ; i < 12 ; i++){
 chosen.add(list.remove(random.nextInt(list.size())));
}
とかすりゃいーんでない?
9486:04/05/23 00:11
>92
やっぱりそうですよね。

私も「コンパイルの段階でエラーがでるし・・云々」
と言ってたのでローカル変数と勘違いしてないか?とか
思ったのですが会議室の場で一杯人いたので黙って聞いてました(^^;

お陰様で胸のつっかえが取れました。

>89
アクセッサは分かるのですがthisポインタとは関係無い気がするのですが・・
>>85
条件として「ソート済み」というのをくわえてよければ、オーダーは常に0になる。
>>94
this.hogehogeとかhogehogeとかどっちでアクセスしたほうがいいか気にする前に、
フィールドに直接アクセスすること自体ナンセンスだってことじゃないの?
まあアクセッサ自身の中でどうフィールドにアクセスするかって話は
あるけど、アクセッサみたいな短いコードの中でわざわざ議論するほどの話じゃないと。
9777:04/05/23 00:56
調べてみたところshear sortなるソートを発見しました。しかしコードがなにやってるかわかりません。
誰か教えていただけないでしょうか?
ttp://www.cs.rit.edu/~atk/Java/Sorting/sorting.html
>96
私の書き方が悪かったですね。
アクセッサは関係ないです。

class Hoge{
private int n;
public void hoge(){
n = 10; // A
// this.n = 10; // B
hoge(); // A
// this.hoge(); // B
}
public void print(){
System.out.println("Hello Hoge world.");
}
}

これで常にBの様な書き方をする、という意味です。
規約と言われたので守らなければならないのですが、なんかムズムズします。
9986:04/05/23 01:00
失礼。

> hoge();
> // this.hoge();
ではなく
> print();
> // this.print();
でした。
>>77=97
shear ソートは n 個のプロセッサを使った並列アルゴリズムだってわかってるか?
10177:04/05/23 01:23
条件付でいいと言ったはずですが?
10477:04/05/23 01:58
>>102
77=85です。
>>103
そういうのはなしで。
10577:04/05/23 02:13
>>95,103
そういえばオーダーは1が最低だと思うのですが・・・
0なんてものはアルゴリズムとは言いません(プログラムとも言えません)
何もやってないんだし。
>>105
なにもやらずに結果が得られるというのが、最高なのですよ。
>>105
たとえばデータを2分木で管理すると、ソートの必要はありません。
でも何もやってないわけではありません。
108デフォルトの名無しさん:04/05/23 05:03
String s = "hello";
String t = "hello";

のときに s == t は、true を返すのはなんで??
別オブジェクトじゃないの?
>>108
最適化
>>108
言語仕様を読んでくらさい。

3.10.5 文字列リテラル
http://www.y-adagio.com/public/standards/tr_javalang2/lexical.doc.html#101083

> 各文字列リテラルは,クラスString(4.3.3)のインスタンス(4.3.1,12.5)への参照(4.3)とする。
> Stringオブジェクトは,定数値をもつ。文字列リテラル(より一般的には,定数式(15.28)の値となる文字列)は,
> メソッドString.internを使用して,一意なインスタンスを共有するために"intern"される。

> ・ 同一パッケージ(7)中の同一クラス(8)に存在するリテラル文字列は,同一Stringオブジェクト(4.3.1)への参照を表現する。
> ・ 同一パッケージ中の異なるクラスに存在するリテラル文字列は,同一Stringオブジェクトへの参照を表現する。
> ・異なるパッケージ中の異なるクラスに存在するリテラル文字列も同様に,同一Stringオブジェクトへの参照を表現する。
> ・定数式(15.28)によって生成される文字列は,コンパイル時に計算され,リテラルのように扱われる。
> ・実行時に計算される文字列は新たに生成されるため,異なるものとして扱われる。
> ・計算された文字列を明示的にinternした結果は,同じ内容をもつ既存のリテラル文字列と同じ文字列になる。
111108:04/05/23 05:18
>>110
ありがとう
>>108
ふつうequals()で判定すると思うが
113デフォルトの名無しさん:04/05/23 10:16
import javax.servletとかのパッケージとかサーブレットに関するクラスが
みつかりませんどこにのってるんでですか?
114デフォルトの名無しさん:04/05/23 10:22
サーブレットに関するパッケージとかクラスがまったくみつかりません
みてるところはjava2プラットフォームSE v1.4です
Javaを始めてみようと思い、J2SE 1.4.1_07をインストールしたんですが、
ググってみても設定とかとりあえず何をすれば良いのかを書いてあるページが
全然無くて困ってます。このスレの>>1の最初のリンクも行けないし・・・
しかもヘルプを見たら何故かバージョンが1.2.0_07になってるし・・・
どうすればいいでしょうか?
118115:04/05/23 12:13
そうですか・・・
119115:04/05/23 12:17
そのページ何故か行けないんですよ・・・
117さん行けますか?
確かに見れないっぽい。
まあ、Javaに限ったことじゃなく、環境変数PATHを設定するだけだし、それもひっくるめてJava入門のサイトに書いてあるだろ。
Java入門サイトなんてざらにあるんだし、本屋で軽く立ち読みしてくることだってできるだろ?
121115:04/05/23 12:45
>>120
そうですね。本屋行ってきます。
なんというか、一応ぐぐるためのヒント書いたつもりだったんだけどな。「環境変数 PATH 設定 Java」
まあ、立ち読み結構。
えー。俺は普通に見られるけど。
124デフォルトの名無しさん:04/05/23 12:54
>>116
日本語訳のAPIのページおしえてください。そのEEとやらの
125デフォルトの名無しさん:04/05/23 13:15
JDK 1.5 で、StringBufferに対するappendの連鎖ができなくなってしまいました。
StringBuffer stbBuf = new StringBuffer();
stbBuf.append("").append("");
とすると、java.lang.AbstractStringBufferはpublicではないため、
パッケージ外からアクセスできません、と出てコンパイルできません。
append の連鎖はできなくなってしまったのでしょうか?
>>125
AbstractStringBuffer を明示的に使ってないか?
StringBuffer なら普通に使えるけど。
あとマルチスレッド化じゃないなら StringBuilder の方がいいよ。
>>125
あ、それ Reflection API の有名な欠陥っつーか仕様っつーか、です。
java.lang.AbstractStringBuilder はパッケージプライベート、
java.lang.AbstractStringBuilder#append(String) が public で、
StringBuffer extends AbstractStringBuilder が public で、
append(String) をオーバーライドしない場合、
stringbuffer.append("") は java.lang.AbstractStringBuilder#append(String) を呼び出す。

言語仕様的には、StringBuffer が public なので問題ないのだが
Reflection API は AbstractStringBuilder が パッケージプライベートなのでエラーを出す。
明示的に java.lang.reflect.AccessibleObject#setAccessible(boolean) 呼んでやってくらさい。
128デフォルトの名無しさん:04/05/23 13:57
returnをつけるとき
return A;
の部分のAというのはメソッド名を入れなければいけないとか
何か決まっているのでしょうか?

それともその部分は別に何でもいいのでしょうか?
>>121
つうか、なんでいまさら1.4.1なのよ。
それで「Swingっていまだに遅い」とか文句いうのかな。
>>127
と、思ったけど問題ないぞ…

それ、たぶんメソッドの選択が適切でないだけだな。
>>128
戻り値型の式。void の場合は何も書いてはいけない。
>>128

その return 文が含まれているメソッドの戻り値の型による。
例えば
戻り値の型が void であるメソッド内の return 文には、値を何も書けない。

戻り値の型が MyClass であるメソッド内の return 文には、 MyClass 型の
変数に代入できる値であれば何でも書けるし、そのような値を返すメソッド
呼び出しを書いてもいいし、そのような値を返す式でもいい。

「14.16 return 文」
http://www.y-adagio.com/public/standards/tr_javalang2/statements.doc.html#6767
こういう質問って、どういう参考書みたら出てくるんだろう、と疑問になる。
134デフォルトの名無しさん:04/05/23 14:22
すいません、これがどういう意味なのかわかりません。。

これ:Frame f = new Test();

どうして クラスA 変数 = new クラスA の書き方と違うんだろう
>>134
TestはFrameを継承しているので、Frameの一種だから。
>>135
ありがとー!

今見たら確かに継承してました。
>>134
それがコンパイルエラーにならないのなら、Test っていうクラスは
Frame の一種なんじゃないの?

class Test extneds Frame

ってなってない?

あるいは Test の直接的上位クラスが Frame じゃないとしても、
上位クラスをさかのぼっていけばいつかは Frame にぶつかるはず。
138デフォルトの名無しさん:04/05/23 14:39
ジャヴァ見習い中の漏ですが、最近、少しだけオブジェクト指向のすばらしさ
を知りました。(ある本の例文を読んで・・・)

いまだ、オブジェクト指向の本質とその利点がよく分かりません。
何か近道とかないんですかね。
>>138
近道はない。
140デフォルトの名無しさん:04/05/23 15:39
>130
本当ですか?

↓これコピペしてコンパイルとおりますか?
StringBuffer stbBuf = new StringBuffer();
stbBuf.append("").append("");
>>140
コンパイル通るぞ。

java version "1.5.0-beta"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0-beta-b32c)
Java HotSpot(TM) Client VM (build 1.5.0-beta-b32c, mixed mode)
142デフォルトの名無しさん:04/05/23 16:07
>141
そうですか・・・ありがとうございました。
もしかしたらJBuilderの設定か何かかもしれません。
もうちょっと調べてみます。
>69
FrameやWindowListenerを使用しないで、Frame直下の
ContainerがFrameのshowが呼ばれたことを知りたかったのですが、
難しいですか?
>>142
それやってるとき見つけたんだけど、1.5.0-beta-b32c だと Class#getDeclaredMethods() が継承されたメソッド返しやがる。

これは想像だけど、JBuilder が javac 使わんで reflection API 使う独自のコンパイラ持ってるとダメなのかも。
でも、その場合は普通だったら曖昧なメソッド呼び出しっていわれると思うので上の想像は外してる可能性が高い。
145115:04/05/23 16:41
>>122
あ、そうだったんですか・・・
>>123
さっきもう一回やってみたら俺も行けました。混んでただけ?
>>129
確かにそうですよね・・・入れ直すとしたら何を入れたら良いですかね?
146デフォルトの名無しさん:04/05/23 16:58
サーブレットをやってるんですが。
public void doGet(HttpServletRequest request,HttpServletResponse response)
{response.setContentType()・・・・・
って感じでインターフェイスをデータ型としたパラメータがあって
そのあと、すぐにメソッドをしようしてるんですけど、このときのインスタンスは
どこでできてるんですか?インターフェリスを使用するときは実装したクラスを定義して
とかっていう風に覚えていて、、こういうパラメータとかでインターフェイスを
指定した場合は、いきなりメソッドを使用することができるんでしょうか?
>>145
最新の1.4.2_04入れとけ。
148デフォルトの名無しさん:04/05/23 17:17
import java.util.regex.*;

class regex{

public static void main(String[] args){

boolean b = Pattern.matches("a*b", "zaaaaab");

System.out.println(b);

}

}

これがなんでfalseになるんですか?

149115:04/05/23 17:21
>>147
わかりました。早速入れてきます。
150デフォルトの名無しさん:04/05/23 17:28
_フォームデータの取得で
tmp.getBytes("8859_1")っていきなり本にかいてありました
この数字の説明してないし・・・どういうことをあらわしてるの?
>>150
文字コード。
それと、その本の記述は古くて使い物にならないから捨てろってことも表してる。
152115:04/05/23 17:38
何度もすいません。Windows用にOffline Installation, Multi-language と、
Installation, Multi-language があるんですけどどっちの方が良いでしょうか?
>>152
offline
154115:04/05/23 17:47
>>153
わかりました。有難う御座いました。今度こそ行ってきます。
>>148
Pattern や Matcher の APIDoc をよく読もう。
特に Matcher 。君の欲しいものがある。
156デフォルトの名無しさん:04/05/23 18:34
>>155
なるほどmatches()は全体をマッチするわけか
で、lookingAt()が先頭からで全体がマッチする必要はなくて
find()は前回の後からってことか。

なんでわざわざ3種類もあるの?正規表現の指定だけで済む気がするんですが。


それともう一つ質問。
Pattern p = Pattern.compile("a=([1-9]*) (b=[1-9]*)");

Matcher m = p.matcher("record a=123 b=456");

で、()で囲まれた部分123と456を取り出すにはどうしたらいいんですか?
find()した後group()だと "a=123 b=456"までしかとりだせないですよね。


>>156
Pattern や Matcher の APIDoc をよく読もう。
特に Pattern 。君の欲しいものがある。
158156:04/05/23 19:01
グループのそれぞれの値は public String group(int group)のほうでとりだせるのか。



>なんでわざわざ3種類もあるの?正規表現の指定だけで済む気がするんですが
こっちのほうの疑問はまだ残ってるんだけど 誰か教えて。
159デフォルトの名無しさん:04/05/23 19:13
必要ないと思うなら使わなきゃええやんか。
160デフォルトの名無しさん:04/05/23 19:44
DQN登場
161デフォルトの名無しさん:04/05/23 19:52
strutsについて質問です
フレームワークということですがstrutsを導入すると
具体的に何が可能になるのでしょうか?

なぜみんなstrutsがいいというのでしょうか?
何が充実しているのでしょうか?
>>161
フォームの入力チェックが簡単になる。
163デフォルトの名無しさん:04/05/23 20:08
それだけですか?
フレームワークの代名詞みたいに言われてるけど・・・
どういう答えが欲しいんだろう・・・
165デフォルトの名無しさん:04/05/23 21:23
Runnableについてですが
Threadをimportせずにnewできるのはなぜ?

ThreadでもRunnableを実装してるけどどういうこと?
java.lang.Thread
>>166
ありがとう~
みんな質問理解するの無茶苦茶早いね
的外れな回答とかなぜ出ないんだ???読唇術でもやってるの?
jdbcの実装で聞きたかったけど、今はそれよりも気になる
>>161
・Servletを自作しなくてすむ
・画面遷移の仕組みを考えなくてすむ
・カスタムタグを使うとJSPのコードがすっきりする(と言われているw)が
 Strutsを使うとそのためにカスタムタグを自作しなくてすむ
・複数人数で開発する場合に実装のルールを(ある程度)統一できる
・・・と言われているw
170デフォルトの名無しさん:04/05/24 00:11
staticなクラスのフィールドに、その内部のクラスからアクセスできるのは
どういう仕組みなのか教えてください。
>>169
全然 JSP のコードはすっきりしなかったぞ…
>>168
前すれとかでは普通にでているわけだが。
>>168
みんな一度は同じ事で悩んでるからさ。(でもそゆーのは雑談スレでねw)
教えてください。
int<=>byte[]の変換ができません。

int resourceID = 55;
byte[] byteID = new byte[4];

byteID[0] = (byte)((resourceID >> 24) & 0xFF );
byteID[1] = (byte)((resourceID >> 16) & 0xFF );
byteID[2] = (byte)((resourceID >> 8) & 0xFF );
byteID[3] = (byte)(resourceID & 0xFF );

int inID = (((byteID[0] << 24) & 0xFF) | ((byteID[1] << 16) & 0xFF) |
((byteID[2] << 8) & 0xFF) | ((byteID[3]) & 0xFF));

これだと、resourceID=255までしか変換できません つД`)
256以上の数値はどうすれば良いのでしょうか??
175デフォルトの名無しさん:04/05/24 01:25
画像の生データ(ヘッダのない画素情報)を読み込んで表示させたいです。
読み込みは出来たのですが、描画・表示に困っています。
画像処理プログラムを作るのが目的です。

どのように表示させたらいいのでしょうか?
~~~~~~~~~
(アプレットで点描?)
>>169
StrutsよりJSTLとELの影響の方がでかいぞ。
>>175
読み込んだデータから、java.awt.image.BufferedImage を作り出せるといいのだけどね。
>>175
点描も漢らしくていいと思うけど。
java.awt.image.MemoryImageSourceでImage作るとか。
>>174
なぜに戻すときに& 0xFFする?
int inID = ((byteID[0] << 24) | (byteID[1] << 16) | (byteID[2] << 8) | (byteID[3]));
こうでないのか?
180174:04/05/24 02:30
>>179 様
ありがとうございます。

やってみましたが、
& 0xFFしないと、255以下の数値もとれなくなってしまうのです。

・゚・(ノД`)・゚・
>>180
なるほど。byteが符号付だから& 0xFFで符号なしの値にするのか。
int intID = (((byteID[0] & 0xFF) << 24) | ((byteID[1] & 0xFF) << 16) | ((byteID[2] & 0xFF) << 8) | ((byteID[3] & 0xFF)));
こうすればいいのだ。

普段nio使ってるからこれを考えなくて済んでた俺はへたれですかそうですか。
>>180
BigEndian でいーなら DataInput 使っても読み込めるよ。
int inID = new DataInputStream(new ByteArrayInputStream(byteID)).readInt();
183174:04/05/24 08:16
>>181 様
ををを!!
先に& 0xFFするのでつね。
やってみます。
ありがとうございます!!
nioってなぁに??な私のほうがへたれです。

>>182 様
一度やってみたのですが、なぜかnullpoになってしまいました。
もっと複雑なコードの中に組み込んでしまっていたので、
他の原因があったのかもしれません。やってみます。
ありがとうございます!!
>>183
java.nio
> なぜかnullpoになってしまいました

ガッ
AWTのComponentのUpDateとReapintの違いって何ですか?
repaint ... 「非同期的に」再描画される。
再描画用のスレッドが別途動いていて、そいつのキューに要求が入り、あとで再描画が実行される。

update ... 引数となる Graphcis に「即座に」描画を行う。paint との違いは実装に依りけり。
まっちろに消去する処理を入れて、そのあと paint を呼ぶだけだったりする。

Component#getGraphics() してそれを Compoent#update(Graphics) に渡したりもできるが、
そーゆーことは AWT 実装に任せておいて、repaint だけぽんと呼ぶのが普通だな。
その分トロくはなるが、上記方法は素人が手を出すと表示がめちゃめちゃになるし。
>>170
内部のクラスにもいろいろあるが。
「内部のクラス」なんだから一回り外のクラスのフィールド・メソッドには自由にアクセスできる。
それだけじゃん。仕組みもへったくれもない。あほくさ。
アプレットでMP3の再生って、無理?
アプレットもくそもない。あほくさ。
>>189
mp3 は特許問題だったかのせいで標準でサポートされなくなった。
JLayer とか使えば一応できる。
http://www.javazoom.net/javalayer/javalayer.html

applet もある。
http://www.javazoom.net/applets/jlguiapplet/jlguiapplet.html
>>191
SUNクスコ!!
すいません。
アプレットのテキスト入力エリアで起動するIMEの変更ってできるんでしょうか?

たとえば、
あるクライアントには2種類のIMEがインストールされているとします。
(MS製Standard IMEと富士通製IMEとか)
普段は”MS製Standard IME”を使用しています。

で、あるテキストボックスに入力するときには
”富士通製IME”を自動的に起動して入力させるとか。

もしご存知の方がいたら教えてください。
194175:04/05/24 18:46
177様、178様ありがとうございました。
感謝です。
>>193
単純に IME の ON/OFF はできるけど、そういう気持悪い例は見たことないな。
万一 Windows レベルでもできないのならば Java には無理。

その富士通製というのは何故使いたいの? 登録している頻出単語を入力させたいだけなら、
自分で作った InputMethod になら変えられるらしいから、そうしてみたら?
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/imf/spi-tutorial.html
それとも文字認識か何かかな?
196193:04/05/24 20:09
>>195
レスさんくす。

>その富士通製というのは何故使いたいの?

漏れも良く分からないんだけど、特殊な機能があるそうで。
調べるように頼まれたですよ。
元々C++屋なんでJAVAの細かいことよくわかんないから聞いてみた。

Win32APIならできそうなんで、
「COM作ってjavascriptから呼び出したらだめ?」って言ったけどだめだって。
クライアントインストールレスでやれと。

あー、ええと今聞いたら文字認識とか文字の検索がすごいんだそうで。w
>>196
ActiveX
>クライアントインストールレス
でも 1.4 プラグインは入れないと、InputMethod いじるのは絶対無理だぞ。
199193:04/05/24 20:32
みんなレスサンクス

>>197
あーActiveXならいけるかな?
でもインスコダイアログでるじゃん?あれいいのかな...聞いてみよ。

>>198
そのInputMethodつーのはIME切り替えられるんでしょうか?
どうも富士通製IMEの独自機能を使いたいらしいので。
>>199
> そのInputMethodつーのはIME切り替えられるんでしょうか?
目的の用途には使えんだろうが
java.awt.im.InputContext#selectInputMethod(Locale) で選択できる。
っつーか普段から「富士通製」使えよ。
201デフォルトの名無しさん:04/05/24 22:27
「誰でも簡単に作れる描画アプレット講座」
みたいなのを探しています。お勧めってあります?
202デフォルトの名無しさん:04/05/24 22:28
class classA{
int x;
classB y = new classB; インスタンス化
}

class classB{

ここからclassAのint x値を変更したい。

}

どうすれば良いですか?
お願いいたします。
classAにint xを変更するメソッドを作る。
203さん、ありがとうございます。
classAにメソッドを作っても、classBから呼び出す方法がわかりません。

検索語もわからないので、質問した次第です。
205デフォルトの名無しさん:04/05/24 22:50
class Sample{
Sample(int x, int y){
}
}

でSampleのコンストラクタに値を入れながらSampleの型の配列を宣言するのって
どうしますか?
>>202
クラス名が大文字で始まらないのは気持ちが悪いので、変更した。
ClassB のコンストラクタ呼び出しの際に、ClassAのインスタンスを this として渡してやる例。

class ClassA {
  int x;
  ClassB y = new ClassB(this);
}
class ClassB {
  private ClassA a;
  public ClassB(ClassA a) {
    this.a = a;
  }
  public void change(int x) {
    a.x = a.x + x;
  }
}
>>205

Sample[] sampleArray = new Sample[] {new Sample(1, 2), new Sample(3, 4)};
JDBCドライバをロードする時に、
Class.forName("acme.db.Driver");
のように書くそうですが、
forName()メソッドは戻り型がClassクラスですよね?
何故
obj = Class.forName("acme.db.Driver");
のように書かないのでしょうか?
戻り値であるドライバのClassオブジェクトは何処に行ってしまうのですか?
>>208
> Class.forName("acme.db.Driver");
その場合は acme.db.Driver を初期化するのが目的なので戻り値は捨ててもいい。

あんまりやらんけど、クラスの初期化ができるなら
Class.forName(String) 等を使わなくても全く構わないと思われ。
>>208
戻り値は必ず受け取らねばならないという決まりはない。
>>208
最初は誰もが疑問に思う道
ドライバはクラスロード時のスタティックによって初期化される物と
決まっていると思えばいい

まぁ、最初にこれ書くことから何をやろうとしているかが分かるんで
人のコード追うとき楽だ

クラスの継承を行い、
サブクラスのインスタンスを生成するときに、
サブクラスのコンストラクタ内で、
スーパークラスの引数なしコンストラクタが実行されますよね?
ここまではあってますか?
↑の前提があっているとして、
スーパークラスの引数なしコンストラクタの実行を
行わせたくない場合はどうすればよいでしょうか?
>>212
> スーパークラスの引数なしコンストラクタの実行を行わせたくない場合はどうすればよいでしょうか?
単純に、呼び出されたくなければ、スーパークラスの呼び出されたくないコンストラクタを private 宣言すればよい。
ただし、継承元クラスのすべてのコンストラクタが呼べない場合、そのクラスを継承することはできなくなる。

> クラスの継承を行い、サブクラスのインスタンスを生成するときに、サブクラスのコンストラクタ内で、
> スーパークラスの引数なしコンストラクタが実行されますよね?ここまではあってますか?
いいえ。
「スーパークラスの引数なしコンストラクタが実行」されず、引数のあるコンストラクタが実行される場合があります。例えば、以下。

クラス B のコンストラクタは、どちらもスーパークラスの引数なしコンストラクタを呼んでいない。
(1つは、自クラスの別なコンストラクタを呼び出している。もう1つは、スーパークラスの引数のあるコンストラクタを呼び出している。)
クラス B のインスタンス生成の際には、どちらのコンストラクタを使おうとも、クラス A の引数
無しコンストラクタは呼ばれない。(引数を取るほうのコンストラクタが使われる。)
class A {
  public A() {
  }
  public A(int i) {
  }
}
class B extends A {
  public B() {
    this(6);
  }
  public B(int i) {
    super(i);
  }
}
「8.8.5 コンストラクタ本体」
http://www.y-adagio.com/public/standards/tr_javalang2/classes.doc.html#78435
214212:04/05/25 07:41
>213
うーん、難しい。

!あ、、、言葉足りてませんでした…
「サブクラスのコンストラクタ内でスーパークラスのコンストラクタを
明示的に指定していないとき」
の話でした。すんません。

でも、勉強になりました。publicをサブクラスで実行できるのか…
まだ試してないんで、今から試してみます。
ありがとうございました。
>>201
java の基本を知らなきゃ簡単には作れない。
知ってりゃサイトに頼らず作れる。以上。さようなら。
216デフォルトの名無しさん:04/05/25 10:38
すごく初歩的な質問なのですが…

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

これの結果がなぜ「1」になるのかがわかりません。
だれか教えてください。
217デフォルトの名無しさん:04/05/25 10:44
216はネタなので放置してください。
218216:04/05/25 11:03
>217
ねたじゃないですよぉ。
219デフォルトの名無しさん:04/05/25 11:09
int x = 1;
x++;
System.out.println(x);

でいいのでは?実行していないけど。

>>215
ありがとう。そうだよね。参考書買ってきて勉強しまふ。
>>216
2行目をいろいろ変えてみると勉強になるよん。
x=x++;
x=++x;
x++;
221216:04/05/25 11:33
いろいろ確認しました。

x=(x++)+1 => 2
x=(++x)+1 => 3
x=(x++)+x => 3
x=(++x)+x => 4

後処理は評価値が決まった後に行われるので
その後でインクリメントしても最後に代入
される値に影響されないってことですかね。

試験にでたらひっかかりそうでした(^^;;
継承について解らないことが多いんですが、そのなかで、
下に示す、コードの手ほどきを受けたいです。
これだと、class BのインスタンスのtoString()は、
class Stringの"hoge"を返すんですが、
class AのtoString()を継承したくない(つまり、class ObjectのtoString()が欲しい)時には
どうすればよいのでしょうか?

class A
{
String toString()
{
return "hoge";
}
.....
}
class B extends A
{
......
}
>>222
一般的には上書きされたメソッドをさかのぼって呼び出すのは無理。

toString() だけに関して言えば、Jakarta Commmons の lang の
org.apache.commons.lang.ObjectUtil#appendIdentityToString(StringBuffer, Object)
とかで使われてる方法
 object.getClass().getName() + "@" + Integer.toHexString(System.identityHashCode(object))
を使えば希望の出力が得られるはず。

http://jakarta.apache.org/commons/lang/api/org/apache/commons/lang/ObjectUtils.html#appendIdentityToString(java.lang.StringBuffer,%20java.lang.Object)
http://cvs.apache.org/viewcvs.cgi/jakarta-commons/lang/src/java/org/apache/commons/lang/ObjectUtils.java?rev=1.23&view=markup
((Object)this).toString()
225222:04/05/25 16:29
>223
う、うへぇ…
難しすぎる…。すんごいプログラムを組むには、それくらいの知識が必要なのですか?
ありがとうございました。

>224
ありがとうございました。
あるクラスAがあります。
これを継承したクラスBがあります。
これを更に継承したクラスCがあります。

Aにprotectedな変数hogeがあるんですが、
Cのインスタンスから、
super.super.hogeのようにして呼ぼうとしたら、
なんだそりゃ?といわれてしまいました。
僕が意図することは、行えるでしょうか?
出来るとしたら、どうすれば良いでしょう?
>>226

もちろん、クラスBにも、新たに hoge という名前のフィールドが宣言されてるんだよね?
もし無いなら、単に、 hoge でアクセスできるもんね?
おもしれー。どうやるんだろ。
228227:04/05/25 16:53
こうかな?
class A {
  protected String hoge ="A:hoge";
}
class B extends A {
  protected String hoge ="B:hoge";
}
class C extends B {
  protected String hoge ="C:hoge";
  public void foo() {
    System.out.println(((A)this).hoge);//A:hoge
    System.out.println(((B)this).hoge);//B:hoge
    System.out.println(super.hoge);//B:hoge
    System.out.println(hoge);//C:hoge
  }
}
229222=226:04/05/25 17:09
>227,228
おおぉおお!
ありがとうございました。激しく感謝します。
はっきり言ってそういう呼び出しすること自体クラス設計間違ってるけどな。
231229:04/05/25 17:51
>230
そうなんですか。ひとまず使えるようになってから考えようとか思ってました。ます。
いや、気になって気になって。

で、226,227の件で、今度はstatic変数だとできるかなぁと気になって、
知恵と知識が無いなりに試してたんですが、
わからないんで、ご教授いただけたらと思ったのですが、お願いできますでしょうか?
232横槍:04/05/25 18:33
static も同じようなもん。ほんとに試したか? 試せばわかるだろ。
しかしだな、static なメンバは、
インスタンスではなく、クラス宣言を介してアクセスするもの。
表現するには明示的にクラスを指定する。回りくどいことなしに A.hoge, B.hoge と書いていく。

君の仮定はみんな、設計が汚い。
試しでやってるからピンとこないんだろうが、
何かの意味があってそういう書き方をすることは、まずない。
勉強する分にはいいけどな。
233横槍:04/05/25 18:35
あと >>224 はうそだ。C++ じゃねーっつの
234デフォルトの名無しさん:04/05/25 18:41
>>224は嘘で、
>>228は正しいのか。ワケワカメ。
C,Perl,PHPの経験ありの人がJAVAを勉強しようとしてます。
JAVA特有の部分だけ効率よく学びたいんですが、結城さんの
本の下巻ってどうでしょうか?
>>234
クラスの親子間で同じ名前のメンバーがある場合にどれをつかうかは、
クラスメソッド&変数と、インスタンスメソッドとでちがう。
クラスメソッド&変数の場合、変数の型によって決まる。
インスタンスメソッドの場合、変数がさすオブジェクトの型によって決まる。
237デフォルトの名無しさん:04/05/25 19:07
よくSEとかエンジニアって言いますが、
大体どういう資格もってるんですか?こういう人たちって
シスアドとかですか?シスアド自体言葉しかしらんのですが・・・
有資格者の人からしてみればサイト作ったりスクリプト作ったりなんて
簡単なことなんですか?
よろしくお願いします。

すれ違いのようですが、何処で聞けばいいのか分からんのです。
スレどころか板
マ板のほうが近いような

マジレスすると単語にはなんにも意味はない
SEっていうと凄く見えるだけ

ITって単語になんの意味もないのと同じ
>>237
IPAの資格とか各種ベンダーの資格とか色々。
ベンダー資格は持ってないんだけどIPAに関して言えば、
プログラムというよりはもっと広い分野の勉強だから
これとればプログラムが組めるってもんでもないと思う。
240デフォルトの名無しさん:04/05/25 19:15
>>238・239
板違いなのにありがとう。
深く聞いても理解できませんでした(汗
あきらめます。
資格は大企業にいたらボーナスが高くなる程度の役にしかたたない。
中小企業だと、入ったばっかり取ったばっかりのときにちょっと自慢できるだけ。
>>235
そいつらに比べるとJava特有の部分っていうのがでかすぎるな。
Perl/PHPと比べるならServlet/JSPとJSTL、strutsくらいは知っておいたほうがいいけど、結城さんの本にはサーバーサイドのことは触れてなかったはず。
244229:04/05/25 19:46
>>232
神降臨。ありがとうございました。
(どうすればキャストできるのか考えてますた。的外れだったようです。  つД`)


>236
あの、僕にはまだ早いのかもしれませんが、もし宜しければ、
バカにも解るように噛み砕いて教えていただけないでしょうか?
>クラスメソッド&変数と
これは、クラスメソッド及びクラス変数及びインスタンス変数、ということですよね?
これの型というのは、クラスメソッドでは戻り値の型ということですか?
>インスタンスメソッドの場合、変数がさすオブジェクトの型
ってなんでしょう??うーん…
>239
あのな、そんな一度に全部わかろうとするな。
とりあえず入門書を2,3回通読しろ。もちろんまともな本な。
良スレに感謝
先生!
クラス内の、スタティックフィールドに、
メソッドからアクセスするときに、何気にthisをつけてしまったんですが、
そしたら、普通に動きました。
thisというとインスタンスを指定するために用いるものと思っていたのですが、
もっと何か重大な意味があるのでしょうか?

個人的にはthisをつけたら、コンパイルエラーが相応しいと考えていたので、カルチャーショックを禁じ得ませんって言うか何を言ってるのだろう。。。
>>244
これを実行したら、あとは結果を自分で考えて。

public class Demo{
 public static void main(String[] args){
  SuperClass super1 = new SuperClass();
  SubClass sub2 = new SubClass();
  SuperClass super2 = sub2;
  System.out.println(super1.foo + ", " super1.bar());
  System.out.println(sub2.foo + ", " sub2.bar());
  System.out.println(super2.foo + ", " super2.bar());
  System.out.println(((SubClass)super2).foo + ", " ((SubClass)super2).bar());
 }
}
Class SuperClass{
 String foo = "SuperClass";
 String bar(){return "SuperClass";}
}
Class SubClass extends SuperClass{
 String foo = "SubClass";
 String bar(){return "SubClass";}
}

スペースが全角になっているのでコピペする時は注意。コンパイルエラーがあったら直してね。
>>247
ターゲット参照を使用してクラスメソッドを呼んでも言語仕様的には全く問題ない。
>>247
> thisというとインスタンスを指定するために用いるものと思っていたのですが、
> もっと何か重大な意味があるのでしょうか?
this が特別扱いされたのではなくて、
ターゲット参照を使ったクラスメソッド呼び出しと解釈されただけ。

ちなみに、ターゲット参照を使ったクラスメソッド呼び出しだと、
 ((System)null).out.println(((System)null).getProperty("user.dir"));
とかもできる。
>>243
どうも。サーバサイドの技術の方の勉強に時間を割きたいんで
言語自体の勉強をサクっと終わらせたいんですけど考え甘いですかね。
よく分かってないんですが、もちろんサーブレットやらJSPを使って
プログラムする時にもJAVAの文法ってのが必要ですよね?

あとOOな言語に触ったことないからそこらへんの勉強もまず
しないとなーとか色々考えてます。

その辺をふまえて結城さんの本の下巻はどうかなーと思って
聞いてみました。
252244:04/05/25 22:05
>248,>245?
ありがとうございました。
Javaの基本を知らないでサーブレットやらJSPやろうとすることが激しく間違い。
OOPもとことん勉強してからにしてくれ。
254247:04/05/25 23:08
>249,250
つД`)
先生。ターゲット参照がわかりません。
googleっても小難しい説明しか出てきません。26件しかないし。
本にも載ってないし。Help me…

(あと、nullをSystemにキャストとは…。高度すぎる。しかし、興味深い…
>>253
そういう、原理主義的な考え方も大切だとは思うけど、OOは手段なので、目的であるWebアプリからまず入るというのは、モチベーションを保つために良いと思う。
ちょっとソースを読んでみたいんですが、javaで書かれたブラウザって何かあるんでしょうか?
2chとか携帯用の物でもいいんですが。
>>247=254
要するにあるクラスのインスタンスからあるクラスのスタティックメソッドを呼べるということだ。

でスタティックメソッドは「呼び先の型」さえわかっていればいいので
null であろうと何であろうと System クラスという風にわかっていれば
System クラスのスタティックメソッドがちゃんと呼ばれる。
>>256
ソースがある、って条件だとSwingの中を見たほうが早いかも。

http://jazilla.sourceforge.net/
ここになんかあるらしいが。
259デフォルトの名無しさん:04/05/26 11:59
loggerを使用してXMLのLOGを吐いているのですが、
XML宣言の、
<?xml version="1.0" encoding="Shift-Jis" standalone="no"?>
encodingをSHIFT-JISに変換する方法はないでしょうか?

また、
<!DOCTYPE log SYSTEM "logger.dtd">
のDTDがあるとIEで読み込めないのでしょうか?
260247=254:04/05/26 14:36
>257
その説明で、件のthis.がわかった雰囲気があります。
かなりためになりました。
この微妙な理解を元に適切なドキュメントを読んで勉強しようと思います。
ありがとうございました。
クローンの作り方がよくわかんないです

Hoge x1=new Hoge();
Hoge x2=(Hoge)x1.clone_();
Hoge x3=new Hoge(x1);
x1-x3のどれかのメンバを変えるとそれが他の2つにも影響して3つとも同一の内容になります。
なんか基本的な勘違いしてる?

class Hoge extends Object implements Cloneable{

public Hoge (Hoge x){
this.member=(Object)x.member.clone();
}
...
public Hoge clone_(){
Hoge r=new Hoge(this);
return r;
}
}

>>261
cloneについてちゃんと調べてミソ
264デフォルトの名無しさん:04/05/26 17:17
マウスをクリックして描画の起点とし、そのままマウスをドラッグした時に楕円を逐次描き
マウスを放した時に最終的に終点を決定して楕円を描くようにするプログラム中の空欄を埋めながら完成させなさい。
import java.applet.*;
import java.awt.*;
import java.awt.event.*;

public class Kadai extends [ 1 ]{
int x1,y1;
public void init(){
[ 2 ]
[ 3 ]
}
public void mouseDragged(MouseEvent me){
int x0,y0,x2,y2;
Graphics g=this.getGraphics();
g.clearRect(0,0,300,300);
x2=[ 4 ];
y2=[ 5 ];
if(x1>=x2)[ 6 ]else[ 7 ]
if(y1>=y2)[ 8 ]else[ 9 ]
g.drawOval([ 10 ],[ 11 ],[ 12 ],[ 13 ]);
}
265続き:04/05/26 17:18
public void mouseMoved(MouseEvent me){}
public void mousePressed(MouseEvent me){
[ 14 ]
[ 15 ]
}
public void mouseReleased(MouseEvent me){}
public void mouseEntered(MouseEvent me){}
public void mouseExited(MouseEvent me){}
public void mouseClicked(MouseEvent me){}
}
よろしくお願いします。
>>265
ソースを読んであまりのくだらなさに呆れた。
>>264
スレ違い
boolean b = a == 1 ? true : false;
って、コードを先輩が書いてたんだが、意味あるのか?

boolean b = a == 1;
じゃダメなのか?
[1] MouseAdapter
[2] x1 = 0;
[3] y1 = 0;
[4] me.getX();
[5] me.getY();
[6] x0 = x2;
[7] x0 = x1;
[8] y0 = y2;
[9] y0 = y1;
[10] x0
[11] y0
[12] Math.abs(x1 - x2)
[13] Math.abs(y1 - y2)
[14] x1 = me.getX();
[15] x2 = me.getY();

あってなくても知らん 自分で確かめれ
boolean b = (a == 1);
こっちのほうが好きだな。
271デフォルトの名無しさん:04/05/26 18:00
ResultSetからさらに条件を指定して、行を取り出すことは可能でしょうか?
SQLを何回も発行するとパフォーマンス悪そうなので、一括である条件のデータをDBから
取得して、その後抽出したデータを分けたいと思っています。
よろしくお願いします。
>>271
resultsetから絞ることはSQL的に無理だろう
それも含めてクエリー発行せよ

DBによるがサブクエリーできるなら簡単に出来るはずだ

件数によってはデータ取得して一つ一つチェックしてもいい

つーか、どういった場合にやろうとしているとか想定件数とか
そういう条件によって変わってくるところだぞ
String[][]をnewする時ってどうすればいいんですか?

String[][] a = new String[i1][];
a[0] = new String[i2];
a[1] = new String[i3];
a[4] = new String[i4];

とかじゃダメですか?
JDBCのDatabaseMetaData使って、DBの構成情報を取得したいのだけれど、
テーブルのカラム名とか型情報とかは取得できますた。
で、主キーや外部キー情報や、他テーブルとのリレーション情報などを取得するには、
どのメソッド使えばいいんですかね?
DatabaseMetaData#getCrossReference()かな?などと思いつつ、うまく逝けません。
JFrame Frame1 extends JPanel{
 Vector Vector1 = new Vector(0);//←ここに
 Frame1{
  (中略)
  DrawPanel Draw1 = new DrawPanel();
 }
}
class DrawPanel extends JPanel implements MouseListener{
(中略)
 public void mouseClicked(MouseEvent e){
  int a = e.getY();//←このマウス座標を↑のVector1にaddしたい
 }
(中略)
}

JPanelのクリック座標を貼り付け親(?)の中にいれたいんですよ。
設計からやり直さないと駄目ですか?
276274:04/05/26 19:53
主キー情報は取得できますた。
DatabaseMetaData dbmeta = con.getMetaData();
ResultSet rs2 = dbmeta.getPrimaryKeys("", schema, table);
while (rs2.next()) {
System.out.println("------------------------------");
System.out.println("TABLE_CAT :" + rs2.getString("TABLE_CAT"));
System.out.println("TABLE_SCHEM :" + rs2.getString("TABLE_SCHEM"));
System.out.println("TABLE_NAME :" + rs2.getString("TABLE_NAME"));
System.out.println("COLUMN_NAME :" + rs2.getString("COLUMN_NAME"));
System.out.println("KEY_SEQ :" + rs2.getString("KEY_SEQ"));
System.out.println("PK_NAME :" + rs2.getString("PK_NAME"));
}

外部キー情報は、getImportedKeys()とか、getExportedKeys()とか使うのかな?
リザルトセットが反ってこないっす。
>>275
だめ。できなくもないけど、やったら愚か。

GUI となるインスタンスがデータ格納先となるインスタンス (ex. Vector) に
直接アクセスするような設計をはじめると、わけわかめの前触れ。
座標値を保存していくなら、addPoint() とか専用のメソッドをどっかに作って Vector の存在を隠蔽するとかだね・・・
ワンクッションツークッションおくのが大事。
>>275
っつーか Panel に Vector 置いて、getter 設置。
Frame は getter 経由で取得すれば?
279デフォルトの名無しさん:04/05/26 22:28
正しい結果がでません。
どこが間違ってるのか教えてください。
public class Max{
public static void main(String[] args){
int N=1,S=1;
while(S<=1000){
S*=N;
N++;
}
System.out.println("整数を1から順に掛け合わせた場合に、1000以下で最大となるときの整数Nは、"+(N-1)+"です。");
}
}
280デフォルトの名無しさん:04/05/26 22:53
>273

配列は
型の宣言、生成(要素数を決める)、初期化(各要素の中身を入れる)で使えるように
なるから、それだとエラーが出ると思う。

要素数は最初に決めたら変更不可だから、列によって要素数が異なる多次元配列
を作るときは、生成時点で最大数を指定するか、java.util.Vector クラスのインスタンス
として配列を作って対処するか。だったと・・・。
281デフォルトの名無しさん:04/05/26 22:57
>>279
どういう結果が出るの?
6までで720で、7だと5040だけど
止まるのはN=8,S=5040の時。
283デフォルトの名無しさん:04/05/26 23:36
>>282
まじ?なんでそうなる?
>279
S*=N;

N++;
を逆にしやがってください。
もしくは出力を
+(N-2)+
にするとか。

朝起きて考えれば分かるだろ。
おまえらバカ?
デバッガで追えよ。
286デフォルトの名無しさん:04/05/26 23:40
脳内デバッガでやろうとしたけどようわからんかった。
287デフォルトの名無しさん:04/05/26 23:40
>>279
System.out.println("Nが" + N + "の時にSは" + S);
この一文をはさんでみるとよく分かる。
解決法は>>284
public class Max {
public static void main(String[] args) {
int n = 1;
int i = 1;
for (;;) {
n *= i;
if (n > 1000) {
break;
}
i++;
}
System.out.println("整数を1から順に掛け合わせた場合に、1000以下で最大となるときの整数Nは、" + (i - 1) +"です。");
}
}
289質問者:04/05/26 23:45
StringクラスのreplaceAllメソッドを使って、「"$"」を「"\$"」に
置換したいのですが、置換先の指定の方法がよく分かりません。

replaceAll("\\x24", "?")

の「?」の部分には何を入れればよいのですか?
>>289
replaceAll("¥¥$", "¥¥¥¥¥¥$");
かな?
291290:04/05/26 23:52
ちがった
replaceAll("¥¥$", "¥¥$");
かな?間違ってるとヤバいので寝るw
292290:04/05/26 23:57
290で良かったみたい。
293質問者(289):04/05/26 23:57
>>290
replaceAll("\\$", "\\\\\\$");
で上手くいきました。
ありがとうございます。

\\\が正規表現の「\」に対応するのですね。
294質問者(289):04/05/27 00:00
間違えた‥‥

× \\\が正規表現の「\」に対応するのですね。
○ \\\\が正規表現の「\」に対応するのですね。
295デフォルトの名無しさん:04/05/27 01:16
質問です。
ある抽象基底クラスに、abstract staticなフィールドを作りたいのです。
そして、こんな風に使いたいと思っています。
例:
abstract class 哺乳類{
  abstract protected static 鳴き声;

  public final String 鳴く(){
      ~~~~
   return this.鳴き声;
  }
}
class 犬{
  protected static 鳴き声 = "ワンワン";
}
class 猫{
  protected static 鳴き声 = "ニュアーニュアー";
}

この場合、同じ種の動物は、みんな同じ声で鳴くというのを前提にしています。
(つまりクラスによって値が異なり、同じ型のインスタンス同士ならみんな同じ値を持つ)

このような実装をしたい場合はどうするのがベストなのでしょうか・・・?

296295:04/05/27 01:18
すみません。猫の鳴き声を間違えました。
「ニャーニャー」に変更してください。
  public abstract String 鳴く();
>>297

普通はそうだよね。
それをわかってて聞いてるのか、そうじゃないのかが微妙。
>>295
変数にabstract修飾子はつけられないぞ。それに、
staticなメソッドは継承されず、多態性を発揮しない。
この辺は変数と一緒なので、>>248をstaticメソッドを使うように変更して試してみて。

そういうことをしたかったらこうすればいい。ありがちの例だが。
abstract class 哺乳類{
 abstract String 鳴く();
}
class 犬 extends 哺乳類{
 String 鳴く(){return "ワンワン";}
}
class 猫 extends 哺乳類{
 String 鳴く(){return "ニャーニャー";}
}
…いかん、ありきたりすぎて涙が出てきそうだ。

そもそもクラスメソッドの意味をはき違えているな。
クラスメソッドはクラス全体の振る舞いや性質であり、個々のインスタンスの振る舞いではない。
>>295

鳴く() メソッドを final にするのが間違ってます。
301295:04/05/27 01:39
ありがとうございます。

そうか、ゲッターにしちゃえば良いのか…。
単純なことですみません…。

さきほどは例を出しましたが、
実際は何がしたいかというと、
これからRDBS内のテーブルにアクセスするクラスを作るのです。

つ づ く 。



>254の質問に似てるんだが、
インスタンスから自クラスのstaticメソッドを読むときにthisをつけて、どんな効果が得られるのですか?
「自クラス名.スタティックメソッド名」とすると、自クラスのstaticメソッドだとわかりづらいっていうことですかね?
303295:04/05/27 01:55
public abstract class Table{
  protected String[] values; // その行のフィールドの値の配列
  abstract protected String getPrimaryKeyName(); // プライマリキーの名前を返す
  public final String tableName(){
    String className = this.getClass().getName();
    // クラス名の、最後のドット以下の部分をテーブル名とする
    return className.substring(className.lastIndexOf('.') + 1);
  }
  // プライマリキーの値を引数にとってTableオブジェクトを作成
  public Table(int pkeyValue){
    final String tableName = this.tableName();
    final String pkeyName = this.getPrimaryKeyName();
    final String sql = "Select * from "+tableName+" where "+pkeyName+"=" +pkeyValue;
    this.values = SQLConnector.execute(sql);
  }
}
public class Customer extends Table{
  private static final int id = 0;
  private static final int name = 1;
  protected String getPrimaryKeyName(){
    return "CustomerID";
  }
  public String getID(){
    return this.values[id];
  }
  public String getName(){
    return this.values[name];
  }
}
304295:04/05/27 02:03
こんな感じのクラスを作っていたのですが、
getPrimaryKeyName() の部分、最初は、
static String pkeyName というフィールドだったのです。
おかげさまで、上の方法でとりあえず解決? しました。

ただ、プライマリキーの名前っていうのは
インスタンス(この場合は各テーブルの行にあたる)に関わらず一定のはずなので、
本来は定数として設定されておくべきですよね。
このgetPrimaryKeyName() メソッドでは、インスタンスや状況によって
複数の種類の値を返せるような実装が出来てしまうので、
なんとなく違和感が残っているのです。

定数を継承する方法、ないかなぁ。

>>302
staticメンバーを参照するときは、staticということを強調するために
「オブジェクト名.メンバー名」よりも「クラス名.メンバー名」
の方が推奨されているはず。
http://age.tubo.80.kg/age02/img001/316.txt
このようなのを書いたのですがこれを実行すると
本当は丸の絵を入れ替えたかったのですが、なぜか点滅してしまいます
ちなみに,WinKioku#actionPerformedのf.repaint()をf.pack()に変えると、今度は戻らなくなってしまいます
どうしてこのようになって、どうすればいいのでしょうか
ちなみに、これに必要なファイルは
http://age.tubo.80.kg/age02/img001/317.lzh
にまとめてあります
  protected final String getPrimaryKeyName(){
    return "CustomerID";
  }
>>302
staticメソッドがどのクラスにあるかなんて、分類上の都合でしかないから、「自クラスのメソッド」ということをわかる必要性はない。
それよりも、そのメソッドがstaticメソッドであることがわかるほうがいい。
>>306
コメントもないプログラム貼られても、どうなってほしいのかさっぱりわからん。
Component をがんがん入れ替えてたり、GUI に貼りもしないで Icon 作ってるとこからみて、
作法がさっぱりわかっちょらんことは察せられる。
310デフォルトの名無しさん:04/05/27 10:54
ちょっと質問させてください

Servletで作成したCSV等を、HULFTで別のサーバに転送したいのですが
Servlet内でUNIXのコマンドを打つことは可能でしょうか?

よろしくお願いします
>>310
Runtime.exec()
312310:04/05/27 14:14
>>311

どうもありがとうございました!
313デフォルトの名無しさん:04/05/27 15:14
質問なんですが、
サーブレット内でクライアントのIPアドレスを取得したいと思っているのですが、上手くいきません。
現在、getRemoteAddr()で取得しようとしているのですが、
どうやらTomCatのIPを取得しているようなんです。
今はローカルで動かしているので、もしかしたらそれが原因かとも思ったんですが、
サーバーで動かせる環境がないので確認が取れません。
何か間違っている可能性があるところは無いでしょうか?
314デフォルトの名無しさん:04/05/27 15:58
javaAPIをノートにDLしたいのですがDLできる場所を教えてくれませんか?
お願いします
>>313

同じマシンでサーバとクライアント動かしてるなら
リモートホストで同じアドレスが帰ってきてもおかしくないだろう。

それとも貴方のマシンにはLANカードが2枚刺さってるのか?
そうさのう。
>どうやらTomCatのIPを取得しているようなんです。
>今はローカルで動かしているので、もしかしたらそれが原因かとも思ったんですが、
何が帰って来て欲しかったのやら。

>>314
javaAPI ってなんですか。javadoc な HTML のことですか。
普通に java api ダウンロードでググればあるでしょうに。
317デフォルトの名無しさん:04/05/27 16:43
>>316
日本語版1.4.0ドキュメント、というものでよろしいでしょうか?
200Mぐらいあるやつです
200MB ってのが展開後のサイズなら、多分それだ
319314:04/05/27 16:52
ありがとうございます。今DL中です。1時間かかるよー
320302:04/05/27 17:46
>305
ためになりました。ありがとう。

>308
レスありがとう。
申し訳ないんだが、できそこないな僕には
>そのメソッドがstaticメソッドであることがわかるほうがいい
の意味がわからなかった。
具体的にどうすれば、それがスタティックメソッドだと分かるのだろうか?
クラスの外からならば「クラス名.メソッド名」とすれば、スタティックメソッドだと分かるが、
308氏はそういうことをいっているのではないよね?
僕にとって有用な情報であると考えられるので説明をお願いしたいであります。
びみょーに>>313さんはIPアドレス自体あまりよく理解していない悪寒。
>>320
そういうことを言っているんだよ。
つまりソースの読みやすさ。
static メソッドとして定義したんなら、そのように書け、ということ。

MyClass のソースの中で MyClass.getStaticValue() と書いても一向に構わないし、
そうした方がそうしないより、読んではるかに分かりやすい。
インスタンスメソッドに見間違うことなんてないんだから。(変数名を大文字ではじめるマヌケには別だけど)

人に読んでもらったり、忘れかけてるソースを自分で読み直したりの機会があれば、
static メソッドの扱いや、ソースの読みやすさ、メソッドの扱いやすさの工夫などを勉強することになるだろう。

それまではいくら頭を捻っても、ピンとくるまい。
無印C でオブジェクト指向的な設計をして、
言語によるサポートが得られず苦労した経験があるなら、悩まないだろうな。
java 言語は、別に初心者向けに用意された言語というわけじゃないんだからね。
すぐ実感としてわかってこない部分があって当然。
323302=320:04/05/27 18:48
>322
ありがとう。ためになりました。
324デフォルトの名無しさん:04/05/27 19:27
4*(1-1/3+1/5-1/7+1/9-・・・+1/10000001)
というような円周率を求めるプログラムを作りたいんですけど
どうもうまくいきません。
どなたかご教授願えませんか?
325313:04/05/27 19:30
>>315
やはりそうですか
再来週あたりにサーバ側の設定が出来るらしいので、
その時にもう一度試してみます
どうもありがとうございました
そのクラスのインスタンスがいくつ作られたかを記憶する機能を持ったクラスをつくってみようと思ったんですが、
継承しないクラスでは、コンストラクタで、初期値が0のクラス変数にインクリメントすることで実現したんですが、
何かのメソッドがこのクラスを継承すると、そのクラスのインスタンスの数も数えてしまいました。
どういうコードを書くと実現できますか?
そもそもオブジェクト指向的に、このような設計は考えませんか?
数えないクラスから継承させて数えるクラスを作る。
「継承しないクラス」「メソッドが継承する」の意味が今ひとつ分からんが
if (getClass().equals(数えるクラス.class)) {
 count++
}
でどうか。

ちなみに、普通はデザパタちうもんを考えるわな・・・
329デフォルトの名無しさん:04/05/27 20:57
JOGLをWindouws,Eclipse環境で使いたいのですが、
導入の方法がわかりません。
教えてください。よろしくお願いします。

JOGL
https://jogl.dev.java.net/
330あひゃっ:04/05/27 20:55
JAVAでTCPIP通信のサーバ側に接続するのに、connectメソッドを呼んでいるのですが、
connectメソッドから1分以上応答がありません。
接続タイムアウト時間(即時タイムアウト等)を任意で設定したいのですが設定方法がわかりません。
どなたかご存知の方教えていただけないでしょうか?
環境は、SunEWS + Solaris8です。
331デフォルトの名無しさん:04/05/27 21:03
JOGLをWindouws,Eclipse環境で使いたいのですが、
導入の方法がわかりません。
教えてください。よろしくお願いします。

JOGL
https://jogl.dev.java.net/
332デフォルトの名無しさん:04/05/27 20:59
JOGLをWindouws,Eclipse環境で使いたいのですが、
導入の方法がわかりません。
教えてください。よろしくお願いします。

JOGL
https://jogl.dev.java.net/
JOGLをWindouws,Eclipse環境で使いたいのですが、
導入の方法がわかりません。
教えてください。よろしくお願いします。

JOGL
https://jogl.dev.java.net/
334デフォルトの名無しさん:04/05/27 21:31
329,331,332
板汚してごめんなさい。
  m( __ __ )m
335デフォルトの名無しさん:04/05/27 22:26
interfaceの存在意義というのはどういうところなのでしょう?
どういう用途に使えて、どういう用途には使うべきでないのでしょう?
abstractクラスとの使い分けはどのように行えばよいのでしょう?
継承とは関係なく機能をつけたいときに使う。
マルチスレッドというものに興味があるのですが
具体的にはどのようなメリット、デメリットが存在するのでしょうか?

サーブレットなどだと
プロセスを複数作るより効率がよくなると聞きます。

たとえばサーブレットとかはマルチスレッドとかよく聞くんですが
クラス変数なんかをstaticで宣言しなければ無問題?
>>335
とりあえずMouseListenerとMouseAdapter使ってそれぞれ同じように動くコード組めばわかるよ
>>324
適当ですけど

double a = 0;
int i = 1;
while (i < 10000000) {
  a += (1D / i);
  i += 2;
  a -= (1D / i);
  i += 2;
}
System.out.println(a * 4);
複数行のテキストファイルがあり、
そのうちの一行を削除もしくは変更したいと思っています。

現在はファイルからStringに読み込み、修正を加えて
ファイルを再び書き出し直していますが、どうにも非効率な気がしてなりません。
(数千行を超える可能性があるファイルですので)

もっと良い方法があるような気もするのですが…。
何か他に良い方法をご存知の方がおりましたらお教えください。
341デフォルトの名無しさん:04/05/28 01:08
test.Class.getName
の後ろの二つのclass.getNameって具体的に何をしているのでしょうか?
これを指定することによって何が可能になるのでしょうか?
>>340
> どうにも非効率な気がしてなりません。

何が非効率だと感じてるの?(メモリ?時間?)
もっとメモリを使わないようにプログラムを書き換えたいってなら、
ファイルを一旦全部メモリ(String のインスタンス)に溜め込むのをやめて、
1行読んでは書き(あるいは削除したい行なら書かず)を繰り返すってのはどうでしょう。

既にそういうことをやっているのか、やっていないのかも、
あなたの文章からはわからないわけですが、(勝手に想像して書いてみました)。
>>340
非効率と思ってもそれ以外に方法はないと思うが。
それに数千行だったら全然大したことないと思うが。
>>341
Java (TM) 2 SDK ドキュメント
http://java.sun.com/j2se/1.4/ja/docs/ja/index.html
のjava.lang.Classを読むがよろし
345340:04/05/28 03:48
>>342
言葉足らずですみません。メモリを食うのでは?と懸念してました。
おっしゃるとおり一行ずつ読み込んで
StringBufferにappendして出力する方法もありですね。

>>343
言われてみればそうですね。(せいぜいKBオーダーですか)
小さなプログラムしか書いたこと無かったので
なんとなく腰が引けてました(^^;

ありがとうございました。
>>333
Downloads -> Precompiled binaries and documentationから
好きなバージョンのjogl.jarとjogl-natives-win32.jarを落とす。
Eclipseで自分のプロジェクトのproperty -> Java Build Path
-> Libraries -> AddExternal JARsでjogl.jarを追加。
jogl-natives-win32.jarの方は解凍してPATHに入れる、
分からなければ中のdllをプロジェクトのフォルダにおけば、おk。
ではないかと。
347あひゃっ:04/05/28 09:16
JAVAでTCPIP通信のサーバ側に接続するのに、connectメソッドを呼んでいるのですが、
connectメソッドから1分以上応答がありません。
接続タイムアウト時間(即時タイムアウト等)を任意で設定したいのですが設定方法がわかりません。
どなたかご存知の方教えていただけないでしょうか?
環境は、SunEWS + Solaris8です。
質問です。
十進数で与えられた 32bit の値を二進数に変換するにはどうしたらいいですか?
>>348
2進数はStringでいいの?
良ければ、
Integer.toBinaryString()
32文字にならない場合もあるので、そのときは"0"を足らない分だけ足せばOK。
350348:04/05/28 10:58
>>349
さんくすこ…だけど、java.lang は使えない、特殊な applet 環境なのだった…
ほかに方法無いかな?ちなみに使えるのはこんな感じ。

java.applet.*
java.io.*
java.net.*
java.text.*
java.util.*
java.util.zip.*
netscape.javascript.*
gnu.io.*
java.langが使えない環境なんてありえねーと思うんだが、どうなのか。
String も Integer も Object も使えないんですね
大変ですね
>ほかに方法無いかな?
2 で割って余り出してけばいいじゃねぇか
ま、java.lang.* が使えないなら無理だけどな
>>350
java.lang.* が使えないなら String が使えないって事になると思うんだが。
>>303-304
final多いな。295もそうだが、なにか色々勘違いしてそうだ
最適化を狙ってるのでは?と
>>356
最近のじゃあまり関係ないらしいが
J2SE SDK 1.4.2_04

import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;

public class hoge extends Applet implements MouseListener
{
   ・・・
   public void paint(Graphics g)
   {
      g.setBackground(Color.black);
      g.setBackground(Color.white);
      ・・・
   }
   ・・・
}

java:38: シンボルを解決できません。
シンボル: メソッド setBackground (java.awt.Color)
場所 : java.awt.Graphics の クラス
     g.setBackground(Color.black);
      ^
java:42: シンボルを解決できません。
シンボル: メソッド setBackground (java.awt.Color)
場所 : java.awt.Graphics の クラス
      g.setBackground(Color.white);
       ^
エラー 2 個

購入した書籍を参考にしたんですが、エラーの理由が分かりません。
バージョンによって setBackground の書式など変わってるのでしょうか?
つうか、GraphicsにsetBackgroundなんてあったっけか?
ない

APIみればわかる
361デフォルトの名無しさん:04/05/28 19:09
Graphics に描画するときに background color を利用するような機会はない。
ちなみに clearRect では、何色だということは保証されない。
背景指定できるのは Component そのものに対してだけ。
358です

手元の書籍では
setBackground(Color.gray); //背景色をグレイにする
とだけあったのでてっきり出来るかと思ってました

目的は円を描画して(fillOval)で外側の線と塗りつぶす色を別々にしようというこで
若干問題がずれてますが、この場合は単色(同色)でしか描画できないとうことですね?

つまり背景色は塗りつぶす色じゃなく単純に背景色だということで・・・
ちょっと勘違いしてました
>>362
どのクラスのメソッドだよ・・・
364デフォルトの名無しさん:04/05/28 21:05
ファイルの比較で行の比較したいのですが
二つのファイルからBufferedReaderで一行ずつ読み込ませて
イコール判定してもうまくいきません
どうすればいいんでしょうか?
>>362
setColor して Fill したとき、border と色が別々になったことが一度でもあるか? ないだろ?
ということは塗りつぶしの色も当然 setColor で指定することになるわいな

>>364
equals 判定して下さい
>>362
setColor して Fill したとき、border と色が別々になったことが一度でもあるか? ないだろ?
ということは塗りつぶしの色も当然 setColor で指定することになるわいな

>>364
equals 判定して下さい
equals 使え。
equals 使え。
ワロタ 連投なんかまねすんな
ワロタ 連投なんかまねすんな
なんか2ch全体重くない?
newしたときに()が必要なんですが、
引数もないのになんで?
メソッドには引数もないのに()が必要だろ。
引数が無い時は()を書くという決まりなんだから仕方ないだろ
なんか会社からプログラムの勉強しろとか言われて
はじめたんだけどそのところがよくわからなかった

とりあえずそういうものとして覚えときます
>>375
そういう文法だから

「なぜそういう文法にしたのですか」という質問は
ゴスリングへ直接どうぞ。
377デフォルトの名無しさん:04/05/29 15:08
2ショットチャットT」というチャットサイトがあります。ただし、管理人がアダルトチャットを禁止しています。悪質なアダルトチャット業者に掲示板を荒らされたらしいです
378ゴスリング:04/05/29 19:46
>>376
はい、答えますよ。
今とりあえずCUIを一通り終えてアプレットにチャレンジしてるのですが、
イベントが発生したときの処理で本の通りにやってるのにエラーが出るんです。。。
public void init()
{
------
x.addActionListener(new ActLis());
}
class ActLis implements ActionListener
{
public void actionPerforme(ActionEvent e)
{
------
}
}
ソースはこんな感じです
「abstractとして宣言する必要があります」
とエラーが出るんですが、本にも書いてないしさっぱりわかりません
誰か教えてください お願いします
>>379 スペルが違うから。
>>379
> public void actionPerforme(ActionEvent e)
public void actionPerformed(ActionEvent e)
382379:04/05/29 20:24
う。。。マジだ。。。
本当にありがとうございました
本を疑ってた自分が恥ずかしい。。。
383デフォルトの名無しさん:04/05/29 23:00
まさに1で書かれているファイルが違いますというところで
3時間止まっているんですが、下のパスを入力しているのですが
ダメです。何がダメなんでしょうか…

SET JAVA_HOME=C:\j2sdk1.4.2
SET PATH=%PATH%;%JAVA_HOME%\bin
SET CLASSPATH=.;%JAVA_HOME%\lib\tools.jar
384デフォルトの名無しさん:04/05/29 23:03
それ、コマンドで打ち込んだのならば
そのコマンドでjavaやjavacやらないとだめだよ
その設定を永続的にしたいのならば
マイコンピュータ>詳細設定>環境変数
Sunは環境変数使うの推奨してないけどな。
386デフォルトの名無しさん:04/05/29 23:12
C:\Autoexec.batに入力しています。
でも、全然動かないんです…どのサイト見ても設定方法は
統一されていないしで困っています。
OSはWin98です。


PATH = C:\j2sdk1.4.1_02\bin
CLASSPATH = :\JavaSample;.
って入力してもいいんですかね?

クラスパスは作成したファイルの保存場所と考えて
いいんですか?

>>386
関係ないかもしれませんが、
PATH = C:\j2sdk1.4.1_02\bin
イコールの前後のスペースを巡って、激しく殺伐としたやり取りを
どこかで見たような気がします。イコールの前後にスペース入れるな、
というのが、その人の言いたかったことだったと記憶しております。

あと、最近のJavaなら、CLASSPATH環境変数は設定しなくてもいいし、
CLASSPATHが何なのか完全に理解するまでは、いじらないことをお薦めいたします。

ちなみに私もWin98ユーザですが、PATHの設定はこうなっています。
PATH=C:\WINDOWS;C:\WINDOWS\COMMAND;C:\J2SDK1.4.2_04\BIN;C:\ANT161\BIN

ANTを入れていないのであれば、・・・(略
389デフォルトの名無しさん:04/05/30 00:12
>>387さん >>388さん
レスどうもありがとうございます。
>>388さんのレスの通りに入力して再起動してもダメでした。
そもそもAutoexecが入力したPATH以外何も入っていないこと自体おかしいような
気がしてきました。参考書では、色々入力してあるのに、自分のは最初に
開いた時は何も入力されていなかったし…

どうもありがとうございました。
390デフォルトの名無しさん:04/05/30 00:42
つうか,コマンドで
>C:\J2SDK1.4.2_04\bin\java.exe
って打っても何も出てこないようなら
入力が間違っているか
インストールされていないか
どっちかだな
ほんとにC:\J2SDK1.4.2_04にインストールされているのか?
391デフォルトの名無しさん:04/05/30 01:09
>>385
ああ、いるよお前みたいなこだわりのやつ
クラス内のフィールド及びメソッドに全部thisつけるんだよな
>>390
あるいは、JRE入れた可能性も。
393デフォルトの名無しさん:04/05/30 01:15
>>392
ああ、それだぁ!
知り合いプログラマでそういうやついた

会社の環境に新たにJDK入れたがうごかない
聞くと
「SunのHPに言ったら自動でインストールされたようだ」
そのページを再度表示してもらったら
明らかにJREのダウンロードページっぽい

改めてJDK入れる機会の少ない人は勘違いしやすいかも
英語だし
>>391
メールのことを、かたくなにメイルっていったり。
395デフォルトの名無しさん:04/05/30 02:24
現在、Java1.4.2_03にて、URL.openStream()でWebページの読み込みを行っています。

具体的には、new BufferedReader(new InputStreamReader(url.openStream(), "MS932"));
とした後に、10Kバイトずつread(char [])しています。

サーバからの応答が途中で無くなった場合に、処理がハングアップすることを避けるために、
一定時間応答が無い場合はエラーを返して欲しいのですが、これを実現する方法はあるでしょうか?
(上述以外のAPIでもかまいません)
JakartaのHttpClient使ってるの?
>>391,394
こだわり云々関係なく環境変数を使うのは(特にCLASSPATHは)
やめておいた方がいいと思うけどねえ。

>>395
別スレッドでタイマ処理をしてみたらどうだい。
タイムアウトしたあとタイマスレッドからReaderを閉じると
メインスレッドではIOExceptionが投げられるから
それを使ってやればいい。
398395:04/05/30 02:46
>>396
私へのレスですか? HttpClientというのを知らないので、多分使って無いです;;;

>>397
なるほど、close()で抜けるんですね!
この案で行きます!ありがとうございます。
CLASSPATHを設定する必要性が、いまとなっては皆無だな。
必要なクラスパスはアプリによっても違うし、コンパイル時と実行時でも違う。
環境変数に設定すると無用なトラブルを招くよ
jikes使うのに設定してる・・・。
>>398
HttpClient使えば、確か読み込み時のタイムアウトとか設定できる。
他にも、タイムアウトを設定できるHTTPライブラリはいくつかある。
403395:04/05/30 04:24
>>402
HttpClient2.0を落として試してみました。

HttpClient client = new HttpClient();
client.setConnectionTimeout(10000);
GetMethod method = new GetMethod("http://www.google.co.jp/");
client.executeMethod(method);
BufferedReader reader = new BufferedReader(new InputStreamReader(method.getResponseBodyAsStream(), "MS932"));

String line;
while((line = reader.readLine()) != null) System.out.println(line);

reader.close();
method.releaseConnection();

setConnectionTimeoutで1を設定すると、executeMethodでHttpConnection.ConnectionTimeoutExceptionが
発生することを確認しました。便利&楽そうなので、検討したいと思います。
アドバイスありがとうございました。m(_ _)m
Javaのプログラムをコンパイルしたら、エラーが出て、
そのときのエラーの説明が何を言っているか良くわからなかったんです。
そのエラーは修正してプログラムのほうは問題なくなったのですが、
結局コンパイラが何を言いたかったのかがあいまいで気になります。
で、英語でのエラーもみると何を言っているか解るかもしれないと思ったわけです。

英語でエラーを表示させるにはどうすればよいでしょうか?
ここの管轄外でしょうか?(すみません…
>>404
コントロールパネルの地域プロパティをアメリカとかに変えると確か英語になったはず。
>>404
もし使っているOSがUNIX系統なら、
環境変数のロケールなどを英語に設定しなおせば、
Javaコンパイラの出力するメッセージも全て英語になるよ。
407デフォルトの名無しさん:04/05/30 08:11
独習JAVAすげーな・・・お前ら、この本にJAVAのすべてが
のってるぞ・・・まじJAVAマスターになれる
Javaの勉強しています。
下のプログラムのクラスの修飾子publicを取ってコンパイルすると
appletviewerに文字が表示されません。

どうしてpublicが必要なんですか?

publicはほかのクラスにアクセスを許可するってことなので
Graphicsクラスがこのクラスにアクセス出来ないってことですか???
なにか重大な勘違いしてますか?

import java.applet.Applet;
import java.awt.Graphics;
/*
<applet code="FirstApplet" width=200 height=200>
</applet>
*/
public class FirstApplet extends Applet {
public void paint(Graphics g) {
g.drawString("This is my first applet!", 20, 100);
}
}
単純にそういう決まりだと。思った方が楽だと。

C#でもMain()はpublic static
>>408
Applet を起動するクラスから使えなくなるから。
>Graphicsクラスがこのクラスにアクセス出来ないってことですか???
ちゃうわ。もっと関係性をよく考えれ。

イメージとしては、こう。

class ContainerOnBrowser extends Container {
 public ContainerOnBrowser(String appletclassname) {
  FirstApplet fa = new FirstApplet(); //みたいなことをする
  add(fa); //みたいなことをする
 }

 public void paint(Graphics g) {
  fa.paint(g); //みたいなことをする
 }
}

プログラマが実装するのはアプレット本体。
ブラウザがその外枠を用意して、アプレットの各メソッドを呼び出す。
他にもいろんなタイミングで init だの start だの stop だの呼ばれる。

外から呼ばせるためには公開してないといかん。
だから Applet の定義の段階ですでに public になっていて、
プログラマが継承して何か作るときはこれに準じて守っていかないとならない。
>>407
と思ってしまう程度にいろいろ書いてあるからタチが悪いんだよね。
文法で言えば、type[]{value1,value2, ... }の書き方も載ってないし。
クラスライブラリで大切なListもMapも載ってない。
データベースもJSP/Servletも載ってないし。
Javaマスターを名乗るからには、Jakarta CommonsとORマッピングをなにかひとつくらいは知っておいて欲しいし。
413408:04/05/30 10:36
>>409さん >>410さん >>411さん
レスありがとうございます。
とてもよくわかりましたm(_ _)m
DelegateとFacadeって何が違うんですか?
        s
415デフォルトの名無しさん:04/05/30 11:04
>>414
EJBのはなしか?

デリゲートってクライアント側の受け口
ファサードってサーバ側の受け口

もうちょい詳しい回答は>>420あたりから
delegate はあるオブジェクトへのメソッド呼び出しを別のオブジェクトへのメソッド呼び出しへと転送するもの。
facade は複数オブジェクトに対する順々のメソッド呼び出しを一まとめにして簡単に使えるようにしたもの。
>>416

セディユつけれw
ファサードって、心の中でファケイドって呼んでたりしない?
package test01;
abstract public class Car{
 protected double gas;//private double gas;
 public Car(){
  gas = 0.0;
 }
 public void setGas( double g ){
  gas = g;
 }
 abstract public void show();
}
---------------------------------------------------
package test02;
public class RealCar extends test01.Car{
 public void show(){
  System.out.println( "ガスは" + gas );
 }
}
-----------------------------------------------------------
class meinnHoge{
 static public void main( String[] args ){
  test02.RealCar car = new test02.RealCar();
  car.show();
 }
}
String s = "こんにちは";
String t = "コンニチハ";

とした場合、sとtが何byteなのかを調べて、byteで返す方法がわかりません。
どなたか教えてはいただけませんでしょうか?
421419:04/05/30 12:36
っていうプログラムがあるんですよ。
それで、ソースファイルしかない、つまりクラスファイルが無い状態でコンパイルをすると、意図したようなクラスファイル(バイナリ?)が出来て、うまく実行できました。
そのあと、これのpackage test01のgasをprivateにしてみました。
それで丸ごと再コンパイルしたら、
予想としては、privateだから、継承したほうで変数がねぇよといわれル気がしたんですが、
普通にコンパイルが出来て、先ほどと同じ動きとなってしまいました。

この原因を教えて欲しいんです。あと、無理やり全て再コンパイルするオプションってあると思うんですが、教えて欲しいです。
よろしくお願いします。
(非常に長くなってしまいました。申し訳ありません。
>>420

int i = s.getBytes().length;
byte[] b = s.getBytes();
return i,b;
ってこと?
423デフォルトの名無しさん:04/05/30 12:51
private double gasには各メソッドからアクセスすることになります。
各メソッドはpublicになっているので、結果として同一クラスからの使用と判断されるので、
他のオブジェクトからもアクセスが可能になってしまいます。
>>422 
まさにその通りです。
ありがとうございました。
425422:04/05/30 13:05
間違えた
int i = s.getBytes().length;
byte b = (byte)i;
return i;
ってこと?
426425:04/05/30 13:09
間違えたと思って書き直してたら、質問者からのお礼が・・・

はづい。
>>425
> byte b = (byte)i;
この行が無意味になってるんですけど。
428426:04/05/30 13:20
くそっ
つっこまれた。
int i = s.getBytes().length;
String j = ""+i;
byte b = (byte)i;
return "s="+s,"j="+""+i,"b="+(byte)i;
> String j = ""+i;
> byte b = (byte)i;
無意味。

> return "s="+s,"j="+""+i,"b="+(byte)i;
構文エラー。
グダグダやなぁ、おいw
431デフォルトの名無しさん:04/05/30 14:03
Java芸人
キタ━━━━━━(゜∀゜)━━━━━━!!!!
Javaヨゴレ芸人?
誰がヨゴレやねんw
434404:04/05/30 18:00
>405
ありがとうございました。いじるところはロケールですよね?変りませんでした。。。
つД`)
>406
ありがとうございました。しかし、ここにはUNIX環境が無いので今度試してみようと思います。
435419=421:04/05/30 18:16
>423
しかし、使ってるのはCarを継承したRealCarってことは
privateなgasには、継承したクラスですらアクセスできないはずですよね?
しかも、パッケージtest01が更新されたのに、その中のクラスを継承しているtest02内のクラスが更新されないのが、問題な気がしてならないんですが…
うーん…大規模になるとコンパイルに時間がかかるからその辺は自分で管理しろということなんですかね?
((test01内のgasを)privateに変更して、再コンパイルで問題発生しない。
(test02を再コンパイルすると継承できないといわれて、意図した問題が発生する。
(変更したのはtest01なのに再コンパイルが必要なのがtest02…説明キボン…
426は一体何がしたいのかよく分からんのだが420が求めている答えは
return (byte)s.getBytes().length;
で事足りるんじゃないか?
437デフォルトの名無しさん:04/05/30 18:30
矩形描画のプログラムを作成しているのですが、
平行四辺形になるばかりできれいな長方形になってくれません。
一応自分で作ってみました。よろしければどなたか見ていただけると嬉しいです。
ttp://www1.ocn.ne.jp/~h-uchida/q.html
438デフォルトの名無しさん:04/05/30 18:33
図形描画のアルゴリズム集のようなものがありましたら、
教えていただけると嬉しいです。
439デフォルトの名無しさん:04/05/30 18:47
質問なんですが
TABキーってKeyListenerで取得できないんでしょうか?
以下のコードでやってみたんですがTABキー押したときだけ反応がないのです
どうすればTABキー押したときのイベントを受け取れるのでしょうか?

import java.awt.Frame;
import java.awt.event.KeyEvent;
import java.awt.event.KeyListener;
public class TestFrame extends Frame implements KeyListener{
public static void main(String[] args){
TestFrame frame=new TestFrame();
frame.addKeyListener(frame);
frame.addFocusListener(frame);
frame.setBounds(200,200,200,200);
frame.setVisible(true);
}
public void keyTyped(KeyEvent e) {
System.out.println("Type:["+e.getKeyChar()+"]");
}
public void keyPressed(KeyEvent e) {
System.out.println("Press:["+e.getKeyChar()+"]");
}
public void keyReleased(KeyEvent e) {
System.out.println("Release:["+e.getKeyChar()+"]");
}
}
440デフォルトの名無しさん:04/05/30 19:31
>>439
http://java.sun.com/docs/books/tutorial/uiswing/events/keylistener.html
Tabのこと載ってる。関係なかったらスマソ。
441aoi:04/05/30 19:47
JavaMailの日本語のドキュメントってどこかにないですか?
あったら教えてください。お願いします
442デフォルトの名無しさん:04/05/30 19:49
>>437
ベクトルを知らないのかな?
mxとmyが求まったら、後は
x4=x2+x3-mx
y4=y2+y3-my
x5=x1+x3-mx
y5=y1+y3-my
でいい。mxとmyを求める時も、
lean_1やlean_2を使うのは良くない。
分母がゼロになる場合があるからね。
直線の方向ベクトルに着目して求めるのがいい。
443デフォルトの名無しさん:04/05/30 19:54
>>441
ぐぐれ
444aoi:04/05/30 19:59
>>443
申し訳ないが、考え付くキーワードですでにググっている。
うまくヒットしませぬ。
よろしければ、検索キーワードを教えてもらえませんか?
445デフォルトの名無しさん:04/05/30 20:01
>>441
>JavaMailの日本語のドキュメント
解説サイトのことを聞いてるのか。
APIドキュメントのことなのか。さっぱりわからん。
446aoi:04/05/30 20:03
>>445
APIドキュメントです
447デフォルトの名無しさん:04/05/30 20:05
448aoi:04/05/30 20:09
>>446
ありがとうございます
449aoi:04/05/30 20:10
↑間違えた
>>447
ありがとうございます
450aoi:04/05/30 20:10
↑間違えた
>>447
ありがとうございます
>>419
>>421
> それで丸ごと再コンパイルしたら

多分、これがうまくいっていないのだと思う。
丸ごとコンパイルしたつもりでも、RealCar.java が変更されていないので、
RealCar.class を作り直すのをコンパイラがサボってるんじゃないかな。
(間違ってたらごめん。)

手元の 1.4.2_04 の javac でやってみたら、確かに private なフィールドに
アクセスできてしまいます。
452デフォルトの名無しさん:04/05/30 21:29
質問です。

java2Dを使って図形を書いたりしているのですが、アファイン変換(AffineTransform)等を使って図形の擬似3D表示はできるでしょうか?

例えば、地図みたいなデータを変形して遠近感っぽくして、上から見下ろしているような擬似3D表現はできるでしょうか?
いろいろやっているのですが、一応変形はできましたが、遠近感ぽい感じ(奥に行くほど小さくなる感じ)ができないんですよね。

素直にjava3D使ったら簡単かもしれませんが、できれば2Dベースで作ったソフトをちょっといじって間単に3Dっぽく見せたいんです。
なにか良い方法があれば教えてください。
453デフォルトの名無しさん:04/05/30 21:33
すいません、ちょっと教えてください。
 CUI環境でリアルタイムでキー入力をしたいのですが。
 なにかそんなメソッドがありますか?
 ストリーム入力という方法だと、Enterまで入力待ちして
しまいます。
GUIでいうところのKeyListenerのaddと実装でやっているような。
C でいうところの key = kbhit(); /*だったっけ?*/ みたいな。
以下のプログラムの実行結果の理想は、ボタンを押さないと一定値が
際限なく標準出力されて、キーが押されている間はそれに対応する値が
同様に標準出力されるようにするつもりです。
ご理解いただけましたでしょうか?宜しくお願いいたします。

class Main
{
public static void main(String args[])
{
int key = 0;
while( true ) {
try {
key = System.in.read(); // ここで停止したくない。
} catch( java.io.IOException ex ) {}
System.out.println( key );
}
}
}

>>1の「すべてのクラス (Java 2 プラットフォーム SE v1.4.0)」(javadoc)を
丸ごとダウンロードしたいんですけど、どこだか忘れてしまいました。
以前は http://java.sun.com/j2se/1.4/ja/docs/ja/
で落とせたと思ってたんですけど記憶違いだったようです。
よろしくお願いします。
455デフォルトの名無しさん:04/05/30 22:02
>>455
ああ、そんな基本的なところに…
ありがとうございます。
"あ"をユニコードに変換すると%u3042という文字列になりますが、

%u3042を"あ"に変換するにはどうすればいいのでしょうか?
>>457
char型をなんdなとおもってるんだ
459デフォルトの名無しさん:04/05/30 22:53
>>457
public class Test {
public static void main(String args[]){
char c=(char)Integer.parseInt(args[0].substring(2,6),16);
System.out.println(c);
}
}
少しスレとはずれるかもしれませんが、アプレットを簡単に作るツールを
ご存知の方いらっしゃいませんか?
eclipse
NetBeans
463デフォルトの名無しさん:04/05/30 23:30
独習JAVAを3回読破した・・・JAVAはすでに、極めました。
次はどの言語にいけばいい?
464デフォルトの名無しさん:04/05/30 23:31
Stringクラスのオブジェクト(参照変数)をprintlnで表示すると
文字列が表示されますよね・・・

String str="Hello";
System.out.println(str);

結果
Hello


普通printlnに引数としてオブジェクト(参照変数)を渡すと
オブジェクトのハッシュコードが表示されるはずなのに・・・
一体どのような仕組みなのでしょうか
絵本でも読んでろ。
>>464 オブジェクトのハッシュコードが表示される仕様
じゃなくてオブジェクトのtoStringメソッドの返り値を
表示するのが仕様。String#toStringは自身の文字列を
返すようになってるから文字列が表示される。
467466:04/05/30 23:40
ごめん、println(Object obj)とは別にprintln(String str)が
あるから、ってのが正しいのか。別のメソッドだから結果も違う。
>>463
どの言語でもキミなら極められる
>>467
println(Object obj) も内部ではtoString()の結果を出力しているわけだが
466 で正しいと思うよ。
470デフォルトの名無しさん:04/05/30 23:49
初めて書き込みさせていただくSE1年目の者ですが、今回新人研修でJavaプログラムを学ぶことになりました。
自分はC言語を大学時代に学んだ程度で知識はあっても実際にプログラムを書いたことの無いレベルです。
今回は研修に少し先行したくて独学でJavaを学ぶのにお勧めの本があれば紹介していただきたく書き込みしました。
Javaの知識はまったくありません。 過去ログで同じような質問もあるとは思いますが、どうかアドバイスをお願いします。
>>470
ここできく前にとりあえず本屋で立ち読みすることをお勧めする。
自分のレベルに合ったのを選べ。
っていうか今の新人はそんなこともできんのか?

それともネタなのか?
20冊くらい読め。
473デフォルトの名無しさん:04/05/30 23:56
>>466
なるほど~、クラスごとにオーバーライドされてるtoStringが呼び出されるから
Stringクラスだと文字列が表示されるんですね

ありがとうございます!
474デフォルトの名無しさん:04/05/30 23:59
プログラムもかけないSEって成立するのか?
俺は、C C++ Java PHP Pealを、1週間でマスターしたぞ。
>>474
(ノ∀`)アチャー
>>474
厳密にはSEはプログラムを書けなくても成立する。
要求分析から外設レベルならプログラミング能力は(本当に)いらない。
ただしその場合にはどっかの段階で切換が必要だが。
外設に引っ張られた縦割り開発が横行しているところなら悲惨なことになるだろうな。
477デフォルトの名無しさん:04/05/31 00:06
>>470
>>471さんの言われる事が常識なのは分かります。
それでもここでお聞きした訳は、大型書店などで本を探すとどの本が売れているとか、多種の本を立ち読みしてみるも
デザインが読みやすいだとか、書き方が上手くて良い本に見える などでしか判断できず(無知な為)実際の重要なポイントの詳しさだとかまとめ方は読み始めて
理解してからでないと分からないと考えていたためです。
以前Cを勉強したときに知人にネットに書かれていた勉強本を紹介してもらい、それが分かりやすかったので今回も本選びの参考にと書かせていただきました。
だから、25冊くらい読め。
>>466
Javaあまり覚えてないんだけど
toStringメソッドは暗黙的に呼び出されるメソッドだっけかな?
480仕様書無しさん:04/05/31 00:13
>>474
そゆー話題はマ板でドゾー
>>477
プログラムの基礎からやりたいのなら「やさしいJava」
Cの知識があれば「明解Java」

をおすすめするよん
>>477
それはいつまで続けるつもりなの?
>>479
println() メソッドの内部でtoString()が呼び出される。
>483
println()内だけだっけ・・・?確かprintln以外でも
呼び出されたようなキオクが・・・実際に確かめてみよう
485デフォルトの名無しさん:04/05/31 00:28
>>477
>>482
このような質問をした事を不快に思われる方には変なレス申し訳ありませんでした。
本気でお勧めの本があれば知りたかっただけでの書き込みでしたので。
自分からはこの話題を広げる書き込みは控えようと思います、書き込みを見て何か良い本で紹介していただけるのがあれば
書き込みをお願いできたらありがたいです、少しのレスを返してくれた方々はありがとうございました。
486437:04/05/31 00:45
>>442
ありがとうございました。たすかりました。
487デフォルトの名無しさん:04/05/31 00:49
はじめまして

下記のプログラムをコンパイルしたら
Exception in thread "main" java.lang.NoClassDefFoundError: Hello/class
と出てしまい実行できません。

class Hello {
public static void main(String[] args) {
System.out.print("hello, world!");
}
}


そこで 1> に書かれているクラスパスの設定を参考に下記のように設定してみましたが
改善されません・・・。

作業はe:\javaで行ってます。

CLASSPATHは「.\;e:\java;C:\j2sdk1.4.2_04\lib\tools.jar;D:\oracle\ora92\jdbc\lib\classes12.zip」

今日からjavaをはじめたので基本的な質問になっていると思いますが宜しくお願いいたします。

public class Hello {
toString() は暗黙です
490デフォルトの名無しさん:04/05/31 00:57
ご指摘どおり下記のように変えたところ新たなエラー
が出てしまいました。

public class Hello {
public static void main(String[] args) {
System.out.print("hello, world!");
}
}


エラー
E:\java>javac E:\java\hello3.java
E:\java\hello3.java:1: クラス Hello は public であり、ファイル Hello.java で宣言
しなければなりません。
public class Hello {
^
エラー 1 個


どのようにすればよいのでしょうか?
ファイル名を Hello.java にする。
492デフォルトの名無しさん:04/05/31 01:09
いろいろ試しているうちにファイル名を変えていました
すみませんでした
ファイル名をHello.javaに戻してコンパイル/実行を行ったらまた同じエラーが出てしまいます。

E:\java>javac E:\java\Hello.java

E:\java>java E:\java\Hello.class
Exception in thread "main" java.lang.NoClassDefFoundError: E:\java\Hello/class


public class Hello {
public static void main(String[] args) {
System.out.print("hello, world!");
}
}

何度もすいませんが宜しくお願いいたします。
E:\java>java E:\java\Hello
>492
Eclipseを使うんだ
>>488

別に public じゃ無くていいんじゃ?
あ、そか。独り言か。
496デフォルトの名無しさん:04/05/31 01:17
E:\java>java E:\java\Hello
でも同様のエラーが出たのですが、

E:\java>java Hello
として実行したら実行できました。

なぜパスを指定してしまうと動かないのかはわからないのですが、
そこは調べてみます。

いろいろありがとうございました。
>>492
E:\java>java -cp E:\java Hello だ。
javaインタプリタに渡すのは.classファイルではなくクラスの名前だ。
public宣言したクラスの名前がファイル名として強要されるのはこのため。
>>496
java というコマンドに Hello というクラス名を引数として与えるんだ。
499デフォルトの名無しさん:04/05/31 02:06
470さんへ
 470さんは、話題をきりあげちゃいましたが、追い討ちになってし
まったらすいません。
 私は読んでないけど「独習Java」は概ね評価は高いらしいです。
 私は「やさしいJava」で基本的な文法を知る事が出来たと思います。
 「ステップアップラーニングJavaプログラミング アプリ編」も
悪くないかも、とか思います。
 数週間でいずれかの本のソースを全部打ち込んでいけば、少しくらいは
(なんとかなるかも)と思うことができるのではないでしょうか?
 私もあたなと50歩100歩の初心者レベルですので、それを鑑みたうえで
参考までに。もっとも471,478さんのいうのが圧倒的に正しいような気も
します。

500デフォルトの名無しさん:04/05/31 02:10
470さんへ
 470さんは、話題をきりあげちゃいましたが、追い討ちになってし
まったらすいません。
 私は読んでないけど「独習Java」は概ね評価は高いらしいです。
 私は「やさしいJava」で基本的な文法を知る事が出来たと思います。
 「ステップアップラーニングJavaプログラミング アプリ編」も
悪くないかも、とか思います。
 数週間でいずれかの本のソースを全部打ち込んでいけば、少しくらいは
(なんとかなるかも)と思うことができるのではないでしょうか?
 私もあたなと50歩100歩の初心者レベルですので、それを鑑みたうえで
参考までに。もっとも471,478さんのいうのが圧倒的に正しいような気も
します。

30冊とは言わんが入門書は少なくとも2冊は読め。
アルゴリズムの本は読んでおくように。
503デフォルトの名無しさん:04/05/31 06:29
Javaとネットワークの勉強を兼ねて、チャットのようなシステムを作っています。
サーバから複数のクライアントにデータを送信する場合はどうしたら良いのでしょうか?

1.マルチキャストというものを使ったら良いのか?
2.クライアントの数だけデータ送信を繰り返したら良いのか?
3.その他

どの方法が良いのかお教えください。
>>503
色々考えられるが、あなたがどんなC/Sの接続をしているかがわからない。
505503:04/05/31 07:07
現在はクライアントの数だけソケットを作ってC/Sの接続をしています。
他に良い方法があれば変更する予定です。
規模にもよるが、その方法だと2しか選択肢ないじゃないの。TCPで、LANじゃないんでしょ?
>>505
マルチキャスト
>>506
503は、
>Javaとネットワークの勉強を
してるんだぜ?
勉強なら、好きにすればいいじゃん、で終わりだね。
>>507
505のレスから何故マルチキャストという答えが出たのか是非お聞きしたい。
>>484
Swing方面使いまくり
JTableとかJTreeとかしらべてみそ
引数でObjectになっていればまずそれ
512デフォルトの名無しさん:04/05/31 10:23
SDK1.4のドキュメントにjavax.mailパッケージがないのはなぜでしょうか?
どこかに移動したんですか?
>>512
SDKっていうのはなんのSDKでしょうかね。
Java2SEのSDKには昔からjavax.mailはないはずだし。
JavaMailはJ2EEだし。
>>512
元から無いような気が。
JavaMailのドキュメントを見るがいい。

ttp://java.sun.com/products/javamail/index.jsp
515512:04/05/31 10:33
もしかしてJava2SEとJava2EEがあるのかorz
すまそ
>>512
もしかしなくてもあるさ。
がんがれ。
>>515
Java2MEもあるでよ。
関係性は「と」ではないがな
J2EE は J2SE がないと動かない
というか、J2EEは単にライブラリ集だからな。
520512:04/05/31 11:58
Sunのサイト見てきたらJava2EEもありますた。
J2EEはJ2SEに含まれてない拡張ライブラリで
その部分も使うなら同梱版を使えってこどでいいでしょうか?

MEは携帯とかの組み込み版みたいですね。
「Java(J2EE?)で掲示板を作成する」ってテーマの本を探しています。
本屋で以前見かけたんですが、
買おうと思って探したらなくなってました。
ネットで検索しても出てこないんです。

確か黄色の表紙だったと思うんですが、誰か知りませんか?

ひとくちでライブラリというのもまた安易だなぁ
>>521 これは? オレンジだけど
http://www.seshop.com/detail.asp?pid=4921

探すコツ:"ISBN" をキーワードに含めてググる
524521:04/05/31 12:36
>>523さん
これです!本当に助かりました。ありがとうございます。
表紙はオレンジでしたか。。。
525デフォルトの名無しさん:04/05/31 15:42
JDKで開発したプログラムをJREしかインストールしてないパソで動かす事
はできるのでしょうか?
>>525
なんのためのJREだか・・・
掲示板にJ2EEっていうかEJBは必要ないだろ・・・
5章までしか役に立たない予感。
>>525
できなくてどうするんだよ
JSP絡みのツールでlib/tools.jar中のコンパイラを呼び出してたりすると、
JREだけでは動かないね。
530デフォルトの名無しさん:04/05/31 18:31
最初に実行されるクラス(ファイル)を変更したいんですが。
どうするんですか?クラスパスをいじるのですか?
eclipseを利用してまつ。


eclipse 使うのやめた方がいいと思う。基礎知識なさすぎ・・・
一応教えておくけどな
1) 実行したいクラスをエディタで表示して「実行」「次を実行」「javaアプリケーション」
2) 「実行」「実行...」前までの設定を「構成」から選択し、メイン・クラスを変更、実行。
あとは Eclipse スレで聞け。相手にされないだろうけど。
>>530
実行するときだけ、コマンドプロンプトを使うのがいいんじゃねーか?
533530:04/05/31 18:51
サンクス。できました。あっけなくて情けない。
一時間悩んでました。 _| ̄|○
eclipse って、クラスパスとかの知識が全然無い俺でも
ある程度形の出来たアプリケーションが作れるので驚いた。

今日、初めてそのクラスパスやらをコマンドラインで通して
やる羽目になったのだけど、いかにエクリプスやネットビーンズが
めんどくさい初期処理を意識しないで扱える便利な環境かを、
まざまざと実感した。
>>529
jre+jreの再配布オプションに使えるsdkに収録されているファイルで問題ない

面倒だからsdk入れてる人がほとんどだけどな
>>534
ならNetBeansはもっと簡単で驚くだろうな
537デフォルトの名無しさん:04/05/31 21:51
Calendarクラスつかって、そのインスタンスからgetTimeで作った
Date型が出力する時間は現在の時間なんですが、set(Calendar.HOUR,3)
とかすると、なぜか妙な時間が出力されます。
3時を指定すると15時になってしまいます。

これはどうしてでしょうか?
妙なって、15時も3時だろ。
>>537
Calendar.HOUR は他に午前、午後の指定を必要とする12時間方式の指定だから。
24時間方式の指定をしたい場合は Calendar.HOUR_OF_DAY を使ってくらさい。
>>539
ありがとうございます。
APIリファレンスみたらシノプシスとかなんとか書いてあったので別名かなにか
とおもってそっちのほうはシカトしてました。
541デフォルトの名無しさん:04/05/31 22:47
最近のパソ(XP)なんかにはjavaって標準で搭載されてるんでしょか
ブラウザのではなくclassファイルが実行できるような
>>542
DELL とかのは Sun の JVM 入れてるみたいだけど。

ちなみに MSJVM がインストールされてても class ファイルを実行(?)できるんだけどね
質問です
JavaでGrep機能を作りたいのですが
ファイル内の文字列検索のとき
行単位ならBufferedReader
一文字ならCharなどで比較させて洗い出すことが出来ると思うのですが
複数の文字列の検索の仕方がよくわかりません。教えてください

また指定したフォルダ内の指定された拡張子のファイルを
五十音順にファイルが存在するだけ読み込むことは可能でしょうか?
(1)
indexOd
matches
正規表現


(2)
可能

(3)
調べもせず書き込むおまえは一生負け組
宿題丸投げ臭がぷんぷんと
高校生じゃ、しょうがないんじゃない?
宿題は宿題スレへ。
それくらいは小学生でもやってくれ。
549デフォルトの名無しさん:04/06/01 11:48
Windows2000 SP4 に JAVA 2 SDK 1.4.2_04 をインストールしようと何度も試みているんですが、インストールに
失敗してしまいます。オンラインでインストールもやってみましたが、ダメでした。
パッケージに問題があると言われるんです。他に英語のエラーメッセージも出るので検索をいろいろかけてみても対処方法が見当たりません。
ファイルはMD5で壊れていないことを確認しました。何が原因と考えられるでしょうか?

どうしてもインストールできなかったら、LINUXとのデュアルブートにしてそっちに入れようかと…。ううう。
なんでエラーメッセージここに書かないかな。氏ねよ。
>>549
ダウンロードしたファイル名とエラー内容を書け。
とりあえずWindowsUpdateで全部パッチあててからもう一回やってみ。
552549:04/06/01 12:45
>>550
>>551

そうですね。エラーについて書かなければ。
どうもすみません。

ダウンロードしたファイルは j2sdk-1_4_2_04-windows-i586-p.exe です。
エラーメッセージは以下の分が出ます。

「jre\lib\chaesets.jar:Old File not found. However,a file of the same name was found.No update done since file contents do not match.」

「JAVA(TM) Update はシステムの更新に失敗しました。」

「このWindows インストーラパッケージには問題があります。セットアップの一部として実行されるプログラムは正しく完了しませんでした。サポート担当者またはパッケージのベンダに問い合わせてください。」

Windows Update はしてありますが、Microsoft VM の更新ができないというメッセージが出て VM のパッチだけ当てられません。
Microsoft VM 自体は入っています。
>>549
同じファイルがあって邪魔って書いてあるじゃねーか
jre以下をどかせ
554549:04/06/01 14:08
>>553
\j2sdk1.4.2_04\jre 以下を一旦どかせたら無事インストール完了しました。^^;
どかせたものをその後元に戻したらVMのバージョン情報もかえってきました。
ありがとうございます。
>>554
せっかく綺麗にインストールされた物の上に、元からあった妖しげな物を上書きしてどうする。
アホか?
ここは辛口なインターネットですね
ココイチレベルに換算すると2辛くらい。
まだぬるい。