【初心者】Java質問・相談スレッド103【大歓迎】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/06/27(水) 07:23:27JavaScript, 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質問・相談スレッド102【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1180419689/
/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
次スレは>>980あたりで。
0592デフォルトの名無しさん
2007/07/13(金) 14:14:100593デフォルトの名無しさん
2007/07/13(金) 14:40:21可能
0594592
2007/07/13(金) 15:02:09axisを共有した異種チャートの混合表示も可能でしょうか
0595デフォルトの名無しさん
2007/07/13(金) 15:25:30javadocでは普通、原文とサイトのチュートリアルよく読むのオヌヌメ
0596デフォルトの名無しさん
2007/07/13(金) 15:44:35異種で共有ってのがよく分からないけど、それも出来たと思う
前使った時に5,6種類のグラフを重ねてプロットしてたはず
0597デフォルトの名無しさん
2007/07/13(金) 15:45:43てsと
0598デフォルトの名無しさん
2007/07/13(金) 17:02:50double test = 17.56;
というのがあって、これの100倍の答え(1756)を出したいのですが、
計算すると、1755.9999999999998などという答えがでてきます。
どのようにすれば期待した答えがでてくるのでしょうか。
試したことは下記の2つでどちらも変な結果になりました
System.out.println(test * 100.0);
System.out.println(test * 100.0f);
0599デフォルトの名無しさん
2007/07/13(金) 17:19:33BigDecimal test = new BigDecimal("17.56");
System.out.println(test.multiply(new BigDecimal(100)));
0600デフォルトの名無しさん
2007/07/13(金) 17:20:37System.out.println(Math.round(test*100));
0601598
2007/07/13(金) 17:39:48ありがとうございました
期待通りの答えをだすことができました。
単純に100倍するというのは難しいことなんですね・・・勉強になりました。
0603デフォルトの名無しさん
2007/07/13(金) 19:51:42誤差がね
あるから
0604デフォルトの名無しさん
2007/07/13(金) 19:52:03Javaに限ったことじゃないけど、プログラムで小数を扱うのは難しい
0605デフォルトの名無しさん
2007/07/13(金) 19:55:110606デフォルトの名無しさん
2007/07/13(金) 20:26:470607デフォルトの名無しさん
2007/07/13(金) 20:31:580608デフォルトの名無しさん
2007/07/13(金) 20:46:130609デフォルトの名無しさん
2007/07/13(金) 22:42:44試したこと無いけど
DatagramPacket.getSocketAddress().getAddress() って何が帰ってくるの?
0610デフォルトの名無しさん
2007/07/14(土) 00:04:40適当すぎw 答えが2.6とかだったら3になるなw
0611デフォルトの名無しさん
2007/07/14(土) 16:47:500612デフォルトの名無しさん
2007/07/14(土) 17:40:17とりうる値がかなり限られているなら○○以上の値を複数のcaseで羅列して挙げておけばいいが、
そういう条件判断は普通はif文で処理したほうがいいと思う。
0613デフォルトの名無しさん
2007/07/14(土) 18:39:38int flag = 0;
if( 10 <= x) flag = 1;
switch flag
case flag:
// 処理
break;
default:
// 何もしない?
でどうだ?
switch文は使わないのがベター
大雑把な書き方は覚えているけど、詳細忘れたんで、テキトー
xが10以上の時、switch文で処理を分岐できるぞ。
業務で書いたならばぶち殺すけどなwwww
0614デフォルトの名無しさん
2007/07/14(土) 18:55:18できません
0615デフォルトの名無しさん
2007/07/14(土) 21:07:48case 1:
0616デフォルトの名無しさん
2007/07/14(土) 22:37:48caseに変数は使えない。リテラルのみ。
自信ない時は試してから書こうぜ。
0617デフォルトの名無しさん
2007/07/14(土) 22:38:210618611
2007/07/14(土) 23:28:120619デフォルトの名無しさん
2007/07/14(土) 23:30:160620デフォルトの名無しさん
2007/07/15(日) 01:21:060621デフォルトの名無しさん
2007/07/15(日) 12:13:26一度ByteにしてArrayListに格納して、取り出してbyteに変換しています。
もっとスマートな方法(このクラスを使った方が良い等)があれば教えて頂けないでしょうか。
ArrayList byteArray = new ArrayList();
int readByte = 0;
while (readByte != -1) {
readByte = stream.read();
if (readByte != -1) {
byteArray.add(new Byte((byte) readByte));
}
}
Byte[] byteBig = (Byte[]) byteArray.toArray(new Byte[0]);
byte[] byteTmp = new byte[byteBig.length];
for (int i = 0; i < byteBig.length; i++) {
byteTmp[i] = byteBig[i].byteValue();
}
0622デフォルトの名無しさん
2007/07/15(日) 12:49:22スマートとかじゃなくて、それじゃ落第です。動くだけ。性能でなさ杉。
1.もし読み込み対象データのサイズは先にわかるのであれば、1発バルクリ
ードしておしまいのはず。そんな遅そうな処理をする必要はないです。
多分こんな感じで。
File target = new File("...");
byte[] buffer = new byte[target.length()];
FileInputStream in = new FileInputStream(target);
in.read(buffer);
I/O-CPU間のスイッチが発生しないので、速いですよ。
2.サイズがわからないにしても、1バイトずつ読むのはやめなさい。
たとえば100バイトずつ読めば、I/O-CPUスイッチの回数は1/100です。
0623デフォルトの名無しさん
2007/07/15(日) 13:41:28PostgreSQLが完全対応で、Derbyがβって感じ?
0624デフォルトの名無しさん
2007/07/15(日) 13:56:15new byte[target.length()] してから new FileInputStream(target) するまでの間に、
ファイルが書き換えられて長さが変わる可能性がある。
in.read(buffer); は確実にbuffer.lengthバイトを読み込む事を保証してないので、
実装依存にしたくなければ明示的にループ使って全部読み込まないとダメ。
I/O-CPU間のスイッチがどのタイミングで入るかは実装依存なので
100バイトずつ読んでもスイッチ回数が本当に1/100になるかは不明。
0625デフォルトの名無しさん
2007/07/15(日) 14:05:130626デフォルトの名無しさん
2007/07/15(日) 14:13:090627デフォルトの名無しさん
2007/07/15(日) 14:16:47ByteArrayOutputStream out = ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while(-1 != (len = stream.read(buf))){
out.write(buf, 0, len);
}
byte[] contents = out.toByteArray();
0628デフォルトの名無しさん
2007/07/15(日) 14:17:20>2.サイズがわからないにしても、1バイトずつ読むのはやめなさい。
>たとえば100バイトずつ読めば、I/O-CPUスイッチの回数は1/100です。
おいおい、実装依存だぜそこは・・・って言おうとしたのにorz
ち、ちゃんと気づいてたんだからね!?
0629デフォルトの名無しさん
2007/07/15(日) 14:36:36一通り試して各メリットデメリットを整理し、理解を深めたいと思います。
このスレは優しい方が多いですね。
もっと叩かれると思っていました。
0630デフォルトの名無しさん
2007/07/15(日) 21:22:440631デフォルトの名無しさん
2007/07/15(日) 23:03:470632デフォルトの名無しさん
2007/07/16(月) 00:39:430633デフォルトの名無しさん
2007/07/16(月) 01:19:29このページの作成ボタンを押したらデータはどう飛ぶかとか…。
ヒントを求めてもこれといった答えをくれないので、Eclipceを前にして苦悩しています。
ど素人&抽象的な質問で申し訳ないですが、ソースを追う際のコツみたいなのはありますでしょうか?
0634デフォルトの名無しさん
2007/07/16(月) 01:22:310635デフォルトの名無しさん
2007/07/16(月) 01:35:42ありがとうございます。なるほど、それが簡単かもしれませんね。
でも、jspやらjavaやらが全部で何千と存在しているので、できればそれ以外の方法で検証したいのです。
変数が定義されてないかを調べるために変数を検索してみるといい、とは上司に言われたのですが、
あまり自分の中でピンとは来ません。
とんちんかんなことを言ってるかもしれませんが、ブレークポイント以外でもう一声いただけると助かります!
0636デフォルトの名無しさん
2007/07/16(月) 01:40:270637デフォルトの名無しさん
2007/07/16(月) 01:44:16明日、日付明けて今日ですが、会社行って試してみようと思います。
12時間後ぐらいに撃沈してるかもしれませんが、その時はまたご教授願いします…。
素人の質問に回答いただきありがとうございました!
0638デフォルトの名無しさん
2007/07/16(月) 05:08:20class A {
private int data; //外部からは見えない
private setter(int data) { this.data = data; } //外部からは使えない
public int getter() { return data; }
}
というクラスがあったとき、data は int 型なので、この値が外部からは
絶対に変更されないことは保証されていると思います(C++と同じ)。
しかし、これが基本型の int ではなく、一般的なクラスだった場合、
例えば StringBuffer だったりしたら、外部からでも
StringBuffer str = getter();
str.append("hoge");
みたいにして操作することは可能です(ここはC++と違う)。
これを防ぐために思いつくのは、getter() で data そのものではなく
data のコピーを返すことですが、
public String getter() { return data.toString(); }
1. これは標準的な方法ですか?
2. ざっと見たところ、StringBuffer と違って String には
インスタンスそのものが保持している値を直接書き換える
関数はないようですが、int と同じように扱っても安全ですか?
3. StringBuffer.clone() って使えるのが自然なような気がするんですが、
なんで使えないんですか?
0639デフォルトの名無しさん
2007/07/16(月) 05:32:15Stringはimmutable
StringBufferのclone()はObjectのclone()をオーバーライドしていないのでprotectedアクセスになりAからはアクセスできない
0640デフォルトの名無しさん
2007/07/16(月) 05:41:173点ともしっかり理解しました。
C++についても「分かったつもり」になっていただけの部分が
だいぶありそうですので、これを機にもう一度見直してみようと思います。
色々と。
0641デフォルトの名無しさん
2007/07/16(月) 07:00:070642デフォルトの名無しさん
2007/07/16(月) 08:05:31こういう方法もよくやる
class A {
// 外部から直接アクセス禁止
private StringBuffer buf = new StringBuffer();
// 許可するメソッドだけを間接的に公開
public append(String str) {
buf.append(str);
}
}
あわせて。>639のようにGetterはコピーして返せばOK
0643デフォルトの名無しさん
2007/07/16(月) 09:21:56を配置すると今どこら辺の過程やってるのか分かるよ。
0644デフォルトの名無しさん
2007/07/16(月) 10:29:570645デフォルトの名無しさん
2007/07/16(月) 10:31:48●・・・・・・・●・・・●・・・・●・・・・・●・・・
みたいに楽しめる
0646デフォルトの名無しさん
2007/07/16(月) 11:21:11javaはcall by referenceが無くていわばreferenceをcall by valueしてる。
ていうのをとっとと覚えた方が良いと思う。
むかし、MSにプリミティブのラッパークラスが
保持してるvalueを書き換える手段がないのは欠陥と非難されたことがあるよ。
0647デフォルトの名無しさん
2007/07/16(月) 11:24:16例えば、Flashでは、あるFlash(swfファイル)に、後から、別ファイルのFlashを、
ロードして実行/表示することができるんですが、
Javaアプレットの場合、後から、別archiveをロードして、その中のクラスを
利用したりすることは出来るんでしょうか。。
0648デフォルトの名無しさん
2007/07/16(月) 11:25:370649デフォルトの名無しさん
2007/07/16(月) 11:26:170650デフォルトの名無しさん
2007/07/16(月) 11:42:08作ってないよ。あれは買い取っただけ。
0651デフォルトの名無しさん
2007/07/16(月) 12:07:30ビルゲイツキタ━━━━━━(゚∀゚)━━━━━━ !!
0652デフォルトの名無しさん
2007/07/16(月) 12:47:53制御するサンプルとかないですか?
0653デフォルトの名無しさん
2007/07/16(月) 13:30:04一度止めた(止まった)スレッドを再開することはできない。
Threadの中でループを使って実行・一時停止を制御するか、ボタンのイベント毎にスレッドを作れ(止めろ)
0654647
2007/07/16(月) 14:21:16ありがとうございました。この方向で、勉強してみます。
また、つまづいたら、よろしくお願いします。
0655デフォルトの名無しさん
2007/07/16(月) 15:06:05ありがとうございます
wait/notify使えば出来るかなと思ったのですがダメなんですね
0656デフォルトの名無しさん
2007/07/16(月) 17:52:30commitとrollbackを使えば排他制御はできてるんですか?
0657デフォルトの名無しさん
2007/07/16(月) 17:54:16それを使って排他制御ができるかどうかは>656次第
0658デフォルトの名無しさん
2007/07/16(月) 17:55:040659デフォルトの名無しさん
2007/07/16(月) 17:57:41constと同義
0660デフォルトの名無しさん
2007/07/16(月) 17:58:34includeってなんですか?馬鹿にしているんですか?
0661デフォルトの名無しさん
2007/07/16(月) 18:01:07大文字、小文字の判別が出来るものと出来ないものが有る為 どうしても定数宣言で必要になるのです
0662デフォルトの名無しさん
2007/07/16(月) 18:01:550663656
2007/07/16(月) 18:41:04http://dev.mysql.com/doc/refman/4.1/ja/lock-tables.html
MYSQLでは、このページにあるようにロックテーブルすれば排他制御はOKですか?
0664デフォルトの名無しさん
2007/07/16(月) 18:46:16blank finalがあるから。
0665デフォルトの名無しさん
2007/07/16(月) 18:49:06それはJavaの話ではないのでMySQLスレで聞いた方がいい
排他制御がシビアであるのでない限り、TimeStampを使って簡単な排他制御を行うことが一般的。
つまり、更新するレコードを取得した時にLAST_UPDATE_TIMESTAMPなどを取得しておき、UPDATE時はWHERE条件に含めてしまう(排他で引っかかれば更新結果0件)など。
0666デフォルトの名無しさん
2007/07/16(月) 18:50:42むしろ、変数に代入された値(参照先も含む)の不変性を保証
釣りにマジレスはここまで。
0667デフォルトの名無しさん
2007/07/16(月) 18:52:460668デフォルトの名無しさん
2007/07/16(月) 19:24:02timestampはそういうときに使えるんですね
LAST_UPDATE_TIMESTAMPっていうのはMySQLの関数ですか?
探したんですが見つからないです。
あとこの方法だとテーブルにtimestamp型のカラムを持たせないとできないんですよね?
もうMySQLの質問になってますね。すいません。これで最後にします。
0669デフォルトの名無しさん
2007/07/16(月) 19:27:31JLS3以降(Java5以降)でfinalの役割が重くなって、
666のようになったはず。
0670デフォルトの名無しさん
2007/07/16(月) 19:31:13いや各テーブルに定義するカラム
最終更新日時ってカラムは何かと便利だから全てのテーブルに含めてテーブル設計することが多い(この辺もMySQLスレかDB総合スレ)
0671デフォルトの名無しさん
2007/07/16(月) 19:31:19finalの役割が重くなったって、具体的にchapterいくつよ
0672デフォルトの名無しさん
2007/07/16(月) 19:45:43あーカラム名ですか。
たしかにあったら便利ですね。
勉強になりました。ありがとうございました。
0673デフォルトの名無しさん
2007/07/16(月) 19:59:01final = 再代入不可
変更不可ではない(参照先が変更されれば変更可能)
逆にすべての参照先をfinalにすれば変更不可(immutable)にできる
再代入の意図がなければなるたけつけておくのが良策
Cのconstとは違うので注意
0674デフォルトの名無しさん
2007/07/16(月) 20:08:24Cのconstはダブルポインタ先も固定のままだっけか?
0675デフォルトの名無しさん
2007/07/16(月) 20:14:56666はマジレスパワーが足りず言葉不足
chapterは 17.5 Final Field Semantics あたりか?
あとは自分で調べるか、やさしいエロイ人待ちなさい
0676デフォルトの名無しさん
2007/07/16(月) 20:30:43変数に代入された値(参照先も含む)の不変性を保証 の差が解らない…
一度しか代入できないって事は代入された値が不変って事じゃないの?
0677デフォルトの名無しさん
2007/07/16(月) 21:09:36final StringBuffer buf = new StringBuffer();
buf = null; //これはエラーになる=一度しか代入できない。
buf.append("hoge"); //これはエラーにならない。参照先の不変性は保証されない。
0678デフォルトの名無しさん
2007/07/16(月) 21:09:38finalでStringBuffer持ってたら?
0679デフォルトの名無しさん
2007/07/16(月) 21:19:04Java5から重くなって参照先の不変性を保証ということは、
buf.append("hoge");
でエラーになるということ?
0680デフォルトの名無しさん
2007/07/16(月) 21:21:12それ嘘だから。エラーにはならないよ。
0681デフォルトの名無しさん
2007/07/16(月) 21:35:161. あるスレッドにおける代入結果は、他のスレッドからすぐには見えない
2. ファイナルフィールドとはいえ、一回は代入される
3. 不変と称しているのに、代入される前のファイナルフィールドが見えたらいやん
4. final の意味を強化
0682デフォルトの名無しさん
2007/07/16(月) 22:12:435.0の同期周りで後付けされた仕様を拡大解釈でもしてるんじゃない?
でもあれだ、static finalでプリミティブだと吐くバイトコードにリテラル埋め込んでるから定数と言えるかも。
あと、finalじゃなきゃinner classから参照できないんじゃなかったけ?
0683デフォルトの名無しさん
2007/07/16(月) 22:21:43static final int a = Integer.getInteger("system.property");
みたいな事もできるから、「static final でプリミティブ」なだけじゃ定数とはいえない。
final でなければ参照できないってのは匿名クラスの話じゃないか?
0684デフォルトの名無しさん
2007/07/16(月) 22:52:09C:\sample>javac FusenExec.java
FusenExec.java:6: シンボルを見つけられません。
シンボル: クラス Dodai
場所 : FusenExec の クラス
Dodai fusen;
^
FusenExec.java:7: シンボルを見つけられません。
シンボル: クラス Dodai
場所 : FusenExec の クラス
fusen = new Dodai();
^
エラー 2 個
因みに、ソースはこれです。どこがおかしいかを指摘ください。
class FusenExec{
public static void main(String[] args){
Dodai fusen;
fusen = new Dodai();
fusen.setSize(300,50);
fusen.setVisible(true);
}
}
0685デフォルトの名無しさん
2007/07/16(月) 22:55:040686デフォルトの名無しさん
2007/07/16(月) 22:55:33Dodaiクラスがないんだって。
コンパイルしてないんじゃねーの?
おかしいところ?
ソースコード→コンパイル→実行の流れ理解しているか怪しい
0687デフォルトの名無しさん
2007/07/17(火) 12:09:21フォーマットは何でも良いんだけど。
できればソースコード公開義務のないライセンスがいいんだけど・・・。
java3d用なら色々あるんだけど、自分で実装しなきゃダメかな?
0688デフォルトの名無しさん
2007/07/17(火) 13:31:43キャンバスに描画し、折り返し処理などは実現できたのですが、スクロール処理がうまく実現でしません。
少ないメモリで高速に描画できるソースなどはありませんでしょうか
0689デフォルトの名無しさん
2007/07/17(火) 13:34:200690デフォルトの名無しさん
2007/07/17(火) 14:18:470691デフォルトの名無しさん
2007/07/17(火) 14:24:41オーバーフローしないのか?w
0692デフォルトの名無しさん
2007/07/17(火) 14:32:32ていうか10万って言ったらUnicodeでUTF-8で日本語で1行80文字としても殆どが1文字3バイト取られるからメモリを23Mbyte食うわけだが・・・。
■ このスレッドは過去ログ倉庫に格納されています