【初心者・ネタ】Java質問・相談スレ【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGお前らとりあえずがんがってください
そして誰か教えてください。
関連スレ
初心者無視! Java相談室 その9
http://pc.2ch.net/test/read.cgi/tech/1021555964/
調べようとする優秀な奴は↑へどうぞ。
0446デフォルトの名無しさん
NGNG0447デフォルトの名無しさん
NGNGpublic class Thankyou {
public static void main(String[] argv) {
BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
String str = null;
while (true) {
try {
str = in.readLine();
} catch (IOException e) {
e.printStackTrace();
break;
}
if (str != null && str.equals("こんにちは")) {
System.out.println(str);
}
if (str == null || str.equals("quit")) {
break;
}
}
}
}
あたしはてっきりこういうことかと。
0448429
NGNG一行で「こんにちわ/ありがとう/ごめんなさい」をコマンドラインから
入力(文字列の間に/で区切って)後、何個目?と表示して「3」と入れたら
「ごめんなさい」
と表示する感じです。
>>446
頑張っていました・・・
0449デフォルトの名無しさん
NGNGpublic static void main(String[] args){
if(args[0].equals("1"))
System.out.println("こんにちは");
else if(args[0].equals("2"))
System.out.println("ありがとう");
else if(args[0].equals("3"))
System.out.println("さようなら");
}
}
0450デフォルトの名無しさん
NGNGわかった。
1行入力は良いな? BufferedReader#readLineあたりを使う。
String line = reader.readLine();
とか。
次はbeginを0にしといて、
end = line.indexOf('/', begin);
で1文字ずつ'/'の位置を探す。
endが負なら'/'がbegin以後に無いと言うことなので、
line.substring(begin) で文字列が切り出せる。
endが0以上なら、
line.substring(begin, end)で次の'/'の前までを切り出せる。
begin = end + 1; としてこれを繰り返す。
0451429
NGNG中学の宿題で明日提出期限なんです。
いくら考えてもわかりませんでした。。。
0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNG0454452,453
NGNG思いっきり前に出てるじゃんか。
StringTokenizer
0455デフォルトの名無しさん
NGNG真剣な質問ならこたえたるでー。(寝てなければ)
0456デフォルトの名無しさん
NGNGせっかく436で答えが出てるのになんで、
>いくら考えてもわかりませんでした。。。
なんて答えが返ってくるのかと問い詰めたい。
0457429
NGNGStringTokenizerを使って解決できました。
朝からネットでいろいろ検索してもわからなかったです。
StringTokenizerを使うというのは常識なのでしょうか・・・
0458デフォルトの名無しさん
NGNGStringTokenizerの機能=特定の区切り文字でトークン(それ以上分解できない最小の単語に)分解する。
問題はStringTokenizerによって解決できるだろ?
0459デフォルトの名無しさん
NGNG罰として449のをコピペして提出しる。
0460>>435
NGNG教えてくれたみんなにありがとうと表示したらどうなんだ?
0461デフォルトの名無しさん
NGNG429=435=457じゃねーのか?
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNGAのスレッドの一部になるの?
BのスレッドにZのインスタンスの参照渡して
そのインスタンスを操作したらAのスレッドとして動作するの?
0464デフォルトの名無しさん
NGNGこれって職業病?
0465デフォルトの名無しさん
NGNGA スレッドでZクラスのインスタンスを作成しようとすると、
その処理は A スレッドで行われます。
A スレッドで作成したインスタンスを B スレッドに渡す、というのは、
両方のスレッドからアクセスできる変数に入れる、ということでしょうか。
0466デフォルトの名無しさん
NGNGボタンにaddActionListenerして、
ボタンが押されるとActionListenerが
呼ばれるのは良いんだけど
ボタンと一緒に配置してるテキストフィールドとか
チェックボックスの値をActionListener側から
参照する方法はあるんですか?
0467466
NGNG0468デフォルトの名無しさん
NGNGいろいろなやり方があるよ。
でも、簡単なのは内部無名クラスとして定義することだね。
0469466
NGNGそうですね。
いくつかサンプルは全部内部無名クラスですね
でも、anyclass$1.classみたいなのが出来るのを
出来るだけ避けたいので外部クラスで処理してみたいです。
0470デフォルトの名無しさん
NGNG単に、anyclass$1.classみたいなのが出来るのを避けるためであれば、
元クラスの方にボタンクリックで実行したいメソッドを用意しておき、
ActionListenerクラスでは、コンストラクタで元クラスのthisを受け
取るようにして、actionPerformedでは、その元クラスのメソッドを
呼び出す、なんていう方法でいいんじゃないの。
0471466
NGNGそうですね。そうでいいんだと思います。
ちょっとわからないんですが、
>ActionListenerクラスでは、コンストラクタで元クラスのthisを受け
っていうのはどうやるんですか?
0472デフォルトの名無しさん
NGNGActionListenerをaddするためにnewしてるよね。
例えば、ActionListenerクラスをHogeListener、元クラスをMotoClass
とすると、HogeListenerのコンストラクタを
public HogeListener(MotoClass moto){
this.moto = moto;
}
とかする。当然、HogeListenerにはMotoClass moto;っていうフィールド
があるのが前提。
で、MotoClassの中で、addActionListenerしているところで、
hogeButton.addActionListener(new HogeListener(this));
等とするわけさ。
0473デフォルトの名無しさん
NGNG言い忘れたけど、単に元クラスにimplements ActionListenerして
元クラスにactionPerformedを定義すれば、anyclass$1.classみた
いなのはできないけど、それは分ってやってるんだよね。
0474466
NGNGありがとう
できました。
>>473
あ!本当ですね。
ただ、ソースの見栄え的に
明確にMVCを分離するには
ActionListenerは別クラスに
定義すべきだと思いました。
0475デフォルトの名無しさん
NGNG割り当てたいときは、Actionを使うと楽だよ。
0476デフォルトの名無しさん
NGNGあっ、楽だね〜。
setEnabled したら全部に適応されるし。
0477デフォルトの名無しさん
NGNG0478デフォルトの名無しさん
NGNGAudioSystemクラスでは再生できないようなのですが。
JNIを使うというのはナシで。
0479デフォルトの名無しさん
NGNG画面クリアの変わりに背景画像drawImageすればよいんでない?
>478
PureJavaでは無理。
JSDLでも使いませう。
ttp://www.libsdl.org/intro.jp/whatcanitdo.html
0480デフォルトの名無しさん
NGNGファイル名で知りたいんですが可能でしょうか?
外部のツールでかまわないのですが。
0481デフォルトの名無しさん
NGNG演習があって、やさしい(学術書や専門書じみたやつでない)やつが
いいんですけど。
0482481
NGNG0483デフォルトの名無しさん
NGNGザ・Javaはクソなので注意。
まぁ、あの地味な表紙じゃ買わないか。
0484デフォルトの名無しさん
NGNG入門ソフトウェアシリーズの
Java言語が初心者にも見やすい。
が必ずもう一冊買うはめになる罠
0485477
NGNGそれは1枚絵にしろということですか?
0486デフォルトの名無しさん
NGNG0487デフォルトの名無しさん
NGNGホストOS側で工夫しないと無理。
0488デフォルトの名無しさん
NGNG標準のAPIだけでは無理。
PureJavaでなくてよければ↓
DirectInputとかのラッパー
ttp://www.hardcode.de/jxinput/
Java3DのInputDeviceとしても使えるらしい。
あと、JavaGameProfileにも入力用のAPIが入るらしい。
0489デフォルトの名無しさん
NGNGJavaGameProfile
http://jcp.org/jsr/detail/134.jsp
0490デフォルトの名無しさん
NGNGよく
drawImage(img,0,0,this);とかaddActionListener(this);
と色々なところで使われますが、一体このthisは何者なんでしょうか?
その都度に必要なインスタンスの参照を渡すという解釈でよろしいのでしょうか?
0491デフォルトの名無しさん
NGNG拡張した部分は有効なのでしょうか?
また、有効ではない場合、スーパークラスからまたサブクラスのオブジェクトに
戻すと元のサブクラスだったときに設定してあった変数の中身などは
有効になのでしょうか?
0492デフォルトの名無しさん
NGNG× その都度に必要なインスタンス
○ カレントオブジェクト
0493デフォルトの名無しさん
NGNG>スーパークラスからまたサブクラスのオブジェクトに戻す
キャストするってこと?
0494デフォルトの名無しさん
NGNGpublic class Parent{
}
public class Child extends Parent{
public void showMessage(){
System.out.println("OK");
}
}
public class ExtendsTest{
public static void main(String[] args){
Parent child = new Child();
((Child)child).showMessage();
}
}
0495デフォルトの名無しさん
NGNG試してみました。分っかりました!
スーパークラスのインスタンスになってる時はダメで、
また元に戻せば有効になるんですね!
ありがとうございました!!
>>492
ちなみにカレントオブジェクトってどういうのですか?
クソ素人野郎なので分からないことばかりですみません。
>>493
そのとおりです。
0496デフォルトの名無しさん
NGNGカレントオブジェクト:そのキーワード(this)が実行されているオブジェクト。
簡単に言うなら、その"this"という単語から、外に向かって
最初に行き着いたクラス(から作られたインスタンス)
だから、490の例でいえば、そのカレントクラスは前者:ImageObserver
後者:ActionListener を実装しているから、そのような扱いが出来るってこと。
で、thisの使い方は、ここで説明した「カレントオブジェクトの参照」の他に
もう一つあるのでちゃんと調べておくと良いです。
0497デフォルトの名無しさん
NGNGclass Parent{
public void showMessage(){
System.out.println("BAD");
}
}
class Child extends Parent{
public void showMessage(){
System.out.println("OK");
}
}
public class ExtendsTest{
public static void main(String[] args){
Parent child = new Child();
child.showMessage();
}
}
0498デフォルトの名無しさん
NGNGなんとなくですが、わかりました。
どうもありがとうです。
0499デフォルトの名無しさん
NGNG以下のコードがよく分からないので質問します。
//コード
JButton convertTemp;
...
convertTemp.addActionListener(this);←ココが分かりません。
...
public void actionPerformed(ActionEvent event) {
...
}
//終わり
convertTemp.addActionListener(this);を実行するとなぜactionPerformed
を呼び出して実行するのでしょうか?
addActionListenerのプロトタイプは
addActionListener(ActionListener l)となっています。
「this」というのは、オブジェクト自身のことですよね?なぜ明示的にactionPerformedを
呼び出していないのに、それが実行されるのですか?
http://java.sun.com/docs/books/tutorial/uiswing/mini/thirdexample.html
0500デフォルトの名無しさん
NGNG>なぜ明示的にactionPerformedを
>呼び出していないのに、それが実行されるのですか?
この場合、actionPerformedを呼び出すのは、JVMのイベントディスパッチ
スレッド。つまり、ボタンが押されたら自動的に呼び出されるという
こと。
また、このクラスは、implements ActionListenerと定義されていて、
public void actionPerformed(ActionEvent event) を定義しているの
で、立派にActionListenerとして働くことができる。
0501499
NGNGどうもです。
うーむ、オブジェクト指向の基礎が抜けているので、もう一度復習してみます。
それとイベント関連のメカニズム、スレッドが分かってないんでそれも勉強します。
ありがとうございやした。
0502デフォルトの名無しさん
NGNG...
}
public class B{
...
}
public class Main{
...
}
のようなプログラムをコンパイルするためには
イチイチソースを3つに分けて
javac A.java
javac B.java
javac C.java
のようにコンパイルしなくてはならないのですか?
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNGMain.java
をコンパイルするとpublicなclassやinterfaceは
A.java B.javaのように定義しろって言われました。
ですが、AというクラスでクラスBのインスタンスを生成し、
クラスBではクラスA型の変数を宣言しているので
切り離すことが出来ないんで、どうしたらいいんだろうと思いまして。。。
0505デフォルトの名無しさん
NGNG他人の時間を平気で浪費しても罪悪感をもたないタイプだ。
0506デフォルトの名無しさん
NGNG0507デフォルトの名無しさん
NGNGもう一度やってみます。
0508デフォルトの名無しさん
NGNGインスタンス化できないなんてことはない
文法がおかしいだけだろ
0509デフォルトの名無しさん
NGNGコンパイルできました。
申し訳ありませんでした。
ありがとうございました。
0510
NGNG質問ですが、
br は BufferedReader のクラス変数
str は String のクラス変数
であってますでしょうか?インスタンス変数ではないんでしょうか?
import java.io.*;
class Sample
{
....public static void main(String srgs[]) throws IOException
....{
........System.out.println("整数を入力して下さい。");
........BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
........String str = br.readLine();
........int num = Integer.parseInt(str);
........System.out.println(num + "が入力されました。");
....}
}
0511デフォルトの名無しさん
NGNGその前に main()にしれ
0512デフォルトの名無しさん
NGNGハァ?
0513デフォルトの名無しさん
NGNG0514デフォルトの名無しさん
NGNGハァ?
0515デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGローカル変数です。
0517デフォルトの名無しさん
NGNG0518
NGNGクラスか、インスタンスか、と聞いて、ローカルと答えるのはなぜ?
0519
NGNG0520デフォルトの名無しさん
NGNG0521
NGNGんじゃ なんですか?
0522デフォルトの名無しさん
NGNGスレが腐ってるから馬鹿しか いないぞ 質問者!!!!!
0523 510
NGNGbr は BufferedReader のクラス変数
str は String のクラス変数
じゃなくて
br は BufferedReaderクラス の変数
str は Stringクラス の変数
でした。ありがとうございました。
0524デフォルトの名無しさん
NGNGあ?くろーとさんはうちじゃおことわりだよ!
0525デフォルトの名無しさん
NGNGよし、次
0526デフォルトの名無しさん
NGNGAd = As
な感じのAlphaCompositeが欲しい。
おまいら こんな時どうしますか。
0527422
NGNG現在クソスレを立てる仲間を集めています。
目的は家庭用ゲーム板にクソスレを立てまくることです。
その数に限りはなく、同時に立てたいのです。
一応目標は、150を目指しています。
そこで相談なのですが、クソスレを立てる仲間を募集しています。
現在、15名近くしかいなくて、同時に150立てるには絶望的です。
必ず一人一個というルールでやるので、150人ほしいのです。(規制くらわないために)
もし私の目的に応じてくれる方がいたら助かります。
では、最後に立てる状況までについて説明します。
1 まず、このコピペをさまざまな所に貼ってください。
2 そして、決行時間5月30日の午前0時、つまり夜の12時に家庭用ゲーム板にクソスレを1個立ててください。
それで終了です。
なお、このレスに対する返答は要りません。
皆が、各自の意思で行ってください。
必ずあなたと同じ考えを持ち、クソスレを立ててくれる方は現れます。
やってはいけないことも、皆でやれば怖くありません。
一緒に家庭用ゲーム板を破壊しましょう!
では、5月30日の午前0時から祭りが始まることを祈りつつ、私、「フウリン」の話を終わらせていただきます。
みなさん、よろしくお願いいたします。
0528デフォルトの名無しさん
NGNG0529仕様書無しさん
NGNGbr は BufferedReaderクラスのインスタンスもしくはオブジェクト
str は Stringクラスのインスタンスもしくはオブジェクト
と普通は言うと思うぞ
もしくは
br、strはmainメソッドのローカル変数
だ。細かいようだが言葉は正しく使わないとあとで泣きを見ることになる
0530デフォルトの名無しさん
NGNG参照変数の事を「オブジェクト」と呼ぶと痛い目に遭うぞ。
Vector v = new Vector();
Data d = new Data();
d.setA(1);
v.add(d);
d.setA(2);
v.add(d);
↓
javaは値渡しであることだけ頭に入れとくと、
「Aが”1”と”2”のDataオブジェクトを追加したはずなのに、
Aが”2”のDataオブジェクトが二つ入ってる!」
と言うことになる。
俺は意地でも「〜オブジェクトへの参照」と呼ぶようにしている。
0531デフォルトの名無しさん
NGNGDataオブジェクトは”A”というメンバを持つと思ってくれ。
0532 510
NGNG詳しい説明感謝です。その辺の説明を編集して本にはさんでおきます。
そういう意味で解釈しているんですけど、本に書いてある言葉が間違っているのかな?と質問させていただきました。
本に間違った説明があることってよくありますからね。
0533HOE
NGNGメンバはC/C++系の呼び名と思われ
JavaはプリミティブTypeを除けば「ポインタ(Refference型)」しかないわけだから
オブジェクトは参照に決まっている。だから >>530 の
>>俺は意地でも「〜オブジェクトへの参照」と呼ぶようにしている。
は正しい。
C++でいえば
BufferedReder *br = new BufferedReader();
と書くところを、クラスオブジェクトはReffer型しかないにきまっているJavaは わざわざ * をつかわないだけ。
BufferedReader br = new BufferedReader()
brはBufferdReaderクラスのインスタンスオブジェクト。
0534HOE
NGNGC/C++
ポインタ dから参照するときに d->setA(1);
Java
実体から参照するときは d.x
何度も言うがJavaはプリミティブ型を除けばポインタ(参照)しかない。
わからなければ また質問しれ 管理age
0535デフォルトの名無しさん
NGNGよく、
BufferedReader in =
new BufferedReader(new InputStreamReader(System.in));
のようなコードを見かけます。ところが、最後にin.close();をしている本と
していない本があります。一般に、ファイルを開く場合なら、私の知る限り100%
closeしているのに、System.inのときは、たいていの教科書がcloseしていない
のです。
今のところ、動作に問題はないのですが、不安です。
System.inの場合もcloseした方がよいのでしょうか、それとも不要なのでしょうか?
よろしくお願いします。
0536デフォルトの名無しさん
NGNG使わないなら明示的に閉じてよし。
0538デフォルトの名無しさん
NGNG0539デフォルトの名無しさん
NGNGバッファってなんですか?
0540デフォルトの名無しさん
NGNG>>536が「不要」と言い切る理由は、System.inは別に閉じる必要がないということ?
今見たら、結城さんの本ではたしかにcloseしてるんだよね。
彼は几帳面ということなのかもね。
あと関連して、普通の本では、バッファ付きのWriterでもあんまりフラッシュして
ないような気がするけど、closeするときにフラッシュされると考えてよいのかな?
横からスマソだけど、教えてください。
0541デフォルトの名無しさん
NGNG「細かいようだが言葉は正しく使わないとあとで泣きを見ることになる」
「と呼ぶと痛い目に遭うぞ。 」
実際に泣いたり、痛い目にあうことは無いと思うけど、この台詞は
鋭く正しいことを言っていると思います。
人に何かを聞いたりするときに、自分の質問の仕方を細かく注意されたときは、
そこに重要な「自分が理解していない何か」があることがあります。
以下長文。しつこく説明されたい人用。
int a = 5;
int b = a;
このとき、b には、a に入っていた値 (5) がコピーして入れられます。
この後、a の中に入っている値を変更しても、b の中身は変化しません。
StringBuffer sb1 = new StringBuffer("abc");
StringBuffer sb2 = sb1;
ここではもともと sb1 に入っていた「 StringBuffer オブジェクトへの参照 」がコピーされて
sb2 に代入されます。コピーされたのはオブジェクトではなく、オブジェクトへの参照です。
この時点で、sb1 と sb2 は、同じオブジェクトを参照します。
sb2.append("def");
この処理は厳密に言えば、sb2 の中身を変更しているのではなく、sb2 の中身である
「 StringBuffer オブジェクトへの参照 」を利用して、参照されている先のオブジェクトそのもの
を変更しているのです。
sb1 = null;
このようにすると、sb1 の「中身を書き換える」ことになります。
もともと sb1 が指していた StringBuffer オブジェクトそのものにはなんの影響も与えません。
単に、
「sb1 はもともと指していた StringBuffer オブジェクトを指すのをやめた、参照するのをやめた」
ということです。
sb1 はあのオブジェクトを参照するのを止めましたが、まだあのオブジェクトを参照している
参照型変数がありました。 sb2 です。
sb2 = new StringBuffer("another string");
こうすると、sb2 に入っていた(あの)「 StringBuffer オブジェクトへの参照 」は上書きされ、
別な「 StringBuffer オブジェクトへの参照 」が代入されます。
こうなると、sb1 も sb2 も最初の(あの)オブジェクトを参照するのをやめたわけですから、
(あの)オブジェクトに含まれていた "abcdef" という文字列を取り出すことは出来ません。
どの参照型変数も参照していない(あの)オブジェクトは、(そのうち)ガベージコレクトされます。
0542541
NGNGもう使わないとはっきりしたオブジェクトがあれば、それを参照しないように、null を代入し、
ガベージコレクトの対象になるようにするべきです。使わないのにいつまでも参照を保持している
とき、その参照を「廃れた参照」と言います。メモリリークの1つです。
例えば Vector クラスでは、remove 系メソッドが呼ばれた際には、削除する要素以降の要素を
前に詰めて要素数のカウンタを減らすだけではなく、いらなくなった要素部分に null を代入し、
廃れた参照を保持しないようにしています。その部分には、
/* to let gc do its work */
// Let gc do its work
のようなコメントがあります。
Vector に 100 の要素を追加し、99 の要素を remove すると、内部の配列のサイズは 100 のまま
で、最初の要素以外は全て null で埋められます。null ばかりの長い配列を保持させておくのも、
メモリリークと言えます。このような場合は、trimToSize() を呼ぶとよいでしょう。
0543HOE
NGNG>>535
ガーベジコレクタというのを知っているな?これはオブジェクトのメモリ領域を開放する際、
そのオブジェクトのファイナライザ(Ffinalizer)が呼び出されるというものだ。
C++でいうところの、デストラクタに当たる。(コンストラクタの逆だな)
しかし、Javaのfinalizerはいつ実行されるかわからないのだ。
「じゃあ、close()しなくてもいいんだ?」
そうじゃない。
メモリをたくさん積んでいる状態ではなかなかガーベジコレクタが起動しないからfinalizerが
動く前に一度にオープンするファイルの数を超えてしまうかもしれない、、、
用意されているfinalizerを当てにしないで明示的にclose()する*必要*があるのだ。
誰かがかたづけてくれるからと言って闇雲に捨ててばかりではいけないのだ。
0544HOE
NGNG> 不要。
> 使わないなら明示的に閉じてよし。
JVMは以下を意識して実装することを推奨している。
ファイナライザの中でthisをstaticなフィールドに代入してしまうとガーベジコレクタの対象外となる。
よっていつまでたっても close()されない。だからメモリは解放されずにずっとそのままだ。
ちゃんとclose()してね
0545デフォルトの名無しさん
NGNGhttp://yougo.ascii24.com/gh/05/000542.html
■ このスレッドは過去ログ倉庫に格納されています