【初心者】Java質問・相談スレッド108【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/11/07(水) 22:39:09JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。http://pc10.2ch.net/hp/
過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
http://www.wikiroom.com/java/
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。
よくある質問
・「コマンドまたはファイル名が違います」
「'javac' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
「Exception in thread "main" java.lang.NoClassDefFoundError: 」
http://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
【初心者】Java質問・相談スレッド107【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1192666106/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝のう存じます。
次スレは>>980あたりで。
0002デフォルトの名無しさん
2007/11/07(水) 23:12:000003デフォルトの名無しさん
2007/11/08(木) 08:21:210004デフォルトの名無しさん
2007/11/08(木) 10:11:330005デフォルトの名無しさん
2007/11/08(木) 11:32:490006デフォルトの名無しさん
2007/11/08(木) 12:23:200007デフォルトの名無しさん
2007/11/08(木) 12:58:290008デフォルトの名無しさん
2007/11/08(木) 13:12:060009デフォルトの名無しさん
2007/11/08(木) 14:40:32なんのジャンルでもいいです><;
色々試すのがすきなんです><
0010デフォルトの名無しさん
2007/11/08(木) 15:41:38String str;
BufferedReader br=new BufferedReader(new FileReader("./input.txt"));
BufferedWriter bw=new BufferedWriter(new FileWriter("./output.txt"));
while((str= br.readLine())!=null){
int a=0;
while(str.length()>a){
bw.write(str.charAt(a++)+"\n");
}
}
bw.close();
br.close();
}
001110
2007/11/08(木) 15:45:28それを一文字ずつバラバラにして、一行に一文字だけ書く形式にしてoutput.txtに出力しています。
ここからoutput.txtに出力されたものをソートして同じものを一箇所に固めて、
そこから何回その文字が使われたかお数えて大きい順に表示するプログラムを作りたいのですが、特にソート部分どうするべきでしょうか?
0012デフォルトの名無しさん
2007/11/08(木) 15:51:28BufferedReader r = new BufferedReader(new FileReader("output.txt"));
String s;
while ((s = r.readLine()) != null) {
list.add(s);
}
Collections.sort(list);
0013デフォルトの名無しさん
2007/11/08(木) 16:43:40この辺りがいいんじゃない
ケチった分だけ後で跳ね返ってくる
0014デフォルトの名無しさん
2007/11/08(木) 17:09:13変更しようとしているのですが、この場合、マウスモーションリスナーのe.getを使い、
if-else文である領域に来たら、変えなくてはいけないのでしょうか?
また、frameに文章を書く場合、g.drawstring以外に書く方法はないでしょうか?
この場合、マウスカーソルが文章上にある時のカーソルにならないので、他の方法があれば
その方法を用いたいと考えています。
ご回答、よろしくお願いします。
0015デフォルトの名無しさん
2007/11/08(木) 17:16:160016デフォルトの名無しさん
2007/11/08(木) 17:22:200017デフォルトの名無しさん
2007/11/08(木) 17:51:330018デフォルトの名無しさん
2007/11/08(木) 18:46:55これといって作れるプログラムなんてなかった。そこの会社の人に課題で
社員管理プログラムをつくれっていわれたんだけど、そんときに
一緒に与えてもらった本が「Java工作プログラミング(ピアソンエデュケーション)」
今はもう売っていないだろうけど、ああいう本が初心者にはいいとおもう。
0019デフォルトの名無しさん
2007/11/08(木) 18:51:26Java じゃないし CODE COMPLETE に統合されちまったが。
0020デフォルトの名無しさん
2007/11/08(木) 19:33:11それぞれのクラスのstatic初期化子が、どのような順番で呼び出されるかは不定なのでしょうか?
static初期化子で、他のクラスのstaticな変数などを参照するのは危険な行為でしょうか?
C++では危険なのでやってはいけなかったと記憶しています
0021デフォルトの名無しさん
2007/11/08(木) 19:39:35ソースで書いた順序。
0022デフォルトの名無しさん
2007/11/08(木) 19:44:44スタティックイニシャライザはクラスがロードされるタイミングで動きます。
クラスがロードされるタイミングは不確定ですが、少なくともクラス A からクラス B の
値を参照する直前には B はロードされます。
A と B のスタティックイニシャライザ内で互いの static 値を参照しあっていて、どちらが
先に動くかで動きが変わることは考えられます。つまりそんな設計すんなと。
0023デフォルトの名無しさん
2007/11/08(木) 19:45:07Javaは動的にロードするから。
0024デフォルトの名無しさん
2007/11/08(木) 19:48:01同じクラス内の中のstaticは、ソースで書いた順ということがわかりました。ありがとうございます
>>22-23
流石に「参照しあう」のは無理ですし、馬鹿らしいですね
AからBを参照する場合は、Bが先に動的ロードされるわけですか。なるほど
C++の「非ローカルなstatic変数の初期化」とは違い、かなり安全性が高いですね
0025デフォルトの名無しさん
2007/11/08(木) 19:50:25class A{
public static final boolean flag;
static{
System.out.println("B is " + B.flag);
flag = true;
}
public static void main(String[] args){}
}
class B{
public static final boolean flag;
static{
System.out.println("A is " + A.flag);
flag = true;
}
public static void main(String[] args){}
}
実行結果
C:\Documents and Settings\ore>java A
A is false
B is true
C:\Documents and Settings\ore>java B
B is false
A is true
0026デフォルトの名無しさん
2007/11/08(木) 19:54:260027デフォルトの名無しさん
2007/11/08(木) 19:56:30違う違う。
A がロード済みで、A の処理を実行している途中で B への参照が現れた場合、B が
まだロードされていなければそこで B をロードする。まぁクラスローダーの実装にも
よりけりだが、少なくとも参照直前までに B がロードされていることは保障されている。
0028デフォルトの名無しさん
2007/11/08(木) 19:58:26復唱の仕方が悪かったようです。理解してます。ありがとうございます
static
{
a = 5;
b = B.z; // ここで、Bがまだ未初期化ならBがロードされる
}
ってわけですよね。
0029デフォルトの名無しさん
2007/11/08(木) 20:05:57int a, b;
...
a+=b;
というコードがJITでネイティブコードに変換された場合、
レジスタ同士の加算が機械語の1命令で実行されるケースって現実に存在しますか?
0030デフォルトの名無しさん
2007/11/08(木) 20:28:47全部staticで作りました。ぐぐったらスレッドセーフとか出てきたけど、スレッドなんて関係あるんですか?
0031デフォルトの名無しさん
2007/11/08(木) 20:33:26スレッドで同時に接続命令が複数呼ばれた時も平気なように作った?
0032デフォルトの名無しさん
2007/11/08(木) 20:34:07static 宣言された変数使ってなければ関係はない。
0033デフォルトの名無しさん
2007/11/08(木) 20:34:17003430
2007/11/08(木) 20:37:17どうもありがとう。。そんなややこしいことしなきゃいけなかったんですね。
なんだかよくわからず、普通に接続してそのオブジェクトを返すしか
かいてないです。。明日、先輩によく相談してみます。
0035デフォルトの名無しさん
2007/11/08(木) 20:37:31while(すっごいたくさん)
{
switch()
{
}
}//while.
こんな感じのプログラムがありまして、switchをとにかく高速化したいのです
003630
2007/11/08(木) 20:39:40static宣言の変数は作っていません。というより、グローバルスコープの
変数はないです。どれも各々メソッド内で完結する変数ばかりなので、安心です。
お二方にそうおっしゃられて安心しました。上司には、「別に難しい事考えずに
接続オブジェクトを返すプログラムを作ってくれればいい」といわれたので
ごく単純に作ったんです。安心しました。ありがとうございました。
0037デフォルトの名無しさん
2007/11/08(木) 20:42:02理屈もわからないのに安心しててどうするよ
技術者として、ありようがダメだな
0038デフォルトの名無しさん
2007/11/08(木) 20:45:560039デフォルトの名無しさん
2007/11/08(木) 20:48:53Java の switch はジャンプテーブル作るよ。
意味無く switch 命令に整数しか指定できないないようにはしない。
0040デフォルトの名無しさん
2007/11/08(木) 20:50:49たしか0〜5はジャンプテーブル展開だった希ガス
仮想マシン仕様を見てみ
0041デフォルトの名無しさん
2007/11/08(木) 21:32:40ありがとうございます
ただGoogle先生に「Java switch ジャンプテーブル」でぐぐってもなかなかいいところが見つかりません
switchはこんな感じになるのでしょうか?
switch(a)
{
case 5: print(5); break:;
case 6: print(6); break:;
case 7: print(7); break:;
}
↑こういうJavaのswitchは↓こうなる?
if (5 <= a && a <= 7)
{
Address pointer[] = { 5へのアドレス, 6へのアドレス, 7へのアドレス};
VMJump(pointer[a - 5]);
}
概念的にですが、こんな感じでしょうか?
・抜け番号があったらどうなるのか
・0からの連番のほうがパフォーマンスがよくなるのか
とかが気になるところです
(興味があるんでしつこく突っ込んでます。すいません)
0042デフォルトの名無しさん
2007/11/08(木) 21:35:56サーバ用途なら展開のされ方も変わってきそう
0043デフォルトの名無しさん
2007/11/08(木) 21:39:24携帯Javaなのであまり動的再コンパイルとか期待できません
0044デフォルトの名無しさん
2007/11/08(木) 21:41:52ありがとうございます、おかげさまで、何とかあと少しで
自分の求める処理までいけそうです。
本当に助かりました!
0045デフォルトの名無しさん
2007/11/08(木) 22:10:22javaでこれに似た花火を作ろうと思ってます。
そこで質問なんですが
花火だけではリアルさが欠けてしまうと思ったので
飛んで行く火薬玉も取り入れました。
しかし時間差で飛ばすことがどうしても出来ません。
どうすれば良いでしょうか?
0046デフォルトの名無しさん
2007/11/08(木) 22:15:02ありがとうございます。
Panelを用いてマウスリスナーを設けることにしました。
>>16 >>17
ありがとうございます。
マウス位置の該当領域を持ってくるのと、Labelを置くのとでは、どちらの方が表示などに負担が少ないでしょうか?
0047デフォルトの名無しさん
2007/11/08(木) 22:28:36連番でないとダメだね
http://ja.wikipedia.org/wiki/Java%E4%BB%AE%E6%83%B3%E3%83%9E%E3%82%B7%E3%83%B3#.E3.82.B8.E3.83.A3.E3.83.B3.E3.83.97
0048デフォルトの名無しさん
2007/11/08(木) 22:34:32ありがとうございます
すばらしい情報です
0049デフォルトの名無しさん
2007/11/08(木) 22:46:190050デフォルトの名無しさん
2007/11/08(木) 22:50:260051デフォルトの名無しさん
2007/11/08(木) 22:54:440052デフォルトの名無しさん
2007/11/08(木) 23:21:52どっかに行っちゃって1つしか表示されません。どうしたら2つとも表示できるのでしょうか。
お願いします。
import java.applet.*;
import java.awt.*;
/*<applet code="applet0.class" width="400" height="300">
</applet>*/
public class applet0 extends Applet{
public void init(){
Label label = new Label("ラベル");
add(label);
Button button = new Button("ボタン");
add(button);
Choice choice = new Choice();
choice.addItem("チョイス1");
choice.addItem("チョイス2");
add(choice);
TextField textField1,textField2;
textField1 = new TextField("テキスト1");
textField2 = new TextField("テキスト2");
add(textField1,textField2);
this.setLayout( new GridLayout(10,1));
}}
0053デフォルトの名無しさん
2007/11/08(木) 23:48:32>add(textField1,textField2);
0054デフォルトの名無しさん
2007/11/08(木) 23:48:450055デフォルトの名無しさん
2007/11/09(金) 00:12:470056デフォルトの名無しさん
2007/11/09(金) 00:36:17すいません。
0057デフォルトの名無しさん
2007/11/09(金) 00:39:39add(textField2);
0058デフォルトの名無しさん
2007/11/09(金) 00:41:16add(textField1,textField2);
このような書き方はできません。
おそらく
http://java.sun.com/javase/6/docs/api/java/awt/Container.html#add(java.awt.Component, java.lang.Object)
このメソッドが呼び出されてます。
レイアウトを考えないのであれば
add(textField1);
add(textField2);
こうしてあげましょう。
0059デフォルトの名無しさん
2007/11/09(金) 00:43:30本当にありがとうございました。
0060デフォルトの名無しさん
2007/11/09(金) 01:19:163 : foob
1 : hoge
4 : piyo
こういうファイルをソートする時に文字列としてソートしないで、
先頭の数値基準でソートするのって、何か良いやり方ってありますか?orz
つまり結果が、
1 : hoge
20 : barr
3 : foob
4 : piyo
じゃなくて、
1 : hoge
3 : foob
4 : piyo
20 : barr
ってなるようにです。
0061デフォルトの名無しさん
2007/11/09(金) 01:27:130062デフォルトの名無しさん
2007/11/09(金) 01:32:55Collections.sort(list, new Comparator<String>() {
public int compare(String a, String b) {
int i = Integer.parseInt(a.substring(0, a.indexOf(' ')));
int j = Integer.parseInt(b.substring(0, b.indexOf(' ')));
return i < j ? -1 : i > j ? 1 : 0;
}
});
0063デフォルトの名無しさん
2007/11/09(金) 01:33:38ご助言ありがとうございます。
ちょっと今日はこの問題に苦戦しすぎて死にそうなので、
明日起きたらComparatorを調べてやってみます。
寝る前に明日の取っ掛かりが出来て良かったです、本当にありがとう><
0064デフォルトの名無しさん
2007/11/09(金) 01:35:55これは…!ありがとうございます!><
こんな時間に申し訳ないです、明日の参考にさせて頂きます。
これが出来れば、処理が全部完成するので本当に感謝です!
0065デフォルトの名無しさん
2007/11/09(金) 01:36:24modpower(b, e, n)
0066デフォルトの名無しさん
2007/11/09(金) 01:39:16return Math.pow(b, e) % n;
}
なんでこんなのが書けないんだ
0067デフォルトの名無しさん
2007/11/09(金) 08:12:33実行したくないのですが、どういう書き方をすればいいのでしょうか?
if (key == answer) {
correctAnswer();
x++;
if (x == arrayX.length) {
x = 0;
y++;
if (y == arrayY.length) {
finish();
}
}
setProblem(x, y);
} else {
wrongAnswer();
}
0068デフォルトの名無しさん
2007/11/09(金) 10:19:53VBの場合
Space(10)
で良いのですがJavaの場合どのようになりますでしょうか?
0069デフォルトの名無しさん
2007/11/09(金) 10:33:16finish の後に return ではだめなん?
じゃ無ければ、 カルノー図に書き出して、
条件の組み合わせを確認して、再構成するとか。
0070デフォルトの名無しさん
2007/11/09(金) 10:54:46" "
0071デフォルトの名無しさん
2007/11/09(金) 11:19:03だせー
0072デフォルトの名無しさん
2007/11/09(金) 11:28:52気に入らんか・・・
シンプルでいいと思うんだが
じゃあ↓のようなメソッドでも作って space(10) とやってくれ
String space(int n) {
char[] c = new char[n];
Arrays.fill(c, ' ');
return new String(c);
}
0073デフォルトの名無しさん
2007/11/09(金) 12:31:390074デフォルトの名無しさん
2007/11/09(金) 12:43:12まず InfinityCharacterReaderFactory インターフェイスを作ってだな(ry
0075デフォルトの名無しさん
2007/11/09(金) 12:54:36String.format("%10s", " ")
0076デフォルトの名無しさん
2007/11/09(金) 13:42:42できそうなら、だいたいどういうことしたらできるか教えてください。
ちなみにJAVAで音楽の解析ってどんなことができますか?
0077デフォルトの名無しさん
2007/11/09(金) 13:57:00できません。
0079デフォルトの名無しさん
2007/11/09(金) 14:27:570080デフォルトの名無しさん
2007/11/09(金) 14:38:21想像力足りないよ君。
0081838
2007/11/09(金) 14:38:580082デフォルトの名無しさん
2007/11/09(金) 14:42:150083デフォルトの名無しさん
2007/11/09(金) 14:45:13jvmが勝手にキャッシュするんだよ。flyweightも知らんのか。
0084デフォルトの名無しさん
2007/11/09(金) 14:49:40Java のは文字列プール。キャッシュとは言わない。
0085デフォルトの名無しさん
2007/11/09(金) 14:50:43はいはいすいませんでした。
0086デフォルトの名無しさん
2007/11/09(金) 14:51:26つか勝手にじゃなくてそれ仮想マシンの仕様な。
0087デフォルトの名無しさん
2007/11/09(金) 14:51:33どこでその生成コストを回収するんだよw
大体、それを使うために、スペースキー10回を毎回入力するのかね
0088デフォルトの名無しさん
2007/11/09(金) 14:56:32おまえはいいよ。まったく分かってなさそう。
0089デフォルトの名無しさん
2007/11/09(金) 14:57:54そもそも指定個数のスペースの文字列が必要になるって時点で
全体が糞設計確定なんだからさ
0090デフォルトの名無しさん
2007/11/09(金) 14:58:29ダブルクォーテーション2個+スペースキー10回連打するのと
"Space(10)" の9文字を入力するのって
そんなに手間違わないと思うけどな
0091デフォルトの名無しさん
2007/11/09(金) 14:58:30本を一冊やっているんですが、
JSPで<%@page%>タグの中でencoding=Windows-31Jと指定しています。
で、フォームなんかの要素を受け取る際、setCharacterEncoding("Windows-31J")で
デコードしなくてはいけないと書いてあります。
相手のOSがWindowsならわかるんですが、Linuxだったりした場合も
送信されてくるフォームはWindows-31Jで送られてくるんですか?
自分のWebアプリケーションのサイトがWindows-31Jで指定して作ってある場合は
相手のコンピュータもOS問わずWindows-31Jでフォームのデータを送信してくるという
ことなんですか?
0092デフォルトの名無しさん
2007/11/09(金) 15:07:10相手の OS が Win だろうが MacOS だろうが Linux だろうが、そのページのエンコーディングで
送信してきます。Shift_JIS なら Shift_JIS で、EUC-JP なら EUC-JP で。
ただし Windows-31J は IANA が規定していない Java 独自のエンコーディングラベルなので、
どのブラウザもそれが Shift_JIS の事だとは知らないため誤認識する可能性があります。しかし
JSP の page ディレクティブに Shift_JIS と書くと 〜 などが文字化けするという矛盾があります。
従って、<%@ page %> ディレクティブでは Windows-31J を指定し、HTML の <meta> タグで Shift_JIS
を示してやるのが正しい方法です。ここまできちんと書いてない解説書や識者は糞なので捨ててください。
<%@ page language="java" contentType="text/html; charset=Windows-31J" %>
…
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS">
0093デフォルトの名無しさん
2007/11/09(金) 15:07:34それでデコードすればいんじゃね?
009491
2007/11/09(金) 15:12:04疑念が全部解けました。おっしゃるとおり、JSPタグとHTMLタグのmetaタグの両方で
指定しようとおもいます。本当にありがとうございました。
>>93さんありがとうございます。getCharacterEncodingって言うメソッドもあるんですね。
Javaは便利ですね。それもやってみたいとおもいます。
お二方どうもありがとうございました。とても参考になりました。
0095デフォルトの名無しさん
2007/11/09(金) 16:24:47オープンソースのopenPNEの中でJAVAで記述した人工知能を動かして見たいと考えています。
こうしたことは技術上可能なのでしょうか。ご教授お願いいたします。
0096デフォルトの名無しさん
2007/11/09(金) 16:27:55JNI、ソケットで通信、コマンド起動
好きなの選べ。
0097デフォルトの名無しさん
2007/11/09(金) 16:30:02ファジーも入っててお得だ
組み合わせれば結構有用なものが作れた
ぜひおためしあれ
0098デフォルトの名無しさん
2007/11/09(金) 16:38:48どういうの?お試ししたいんだど。
0099デフォルトの名無しさん
2007/11/09(金) 16:44:34Windows-31JはIANA登録名だぞ。
>>91
なので、ぜんぶWindows-31JにしてしまってOK。
0100デフォルトの名無しさん
2007/11/09(金) 16:50:45IANAの登録はCharsetクラスのドキュメントからたどれるよ。
0101デフォルトの名無しさん
2007/11/09(金) 16:52:24ありゃ、本当だ orz
MS932 や Cp943C と同じかと思ってた。
■ このスレッドは過去ログ倉庫に格納されています