【初心者】Java質問・相談スレ4【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
00011
NGNGなお、ソースを貼るときには、半角空白が消える仕様のため、タブ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進行でおねがいします。
0358デフォルトの名無しさん
NGNGぼくはあんまり処理を増やしたくないのだ。
(flag&0x01)!=0x00
といった処理や、
flag=0x01
といった処理が何万とあるとき、
楽に書ければいいんだけど。
0359デフォルトの名無しさん
NGNGJAVAしか知らないプログラマには JAVAは最適だよ
0360デフォルトの名無しさん
NGNGちょっとしたビットフィールドなら byte なり int なり使ってくだ
さい。大量のビットフィールドを扱いたいなら BitSet でも使って
ください。符号なし byte が int で代用できない理由は? そもそも
何が聞きたいんですか?
0361デフォルトの名無しさん
NGNGたってしまうだろ。そこが問題なのだよ。
例えば通信で8ビットでデータを送る場合場合
十進で128以上の値は符号拡張されるだろ。
0362デフォルトの名無しさん
NGNGJavaって32ビット以下のプリミティブ値って実行時には
32ビットをアロケートされるんだよね?プログラム上では
intにキャストして全部計算といても問題なし。
byteなんて普通はI/O前後ぐらいでしか使わんとおもうし、
使う必要ない。
・・・と思っていたんだけど、おいらの勘違いですか?
0363デフォルトの名無しさん
NGNG0364デフォルトの名無しさん
NGNG結局最初の byte → int と最後の int → byte で "& 0xFF" って書くのが
面倒という話で良いわけ?
0365デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/990949654/l50
350前後からかな。
途中で方向が変わってるけど。
0366デフォルトの名無しさん
NGNG>32ビットをアロケートされる
ということを知らない人がえらい苦労を自ら買っているわけで、
自業自得です。仕様書ぐらい嫁。
0367デフォルトの名無しさん
NGNGないのが不満だったな。「符号なしと符号付で byte と tiny に分けてくれ」
って言いたかったが、どこに主張して良いか分からなかった。C/C++ 時代に
築き上げたバイナリ操作の小技がほとんど使えなくなってしまったんだからな。
しかしあえて Java 流儀でやり始めてみると、そんな小技は大したもんじゃ
なかったと思うようになった。
まぁあれだ、つまりは言語移行時のはしかのようなもんだ。
0368っていうか
NGNG0369デフォルトの名無しさん
NGNGBugP(以下略)
プリ(以下略)
そんなに めんどくさいなら呼(以下略)
0370デフォルトの名無しさん
NGNG懐かしーっすね
0371デフォルトの名無しさん
NGNGさっきから見てるとごねてるのはCを使いこなしすぎた人々ですな。
JavaにCの面影を探してるよう。
「1代目は本立てにもっと細かな彫刻を施してたぞ。2代目はクソ。」
お前はその彫刻が無いと本を立てられんのかと。
むしろ、彼の作った伸縮時代で漬け物石にもなるという高機能は無視なのか。
みたいな。
0372デフォルトの名無しさん
NGNGあー、そこだそこだ。俺が byte のほかに tiny 型が欲しいって言ったの (藁
0373デフォルトの名無しさん
NGNGいや、Cを使いこなした人だったら、
ゴネてないでちゃっちゃとプリプロセッサ書いちゃいます。
ゴネてるのは(以下略)
0374デフォルトの名無しさん
NGNG>>307
市ね
0375デフォルトの名無しさん
NGNG煽りはスピードが命。
0376デフォルトの名無しさん
NGNGこのスレくらい全部読め
過去スレまでとはいわんから
0377デフォルトの名無しさん
NGNGツールとかいらないんですか?
0378デフォルトの名無しさん
NGNG>何にやればいいんでしょう?
基本的にはコンピュータ
0379デフォルトの名無しさん
NGNG0380デフォルトの名無しさん
NGNG0381デフォルトの名無しさん
NGNG定規があるとなおよい。
0382デフォルトの名無しさん
NGNGサンプルプログラムがいっぱい載ってるやつが良いと思う。
役に立たない本に限って、ごたくならべて、うんちくたれてる。
と、釣られてみるテスト。
0383デフォルトの名無しさん
NGNGJAVA Program in a Nutshellか?
0384デフォルトの名無しさん
NGNGアプレットから勧めるべきだろうか?
じゃあJava2は避けさせた方がいいのだろうか?
0385デフォルトの名無しさん
NGNG間を取ってJAppletだ!
0386デフォルトの名無しさん
NGNG・DOS窓の正しい使い方が載っている
・PATH / CLASSPATH の正しい説明が載っている
・コンパイル時・実行時のトラブル対策が載っている
とか。
>383
それは入門書じゃないと思います…
>384
アプレット本だから悪いって事はないと思うんだけどな。
まぁ、HelloWorld ぐらいはやっといてもらいたい気もするが。
File だ、Stream だ、なんてのは次のレベルだと思うし。
Java2 かどうかは関係ないっしょ?
最近の本はどっちのイベントモデルで書いてあるんでしょうかね?
0387デフォルトの名無しさん
NGNG・・・
AudioClip ac = new AudioClip(getDocumentBase(),"test.mid");
ac.play();
・・・
とやってみたんですが、
ふつうのmidiプレイヤーで再生して出る音量と違って、Maxボリュームにしても
殆ど聞こえない!です。ボリュームを管理するにはどうすればいいか教えてください。
アプリの方には独自のクラスとボリューム調節用メソッドがあるようですが、、、
0388デフォルトの名無しさん
NGNGJAVA Program in a Nutshellは入門書だと思ったのだが・・・
0389デフォルトの名無しさん
NGNGちょっと待て。AudioClipはインタフェースではないか。
new出来るのかと小一時間・・・
少なくとも
AudioClip ac = applet.getAudioClip(getDocumentBase(),"test.mid");
ではないのか?
正確なコードを切り張りして再挑戦。
0390訂正
NGNGならば正確には
AudioClip ac = getAudioClip(getDocumentBase(),"test.mid");
だな。
0391デフォルトの名無しさん
NGNG判明。
× getDocumentBase()
○ getCodeBase()
理由
getDocumentBase() はアプレットの載っているHTML文書のファイル
のurlを返している。
とか書いてたが、試しにやってみたら・・・音が出た・・・
とするなら、HTML文書のurlにtest.midが無い、もしくは名前間違い。
ではないのか?例外起きないから。
import java.applet.*;
import javax.swing.*;
public class AudioApplet extends JApplet {
AudioClip ac;
public void init() {
System.out.println("getCodeBase() : "+getCodeBase());
System.out.println("getDocumentBase() : "+getDocumentBase());
ac = getAudioClip(getDocumentBase(),"test.mid");
}
public void destroy() {
ac = null;
}
public void start() {
ac.play();
}
public void stop() {
ac.stop();
}
}
0392デフォルトの名無しさん
NGNG君には、このスレがあるから大丈夫ね。
「入門xx」買って、とりあえず始めなさい
まずはそれから
0393デフォルトの名無しさん
NGNG「入門酔拳」?
0394386
NGNG早速レスありがとうございます。書き込みはミスでした(getAudioClip()でした。)
音は出るんですが、Maxボリュームでやっと聞こえる程度で困ってます。
今のところ"MIDIファイルをMML形式に変換していじる"しか思いつきましぇん。
import java.applet.Applet;
import java.awt.*;
import java.awt.event.*;
import java.applet.AudioClip;
public class audio2 extends Applet{
AudioClip ac;
Button bt1;
public void init(){
add(bt1 = new Button("play"));
bt1.addActionListener(
new ActionListener(){
public void actionPerformed(ActionEvent e){
ac.play();
}
}
);
ac = getAudioClip(getDocumentBase(),"hikari.mid");
}
}
0395387
NGNG0396デフォルトの名無しさん
NGNG>MIDIファイルをMML形式に変換していじる
ここまでできるならMIDIファイル直接いじれよ・・・。
0397377
NGNG0398独習Java勉強厨
NGNG説明してくれる勇者はいませんか?とくにインターフェース。
空っぽのメソッドだけ宣言していったい何になるのかがどうしても理解しがたいんです。
あとでそれを継承したインターフェースやらクラスやらでメソッドを記述するなら
大元で空っぽのメソッドなんて書かなくてもいいじゃないかと思ってしまいます。
そしてもうひとつ質問が。
定数として扱うものはクラスの先頭で宣言しなくてはいけないものですか?
public static void main(String args[])よりも前に記述してあったので少し気になった次第です。
0399初心者君。
NGNG抽象メソッドの宣言は、
public abstract void method();
で良いんですよね。
この場合戻り値がvoidなのでこのメソッドをオーバーライドするメソッドも
戻り値を無しにしなくてはいけないのですか?
public abstract method();
では何故いけないのですか?
0400デフォルトの名無しさん
NGNGハッシュ表に読み込むにはどうしたらいいですか。
できれば、具体的に教えて欲しいのですが。
0401とか。。。
NGNGいけない。戻り値もオーバライドの一部で戻り値のみかえるのはいけない。戻り値を省略できるのはコンストラクタのみ。
0402とか。。。
NGNGインタフェースはジャバにない関数ポインタの替わりにつかえるっしょ。
後それなりの多重継承用。多重継承のあるC++からなぜ削られたかは
EffectiveC++っちゅう本を読むとそのやらしさ、危険さはわかる。
0403デフォルトの名無しさん
NGNG0404デフォルトの名無しさん
NGNGパラメータとして呼び出し元の参照を受け取っておく。
0405デフォルトの名無しさん
NGNGメニューボックスから「二重丸」か「五芒星」か「文字列」を選んで、クリックした場所にそれぞれ二重丸や五芒星や文字列を書くアプレットを考えます。
再描画とかがあるので、できた二重丸クラスや五芒星クラスや文字列クラスを配列に格納していくとします。
でも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は意味がありません。
振る舞いの大きく異なるクラスはインタフェースで結んだ方が良いです。
0406Polymorphism
NGNGあのな・・・多態性を忘れているぞ。
インタフェースの最大の意義である多態性を説明しなけりゃどうにもならん。
関数ポインタっーか関数オブジェクトもそれ抜きには始まるまい。
・・・「多態性」でググってみてくれ。長すぎる話になるから。
その上で分からない部分を聞きに来てくれ。スマヌ。
0407デフォルトの名無しさん
NGNGって言うか、
文字列は円である。
はばかげていると思わないかい?
0408Polymorphism
NGNG理解すれば、なるほど!と膝を打つから。
0409デフォルトの名無しさん
NGNGよく考えれば分かると思うけど、
戻り値が不定なメソッドを作ったとしても
利用のしようが無い。
0410初心者君。(俺も独習Java)
NGNG抽象メソッドをオーバーライドしてメソッドを作る場合って引数とか戻り値を変えないと
意味が無いように思えるんですが。
う〜んイマイチ理解できましぇん。
0411デフォルトの名無しさん
NGNGそうすると多態と言うオーバーライドの目的の一つが使用できなくなります。
その考え方ならオーバーライドなんて無くてもいい。全部隠匿すればいいんだから。
0412デフォルトの名無しさん
NGNG抽象メソッドを作る時点で
役割が決まってるんだから
返り値も当然決まってる筈だろ?
0413デフォルトの名無しさん
NGNGつぅか継承も否定することになりそうな。
0414398
NGNGなんとなくは分かったような気がするのですが、
分からない部分がうまく言葉にならないので、明日一日考えてみます。
皆様、ありがとうございます。
多態性についても検索してみます。
0415デフォルトの名無しさん
NGNGたとえば「DATE」というのを見つけたらその次の数値を表示させるなど)
をしたいんですが教えてもらえませんでしょうか
0416H
NGNG//--------------------
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// 書き込み
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とりあえず StringTokenizer を使ってみろと言っておく。
0419デフォルトの名無しさん
NGNGClassNotFoundになっちゃうんですけど。
0420デフォルトの名無しさん
NGNGImage は抽象クラスなので BufferedImage(20,20,BufferedImage.TYPE_INT_RGB)
でも使え。
あと、Graphics.drawImage の引数4個版の第四引数はImageObserverなので変。
内容的にはimgPicの画像を使った16パズル系のゲームのピースイメージのロード。
ピースは20×20のサイズで元絵は100×100。
5×5ピースだが24個しか無いのは右下の1ピースは移動用に開けてある為。
0421デフォルトの名無しさん
NGNGアプレットタグが間違ってないか?
0422デフォルトの名無しさん
NGNGappletviewer で ClassNotFound になるか確認すれ
0423デフォルトの名無しさん
NGNGそのデータ見せてみ
0424デフォルトの名無しさん
NGNGjavac -version 1.1 Hoge.java
で試してみ
0425424
NGNGだったよ。すまそ
0426デフォルトの名無しさん
NGNGつまり
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デフォルトの名無しさん
NGNGObject[][] array = v.toArray( new Object[v.size()][] );
ではダメなのか?
0428415
NGNG>>423
--sample.txt---
〜
SampleA
1 32.1 23.4
2 11.2 21.2
SampleB
1 15
2 24
3 55
・・
・・
--------
みたいなデータでこのtxtからSampleBを呼んでそこの次の行からの二行ずつの数値を
配列に取り込みたいんです。
どうかよろしくお願いします。
0429デフォルトの名無しさん
NGNGLineNumberReader使って、1行づつ読んでみればいかがでしょうか。
LineNumberReader reader
= new LineNumberReader( new FileReader("sample.txt"));
String str = reader.readLine();
みたいな感じでreader.readLine()で1行づつとってこれるから。
とりあえず、SampleBと一致するまでは簡単でしょ。
次の行からは適当にパースしてみ。
0430デフォルトの名無しさん
NGNG0431恐れながら・・・
NGNG英和辞典で調べてもありませんでした・・・。
よろしくお願いします。
0432デフォルトの名無しさん
NGNG言語
0433431
NGNGどうもありがとうございます。
languageの略だったのか・・・鬱だ
0434デフォルトの名無しさん
NGNGlanguageのabbrriationじゃないっすかね?
0435デフォルトの名無しさん
NGNGabbreviation
0436デフォルトの名無しさん
NGNG遅レスかつ自分の知識をひけらかしたい&間違い。
0437デフォルトの名無しさん
NGNGマァマァ。
みんなそんなもんさ。
0438デフォルトの名無しさん
NGNGlanguageですよ。
0439415
NGNG>>429,230
readLine()を使うのは分かるんですがそこから先が良く分かりませんでした。
やりたいこととしては、SampleBまでtxt内容を読まずにすすみSampleBの書いてある行を見つけたらそこから次の行から
処理を行えるようにしたいんです。
この「SampleBを見つけ出す」ってのはどうすればいいんでしょうか
厨房な質問ですみません。
0440デフォルトの名無しさん
NGNGどこかにインデックスでも作っておかない限りそんなことは出来ないよ?
0441デフォルトの名無しさん
NGNGimport 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ユーザーからの入力(次の指して)を待つときは
ポーリングするのがいいのでしょうか?
他にいい方法があれば教えてください。
0443426
NGNGObject[][] array = (Object[][])v.toArray( new Object[v.size()][] );
でイケたよ。
さんくす。引数付きのtoArrayってこうやって使うんだね。
0445デフォルトの名無しさん
NGNGイベントドリブンに頼ってみる。
0446デフォルトの名無しさん
NGNGデータメンバはなんていうの?
0447デフォルトの名無しさん
NGNGC++で言うメンバ変数はフィールド。広義のプロパティでもあるかも。
0448446
NGNG0449デフォルトの名無しさん
NGNGインスタンス変数
0450デフォルトの名無しさん
NGNG送ったときに、実行されるコードをさしてたんだよね。
オブジェクトがどのクラスのインスタンスかによって、実行される
コードが違うから。
だから「メソッド探索」っていうんだよ、「メソッド選択」じゃなくて。
探索して探し当てたものがメソッドだから。
メンバ関数を「メソッド」って言うようになったのは、Javaが出てきてからの気がする。
0451デフォルトの名無しさん
NGNGイベントドリブンの意味はわかるんですけど、
オセロの入力にどう使うんですか?
マウスイベントが発生するまで
ポーリングするというのが、
一番普通に思いつく方法なんですが・・・・
他にいいのありますかねー?
この方法は、ソースコードが汚いので、気分的になんかいやなんですよね。
0452デフォルトの名無しさん
NGNGイベントドリブンとか、ポーリングとか、意味を本当に理解していますか?
イベントドリブンはイベントが発生するまで待っているという方式。待っている間、
居眠りしていようが、別の仕事をやっていようが構わない。
それに対して、ポーリングは常にこちらから相手のイベント送出があったかどうかを、
聞き回る方式です。通常、イベントを発生する相手は複数あり、これを巡回して注文を
聞き回り、なければ次の相手…、と進め、一巡したら(場合によっては少しインタバルを
置いて)また初めからご用聞きに回る…というやりかたですよ。
このイベントが発生したらこのプロセスが動き出すという仕掛けになっているのが、
イベントドリブンという方式です。OOの基本概念の一つと言ってもいい。これを
きちんと理解しないと、Javaは使いこなせませんよ♪
0453デフォルトの名無しさん
NGNGJava以前からも言ってた気が。
0454デフォルトの名無しさん
NGNGlanguage
0455デフォルトの名無しさん
NGNG>>436
0456デフォルトの名無しさん
NGNGlang くらいで知識をひけらかせていると考えるヤツって、どういう知識を他にもってんだ?
0457デフォルトの名無しさん
NGNGそりゃそうなんだろうけど、ロウレベルでの処理を考えてしまうと
そんなんどうでもいいや、という感じだよね。
おいら、あんまり抽象的な考えかたって出来ない…。
0458デフォルトの名無しさん
NGNG>ロウレベルでの処理を考えてしまうと
Javaで考える必要ないと思うぞ?
■ このスレッドは過去ログ倉庫に格納されています