トップページ⇒tech
1001コメント322KB

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

■ このスレッドは過去ログ倉庫に格納されています
00011NGNG
JAVA初心者の方はこちらのスレで質問をしましょう。そして誰か教えてあげてください。

なお、ソースを貼るときには、半角空白が消える仕様のため、タブ1つを全角空白2つに
置換してから投稿しましょう。雑誌や宿題などの疑問を質問するときは出展を明記した
ほうが解決が早いです。

関連情報は >>2-10 あたりにあります。 (一部 dat落ちやHTML化待ち)


JavaScriptの質問はWeb製作板へどうぞ。
web制作管理
http://pc.2ch.net/hp/

パソコンの基本操作に関しては、PC初心者板や、各OS板などで質問しましょう。
パソコン初心者@2ch掲示板
http://pc.2ch.net/pcqa/

上級者の方で教える技術が無い方は下記スレでダベりましょう。
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/


基本的にsage進行でおねがいします。
0403デフォルトの名無しさんNGNG
作成したスレッドの中で起きたエラーを、スレッドの作成元へ返すには、どうすればいいでしょうか?
0404デフォルトの名無しさんNGNG
>>403
パラメータとして呼び出し元の参照を受け取っておく。
0405デフォルトの名無しさんNGNG
>398
 メニューボックスから「二重丸」か「五芒星」か「文字列」を選んで、クリックした場所にそれぞれ二重丸や五芒星や文字列を書くアプレットを考えます。
再描画とかがあるので、できた二重丸クラスや五芒星クラスや文字列クラスを配列に格納していくとします。
でもappletのpaint()メソッドで、いちいち
public void paint(Graphics g){
for(int i = 0;i<myVector.size();i++){
if(myVector.elementAt(i) instanceof TwinCircle){
((TwinCircle)myVector.elementAt(i)).drawTwinCircle(g);
}else if(myVector.elementAt(i) instanceof Pentagon){
((Pentagon)myVector.elementAt(i)).drawPentagon(g);
}else if・・・
とかやって「自分で」クラスによって処理を分岐させるのは面倒ですね。クラスが多くなると氏にたくなります。
pubilc interface drawable{
public void draw(Graphics g);
}というインタフェースを定義してやれば、
二重丸クラス、五芒星クラス、文字列クラスがそれぞれこのインタフェースをimplementsして、
drawメソッドを上書きしておくことで、メインのアプレットのpaintメソッドは
public void paint(Graphics g){
for(int i = 0;i<myVector.size();i++){
((drawable)(myVector.elementAt(i)).draw(g);
}
}
で済みます。つまり自動的にjavaがクラスに応じてそのクラスのdrawメソッドを呼び出してくれます。
これはインタフェースでなくクラスの継承でもできますが、例えば座標と半径を持つ円クラスを親クラスとして、二重丸クラスと五芒星クラスには半径rを適用できますが、文字列クラスには半径rは意味がありません。
振る舞いの大きく異なるクラスはインタフェースで結んだ方が良いです。

0406PolymorphismNGNG
>>398,>>402
あのな・・・多態性を忘れているぞ。
インタフェースの最大の意義である多態性を説明しなけりゃどうにもならん。
関数ポインタっーか関数オブジェクトもそれ抜きには始まるまい。


・・・「多態性」でググってみてくれ。長すぎる話になるから。
その上で分からない部分を聞きに来てくれ。スマヌ。
0407デフォルトの名無しさんNGNG
>例えば座標と半径を持つ円クラスを親クラスとして、二重丸クラスと五芒星クラスには半径rを適用できますが、文字列クラスには半径>rは意味がありません。

って言うか、

文字列は円である。

はばかげていると思わないかい?
0408PolymorphismNGNG
正直、多態性をマスターできたら初学者卒業だから、あと一歩だ。
理解すれば、なるほど!と膝を打つから。
0409デフォルトの名無しさんNGNG
>>399
よく考えれば分かると思うけど、
戻り値が不定なメソッドを作ったとしても
利用のしようが無い。
0410初心者君。(俺も独習Java)NGNG
>>409
抽象メソッドをオーバーライドしてメソッドを作る場合って引数とか戻り値を変えないと
意味が無いように思えるんですが。
う〜んイマイチ理解できましぇん。
0411デフォルトの名無しさんNGNG
>>410
そうすると多態と言うオーバーライドの目的の一つが使用できなくなります。
その考え方ならオーバーライドなんて無くてもいい。全部隠匿すればいいんだから。
0412デフォルトの名無しさんNGNG
>>410
抽象メソッドを作る時点で
役割が決まってるんだから
返り値も当然決まってる筈だろ?
0413デフォルトの名無しさんNGNG
>>410
つぅか継承も否定することになりそうな。
0414398NGNG
>405
なんとなくは分かったような気がするのですが、
分からない部分がうまく言葉にならないので、明日一日考えてみます。
皆様、ありがとうございます。
多態性についても検索してみます。
0415デフォルトの名無しさんNGNG
数値や文字がたくさん入ったTXTデータからそれを読みこんで
たとえば「DATE」というのを見つけたらその次の数値を表示させるなど)
をしたいんですが教えてもらえませんでしょうか
0416HNGNG
//ピースイメージ生成
//--------------------
for (i=24;i>=0;i--) {
image[i]=Image.createImage(20,20);
image[i].getGraphics().drawImage(imgPic,
-20*(i%5),-20*(i/5),
Graphics.LEFT|Graphics.TOP);

わかりますか??(>_<)
0417デフォルトの名無しさんNGNG
>>400

// 書き込み
Hashtable table = new Hashtable();
…
ObjectOutputStream out = null;
try{
  out = new ObjectOutputStream(new FileOutputStream("hoge.ser"));
  out.writeObject(table);
} finally {
  try{if(out != null) out.close();}catch(IOException ex){/* */}
}

// 読み込み
ObjectInputStream in = null;
Hashtable table = null;
try{
  in = new ObjectInputStream(new FileInputStream("hoge.ser"));
  table = (Hashtable)in.readObject();
} finally {
  try{if(in != null) in.close();} catch(IOException ex){/* */}
}

まぁ例外処理はお好きなように。
0418デフォルトの名無しさんNGNG
>>415
とりあえず StringTokenizer を使ってみろと言っておく。
0419デフォルトの名無しさんNGNG
JavaSDK1.4.1ってApplet作れないんですか?
ClassNotFoundになっちゃうんですけど。
0420デフォルトの名無しさんNGNG
>>416
Image は抽象クラスなので BufferedImage(20,20,BufferedImage.TYPE_INT_RGB)
でも使え。
あと、Graphics.drawImage の引数4個版の第四引数はImageObserverなので変。


内容的にはimgPicの画像を使った16パズル系のゲームのピースイメージのロード。
ピースは20×20のサイズで元絵は100×100。
5×5ピースだが24個しか無いのは右下の1ピースは移動用に開けてある為。
0421デフォルトの名無しさんNGNG
>>419
アプレットタグが間違ってないか?
0422デフォルトの名無しさんNGNG
>>419
appletviewer で ClassNotFound になるか確認すれ
0423デフォルトの名無しさんNGNG
>>415
そのデータ見せてみ
0424デフォルトの名無しさんNGNG
>>419
javac -version 1.1 Hoge.java
で試してみ
0425424NGNG
javac -target 1.1 Hoge.java
だったよ。すまそ
0426デフォルトの名無しさんNGNG
Objectの配列が格納されたVectorから、Objectの配列の配列を得るのにイイ方法ってどうよ?
つまり
Vector v = new Vector();
while (hoge.hasNext()){
  Object[] oa = new Object[hoge.getSize()];
  for(int i = 0; i < oa.length; ++i){
    oa[i] = hoge.getData(i);
  }
  v.add(oa);
  hoge.next();
}
みたいな感じでVectorにObject[]流し込むんだけど、これをObject[][]で得たいのよ。

いまのところ
Object[] oa = v.toArray();
Object[][] oaa = new Object[oa.length][];
for(int i = 0; i < oa.length; ++i){
  oaa[i] = (Object[])oa[i];
}
ってやってるんだけどね。
0427デフォルトの名無しさんNGNG
>>426
Object[][] array = v.toArray( new Object[v.size()][] );
ではダメなのか?
0428415NGNG
レスありがとうございます
>>423
--sample.txt---
〜
SampleA
1 32.1 23.4
2 11.2 21.2
SampleB
1 15
2 24
3 55
・・
・・
--------
みたいなデータでこのtxtからSampleBを呼んでそこの次の行からの二行ずつの数値を
配列に取り込みたいんです。
どうかよろしくお願いします。
0429デフォルトの名無しさんNGNG
>428
LineNumberReader使って、1行づつ読んでみればいかがでしょうか。

LineNumberReader reader
= new LineNumberReader( new FileReader("sample.txt"));

String str = reader.readLine();

みたいな感じでreader.readLine()で1行づつとってこれるから。
とりあえず、SampleBと一致するまでは簡単でしょ。
次の行からは適当にパースしてみ。
0430デフォルトの名無しさんNGNG
BufferedReader にしとけ
0431恐れながら・・・NGNG
java . lang . Object にある「 lang 」ってどういう意味ですか?
英和辞典で調べてもありませんでした・・・。
よろしくお願いします。
0432デフォルトの名無しさんNGNG
>>431
言語
0433431NGNG
>>432
どうもありがとうございます。
languageの略だったのか・・・鬱だ
0434デフォルトの名無しさんNGNG
>>431
languageのabbrriationじゃないっすかね?
0435デフォルトの名無しさんNGNG
まちがい。
abbreviation
0436デフォルトの名無しさんNGNG
>>434-435
遅レスかつ自分の知識をひけらかしたい&間違い。
0437デフォルトの名無しさんNGNG
>>436
マァマァ。
みんなそんなもんさ。
0438デフォルトの名無しさんNGNG
>>431
languageですよ。
0439415NGNG
レスありがとうございます
>>429,230
readLine()を使うのは分かるんですがそこから先が良く分かりませんでした。
やりたいこととしては、SampleBまでtxt内容を読まずにすすみSampleBの書いてある行を見つけたらそこから次の行から
処理を行えるようにしたいんです。
この「SampleBを見つけ出す」ってのはどうすればいいんでしょうか
厨房な質問ですみません。
0440デフォルトの名無しさんNGNG
内容を読まずにどうやって SampleB の位置を見つける気?
どこかにインデックスでも作っておかない限りそんなことは出来ないよ?
0441デフォルトの名無しさんNGNG
>439 じゃ何らかのBufferedReader bfは作ったとして。
import java.util.StringTokenizer;

・・・
boolean isDataHeaderFound;
int line,counter;
int dataList[] = new int[MAX];
String tmp = new String();
StringTokneizer st;
while(!(s = bf.readLine(line)) = null){
  st = new StringTokenizer(s);
  if(!isDataHeaderFound){
   if((st.nextToken()).equals("SampleB")){//文字列の比較は等号を用いない
    isDataHeaderFound = true;counter = line+1;
   }
  } else {
dataList[line-counter] = Integer.parseInt(st.nextToken());
   //Integerクラスのstaticメソッド、parseIntを呼び出している。
}
}
・・・
line++;
}
0442デフォルトの名無しさんNGNG
おセロのゲームのを作っているのですが、
ユーザーからの入力(次の指して)を待つときは
ポーリングするのがいいのでしょうか?

他にいい方法があれば教えてください。
0443426NGNG
御疎レスすまそ
Object[][] array = (Object[][])v.toArray( new Object[v.size()][] );
でイケたよ。
さんくす。引数付きのtoArrayってこうやって使うんだね。
0444426NGNG
>>443は>>427ね

>>442
イベントは使えんの?
0445デフォルトの名無しさんNGNG
>>442
イベントドリブンに頼ってみる。
0446デフォルトの名無しさんNGNG
メンバ関数はメソッドって言うけど
データメンバはなんていうの?
0447デフォルトの名無しさんNGNG
>>446
C++で言うメンバ変数はフィールド。広義のプロパティでもあるかも。
0448446NGNG
φ(・・)ほうほう
0449デフォルトの名無しさんNGNG
>>446
インスタンス変数
0450デフォルトの名無しさんNGNG
もともと「メソッド」っていうのは、オブジェクトにメッセージを
送ったときに、実行されるコードをさしてたんだよね。
オブジェクトがどのクラスのインスタンスかによって、実行される
コードが違うから。
だから「メソッド探索」っていうんだよ、「メソッド選択」じゃなくて。
探索して探し当てたものがメソッドだから。
メンバ関数を「メソッド」って言うようになったのは、Javaが出てきてからの気がする。
0451デフォルトの名無しさんNGNG
>イベントドリブン
イベントドリブンの意味はわかるんですけど、
オセロの入力にどう使うんですか?

マウスイベントが発生するまで
ポーリングするというのが、
一番普通に思いつく方法なんですが・・・・
他にいいのありますかねー?

この方法は、ソースコードが汚いので、気分的になんかいやなんですよね。
0452デフォルトの名無しさんNGNG
>>451
イベントドリブンとか、ポーリングとか、意味を本当に理解していますか?
イベントドリブンはイベントが発生するまで待っているという方式。待っている間、
居眠りしていようが、別の仕事をやっていようが構わない。
それに対して、ポーリングは常にこちらから相手のイベント送出があったかどうかを、
聞き回る方式です。通常、イベントを発生する相手は複数あり、これを巡回して注文を
聞き回り、なければ次の相手…、と進め、一巡したら(場合によっては少しインタバルを
置いて)また初めからご用聞きに回る…というやりかたですよ。
このイベントが発生したらこのプロセスが動き出すという仕掛けになっているのが、
イベントドリブンという方式です。OOの基本概念の一つと言ってもいい。これを
きちんと理解しないと、Javaは使いこなせませんよ♪
0453デフォルトの名無しさんNGNG
>>450
Java以前からも言ってた気が。
0454デフォルトの名無しさんNGNG
>>431
language
0455デフォルトの名無しさんNGNG
>>454

>>436
0456デフォルトの名無しさんNGNG
>>455
lang くらいで知識をひけらかせていると考えるヤツって、どういう知識を他にもってんだ?
0457デフォルトの名無しさんNGNG
>452
そりゃそうなんだろうけど、ロウレベルでの処理を考えてしまうと
そんなんどうでもいいや、という感じだよね。
おいら、あんまり抽象的な考えかたって出来ない…。
0458デフォルトの名無しさんNGNG
>>457
>ロウレベルでの処理を考えてしまうと
Javaで考える必要ないと思うぞ?
0459457NGNG
>>458
0460457NGNG
ごめん。途中で送ってしまった。
>>458
もちろん考える必要はないですし、むしろ考えるべきではないですね。
でも、考えてしまう自分が嫌だというか。
0461デフォルトの名無しさんNGNG
Java の GUI 使ったゲームでポーリングなんかしたら画面が
表示されないぞ。駆動はイベントディスパッチャーにまかせとけ。
0462デフォルトの名無しさんNGNG
ボーリングゲームは作れないんですか?
0463デフォルトの名無しさんNGNG
つか、Listener使わないでマウスイベント拾う方法って知らない。
知らなくてもいい事という意識で調べてもいない。
実際、あるのか?そんな方法。
0464デフォルトの名無しさんNGNG
>>463
JDK 1.0 AWT Programming
0465デフォルトの名無しさんNGNG
>>464
あれもどうかとおもうけどね。
0466デフォルトの名無しさんNGNG
Javaで平仮名→片仮名変換やら半角全角変換やらは、どうやったらできるですか?
0467デフォルトの名無しさんNGNG
>>466
unicode表を読もう。
0468466NGNG
>>467
らくらくぽんでやりたい。
0469デフォルトの名無しさんNGNG
>>468
らくらくぽんでやってください。
0470466NGNG
>>469
やりかた知らない?
イガぴょんのライブラリってどうなん?
0471デフォルトの名無しさんNGNG
>>470

>>467
0472デフォルトの名無しさんNGNG
カマって君は放置してくれる?
0473デフォルトの名無しさんNGNG
>>472
OK。>>466は放置で。
0474420NGNG
あ、5×5ピースあるじゃん・・・何見てるんだ俺。
0475415NGNG
レスありがとうございます
>>441
それを元にいろいろ試してみたんですが上手くいきませんでした。
できればここをおしえてもらいたいです。
while((s=f.readLine())!=null){
で一行ずつ読んでいって
その一行にSampleAという文字がなければ次の行、
もしあればそこでwhile文を抜けたいんです。
この書き方を教えてもらえませんでしょうか。
441さんのやつで一応やったんですがどうもエラーがでてしまいました。
よろしくお願いします
0476デフォルトの名無しさんNGNG
JavaはC厨でも身につけられますか?
0477デフォルトの名無しさんNGNG
>>476
配列はポインタのインクリメント以外で参照したくないぜー!とか言う人間には向いてない。
0478デフォルトの名無しさんNGNG
>>477
私は添え字も使いますよ!
0479478NGNG
とりあえずJavaの本を買ってくるか・・・・
0480デフォルトの名無しさんNGNG
>>478
って言うかごちゃごちゃ言う前にさわればよかろう。
必要なものは無料だ。
時間は腐るほどあるだろう。
0481デフォルトの名無しさんNGNG
>>480
本が高いので・・・・
0482名無しさんNGNG
URLに有るパラメータで、
ttp://localhost/test.html?name=xx
このnameをtest.html上に設置しているAppletで取得したいのですが、
こういうことはできるんでしょうか?
appletタグにparamをつければ動作できるのですが、
呼び出し元からパラメータを送り込んでやりたいのです。
アドバイスください。よろしくお願いいたします。
0483デフォルトの名無しさんNGNG
>>482

JavaScript PHP CGI。。。
0484デフォルトの名無しさんNGNG
>>482
CGI
0485デフォルトの名無しさんNGNG
>>482
Servlet/JSP
0486デフォルトの名無しさんNGNG
Rudy Perl
0487デフォルトの名無しさんNGNG
>>482
1. アプレットに getHogehoge(String) というメソッドを付けておく
2. アプレットタグに <APPLET ... NAME="aaa" MAYSCRIPT> を付けておく
3. JavaScript で name の値を取得し、aaa.setHogehoge(name) で設定する
0488HNGNG
//ピースイメージ生成
//--------------------
for (i=24;i>=0;i--) {
image[i]=Image.createImage(20,20);
image[i].getGraphics().drawImage(imgPic,
-20*(i%5),-20*(i/5),
Graphics.LEFT|Graphics.TOP);

わかりますか??(>_<)
0489デフォルトの名無しさんNGNG
かなり恥ずかしい質問ですんません
servletを作ろうとしているんですけど
どうやって環境を構築していいんか訳わかんなくなってしまいました
サンのHPにいってJ2SEとJ2EEをそれぞれ落としてきて
インストールしたんですけど、いざjavax.servletをインポート
してコンパイルしようとするとエラーでこけちゃいます
servletの開発環境としてJ2EEとJ2SEのほかにまだ必要な
ものがいるんでしょうか?
どなたかアドバイスください。よろしくおねがいします
0490デフォルトの名無しさんNGNG
>>488
お前、まったく同じ書き込みを昨日もしたろ。氏ねや糞ボケ。
0491デフォルトの名無しさんNGNG
>>489
自分の分をわきまえろ。
0492420NGNG
>>488
>>420, >>474 で答えた俺は小一時間説教しようと思うんだが?
0493中坊NGNG
すみませんが,質問があります
’@’を’( ’に変換し、問題の番号を挿入するものを
作ろうとしています。
実際作って色々と試しているのですが,エラーがでてはかどりません。
簡単なプログラムですが、なにぶん中坊なのでよくわかりません。
すいませんが、アドバイスをください。
よろしくおねがいします。
プログラムはこれです。

import java.io.*;
public class Ren1{
public static void main(String args[]){


String str= new String("794年@(平安京)が建てられる1192年@(鎌倉幕府)樹立");
StringBuffer str2= new StringBuffer(str);
int cnt=1;

for(int i=0;i<str2.length();i++){
if((str2.charAt(i))=='@')
str2 =str2.replace('@','(');
str2= str2.delete (i,i+1);
str2= str2.insert(i+1,cnt);/*問題番号を挿入する*/
cnt++;
}

System.out.println(str2);

System.out.println(str2);}
}

0494デフォルトの名無しさんNGNG
Linux に Tomcat を入れたいんですけど、
J2SE を入れた後に TOMCAT を入れなければならないのですか?

あ、Apache は DSO が ON で入ってます。
0495デフォルトの名無しさんNGNG
>>494
しつこいな、クソ人間。
0496デフォルトの名無しさんNGNG
クソはおめーだろ
0497デフォルトの名無しさんNGNG
米海軍の艦上戦闘機F-14 TomcatはVG可変翼装備のスタイリッシュな機体です。
また、映画「TOP GUN」ではTom Cruiseらが操縦する機体として登場しました。
比較的人気のある機体であり、例によって私もF-14フリークです。
0498デフォルトの名無しさんNGNG
まずは検索

JSPに関するQAスレッド
http://pc3.2ch.net/test/read.cgi/tech/1014905560/
Servlet/JSPのフレームワークを語るスレ
http://pc3.2ch.net/test/read.cgi/tech/1001950590/
0499デフォルトの名無しさんNGNG
>>489
このスレに同じ質問があったはず
0500デフォルトの名無しさんNGNG
>>493
色々と問題(StringBufferのメソッドを理解してない)とかあるが、一番の問題は
どういう出力を望むのかイマイチ分からないこと。

794年(1(平安京)が建てられる1192年(2(鎌倉幕府)樹立

と表示したいのか?


初心者としては StringBuffer を使っているところは評価したい。
StringBufferに関してはAPIのヘルプを熟読すれば自力でなんとかなると思う。
APIは日本語版のヘルプがあるのでなめるように読みふけること。
0501デフォルトの名無しさんNGNG
>>493
凡ミスとしてループ内の文字検索 if((str2.charAt(i))=='@') の効果範囲がおかしい。
「@を見つけた時だけ」行わせたい処理なのに、その他の文字を見つけたときも
実行している。

しかし、これはコンパイルでは発見されない先走ったアドバイス。
まずはStringBufferを完璧に使いこなせるように色々とやってみよう。

コンパイルが通った後で、頭を絞ってデバッグするのだ〜
0502中坊NGNG
501さん,502さんアドバイスありがとうございます。
出力結果は
794年(1平安京)が建てられる1192年(2鎌倉幕府)樹立
この様な感じにしたいんですが
やってみると中々出来ないんですが、奮闘中です。

■ このスレッドは過去ログ倉庫に格納されています