【初心者】Java質問・相談スレッド103【大歓迎】 at TECH
[2ch|▼Menu]
[前50を表示]
600:デフォルトの名無しさん
07/07/13 17:20:37
>598
System.out.println(Math.round(test*100));


601:598
07/07/13 17:39:48
>>599-600
ありがとうございました
期待通りの答えをだすことができました。
単純に100倍するというのは難しいことなんですね・・・勉強になりました。

602:デフォルトの名無しさん
07/07/13 19:22:03
>>593>>596
有難うございました、早速使ってみました
なかなか優れものですねこれは

603:デフォルトの名無しさん
07/07/13 19:51:42
>>601
誤差がね
あるから

604:デフォルトの名無しさん
07/07/13 19:52:03
>>598
Javaに限ったことじゃないけど、プログラムで小数を扱うのは難しい

605:デフォルトの名無しさん
07/07/13 19:55:11
電卓でもいえるけどね

606:デフォルトの名無しさん
07/07/13 20:26:47
量子コンピューターになればいいんじゃないかな?

607:デフォルトの名無しさん
07/07/13 20:31:58
量子コンピュータは二進数使わないのか?

608:デフォルトの名無しさん
07/07/13 20:46:13
アナログコンピューターでOK

609:デフォルトの名無しさん
07/07/13 22:42:44
>>576
試したこと無いけど
DatagramPacket.getSocketAddress().getAddress() って何が帰ってくるの?

610:デフォルトの名無しさん
07/07/14 00:04:40
>>600
適当すぎw 答えが2.6とかだったら3になるなw

611:デフォルトの名無しさん
07/07/14 16:47:50
switch文で○○以上の場合はこの処理をするっていうのはできますか?

612:デフォルトの名無しさん
07/07/14 17:40:17
>>611
とりうる値がかなり限られているなら○○以上の値を複数のcaseで羅列して挙げておけばいいが、
そういう条件判断は普通はif文で処理したほうがいいと思う。

613:デフォルトの名無しさん
07/07/14 18:39:38
>>611
int flag = 0;
if( 10 <= x) flag = 1;
switch flag
case flag:
  // 処理
  break;
default:
  // 何もしない?

でどうだ?

switch文は使わないのがベター
大雑把な書き方は覚えているけど、詳細忘れたんで、テキトー
xが10以上の時、switch文で処理を分岐できるぞ。
業務で書いたならばぶち殺すけどなwwww

614:デフォルトの名無しさん
07/07/14 18:55:18
>>611
できません

615:デフォルトの名無しさん
07/07/14 21:07:48
>>613
case 1:

616:デフォルトの名無しさん
07/07/14 22:37:48
>>613
caseに変数は使えない。リテラルのみ。
自信ない時は試してから書こうぜ。

617:デフォルトの名無しさん
07/07/14 22:38:21
あ、定数もいけたか。

618:611
07/07/14 23:28:12
レスさんくす

619:デフォルトの名無しさん
07/07/14 23:30:16
Rubyならできる

620:デフォルトの名無しさん
07/07/15 01:21:06
rubyもgroovyもいらない子

621:デフォルトの名無しさん
07/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();
}

622:デフォルトの名無しさん
07/07/15 12:49:22
>>621
スマートとかじゃなくて、それじゃ落第です。動くだけ。性能でなさ杉。

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です。


623:デフォルトの名無しさん
07/07/15 13:41:28
JDBC4.0に対応しているDBってどのくらいある?
PostgreSQLが完全対応で、Derbyがβって感じ?

624:デフォルトの名無しさん
07/07/15 13:56:15
>>622
new byte[target.length()] してから new FileInputStream(target) するまでの間に、
ファイルが書き換えられて長さが変わる可能性がある。

in.read(buffer); は確実にbuffer.lengthバイトを読み込む事を保証してないので、
実装依存にしたくなければ明示的にループ使って全部読み込まないとダメ。

I/O-CPU間のスイッチがどのタイミングで入るかは実装依存なので
100バイトずつ読んでもスイッチ回数が本当に1/100になるかは不明。

625:デフォルトの名無しさん
07/07/15 14:05:13
RandomAcceccFileの方を使えば100%保障じゃね?

626:デフォルトの名無しさん
07/07/15 14:13:09
ByteBuffer

627:デフォルトの名無しさん
07/07/15 14:16:47
>>621
ByteArrayOutputStream out = ByteArrayOutputStream();
byte[] buf = new byte[1024];
int len;
while(-1 != (len = stream.read(buf))){
 out.write(buf, 0, len);
}
byte[] contents = out.toByteArray();

628:デフォルトの名無しさん
07/07/15 14:17:20
>I/O-CPU間のスイッチが発生しないので、速いですよ。

>2.サイズがわからないにしても、1バイトずつ読むのはやめなさい。
>たとえば100バイトずつ読めば、I/O-CPUスイッチの回数は1/100です。

おいおい、実装依存だぜそこは・・・って言おうとしたのにorz
ち、ちゃんと気づいてたんだからね!?

629:デフォルトの名無しさん
07/07/15 14:36:36
様々な回答ありがとうございます。
一通り試して各メリットデメリットを整理し、理解を深めたいと思います。
このスレは優しい方が多いですね。
もっと叩かれると思っていました。

630:デフォルトの名無しさん
07/07/15 21:22:44
javaのlexとyaccどこ?

631:デフォルトの名無しさん
07/07/15 23:03:47
Calendarクラスって使いづらくない?

632:デフォルトの名無しさん
07/07/16 00:39:43
古いのはそうだね

633:デフォルトの名無しさん
07/07/16 01:19:29
上司から、1つのJavaプログラムソースの流れを追えるように、と指示が出されました。
このページの作成ボタンを押したらデータはどう飛ぶかとか…。
ヒントを求めてもこれといった答えをくれないので、Eclipceを前にして苦悩しています。
ど素人&抽象的な質問で申し訳ないですが、ソースを追う際のコツみたいなのはありますでしょうか?

634:デフォルトの名無しさん
07/07/16 01:22:31
メソッドの頭にブレークポイントを挿入してみたら?

635:デフォルトの名無しさん
07/07/16 01:35:42
>> 634
ありがとうございます。なるほど、それが簡単かもしれませんね。
でも、jspやらjavaやらが全部で何千と存在しているので、できればそれ以外の方法で検証したいのです。
変数が定義されてないかを調べるために変数を検索してみるといい、とは上司に言われたのですが、
あまり自分の中でピンとは来ません。
とんちんかんなことを言ってるかもしれませんが、ブレークポイント以外でもう一声いただけると助かります!

636:デフォルトの名無しさん
07/07/16 01:40:27
Eclipseなら右クリックで変数の宣言に飛ぶとかメソッドの定義に飛ぶとかできる

637:デフォルトの名無しさん
07/07/16 01:44:16
そうなんですか?!
明日、日付明けて今日ですが、会社行って試してみようと思います。
12時間後ぐらいに撃沈してるかもしれませんが、その時はまたご教授願いします…。
素人の質問に回答いただきありがとうございました!

638:デフォルトの名無しさん
07/07/16 05:08:20
C++からJavaに引っ越してきたばかりの初心者です。

class 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() って使えるのが自然なような気がするんですが、
  なんで使えないんですか?

639:デフォルトの名無しさん
07/07/16 05:32:15
public StringBuffer getter() { return new StringBuffer(data); }
Stringはimmutable
StringBufferのclone()はObjectのclone()をオーバーライドしていないのでprotectedアクセスになりAからはアクセスできない

640:デフォルトの名無しさん
07/07/16 05:41:17
こんな時間にレスありがとうございます!
3点ともしっかり理解しました。
C++についても「分かったつもり」になっていただけの部分が
だいぶありそうですので、これを機にもう一度見直してみようと思います。
色々と。

641:デフォルトの名無しさん
07/07/16 07:00:07
がんがれ

642:デフォルトの名無しさん
07/07/16 08:05:31
>>638
こういう方法もよくやる
class A {
 // 外部から直接アクセス禁止
 private StringBuffer buf = new StringBuffer();
 // 許可するメソッドだけを間接的に公開
 public append(String str) {
  buf.append(str);
 }
}
あわせて。>639のようにGetterはコピーして返せばOK

643:デフォルトの名無しさん
07/07/16 09:21:56
>>633 Eclipseがある今では古風なやり方だが、各所にSystem.out.println("..");
を配置すると今どこら辺の過程やってるのか分かるよ。

644:デフォルトの名無しさん
07/07/16 10:29:57
lnないほうがいいよ

645:デフォルトの名無しさん
07/07/16 10:31:48
二重ループで外を●内を・にすると
●・・・・・・・●・・・●・・・・●・・・・・●・・・
みたいに楽しめる

646:デフォルトの名無しさん
07/07/16 11:21:11
>>638
javaはcall by referenceが無くていわばreferenceをcall by valueしてる。
ていうのをとっとと覚えた方が良いと思う。

むかし、MSにプリミティブのラッパークラスが
保持してるvalueを書き換える手段がないのは欠陥と非難されたことがあるよ。

647:デフォルトの名無しさん
07/07/16 11:24:16
FlashからJavaに入った奴です、よろしくお願いします。
例えば、Flashでは、あるFlash(swfファイル)に、後から、別ファイルのFlashを、
ロードして実行/表示することができるんですが、
Javaアプレットの場合、後から、別archiveをロードして、その中のクラスを
利用したりすることは出来るんでしょうか。。

648:デフォルトの名無しさん
07/07/16 11:25:37
BASIC作ってた会社に言われたくない罠

649:デフォルトの名無しさん
07/07/16 11:26:17
できるよ

650:デフォルトの名無しさん
07/07/16 11:42:08
>>648
作ってないよ。あれは買い取っただけ。

651:デフォルトの名無しさん
07/07/16 12:07:30
>>650
ビルゲイツキタ━━━(゚∀゚)━━━ !!

652:デフォルトの名無しさん
07/07/16 12:47:53
mainスレッドとmainスレッドからstartされるThread-0があって、GUIのボタンでThread-0の停止・開始を
制御するサンプルとかないですか?

653:デフォルトの名無しさん
07/07/16 13:30:04
>>652
一度止めた(止まった)スレッドを再開することはできない。
Threadの中でループを使って実行・一時停止を制御するか、ボタンのイベント毎にスレッドを作れ(止めろ)

654:647
07/07/16 14:21:16
>>649
ありがとうございました。この方向で、勉強してみます。
また、つまづいたら、よろしくお願いします。

655:デフォルトの名無しさん
07/07/16 15:06:05
>>653
ありがとうございます
wait/notify使えば出来るかなと思ったのですがダメなんですね

656:デフォルトの名無しさん
07/07/16 17:52:30
JDBCでMySQLを使ってるんですが、setAutoCommitをfalseして
commitとrollbackを使えば排他制御はできてるんですか?

657:デフォルトの名無しさん
07/07/16 17:54:16
commit/rollbackは排他制御じゃなくてトランザクションの仕組み
それを使って排他制御ができるかどうかは>656次第

658:デフォルトの名無しさん
07/07/16 17:55:04
cから来たんですけど「final」って何ですか?馬鹿にしてるんですか?

659:デフォルトの名無しさん
07/07/16 17:57:41
>>658
constと同義

660:デフォルトの名無しさん
07/07/16 17:58:34
>658
includeってなんですか?馬鹿にしているんですか?

661:デフォルトの名無しさん
07/07/16 18:01:07
>>658 処理系側が安心して定数であると判断しているのです

大文字、小文字の判別が出来るものと出来ないものが有る為 どうしても定数宣言で必要になるのです

662:デフォルトの名無しさん
07/07/16 18:01:55
ん、もしかしてCしか知らないのかw

663:656
07/07/16 18:41:04
トランザクションと排他制御の違いがよくわかってませんでした。
URLリンク(dev.mysql.com)
MYSQLでは、このページにあるようにロックテーブルすれば排他制御はOKですか?

664:デフォルトの名無しさん
07/07/16 18:46:16
今のjavaのfinalは定数じゃなくて一度しか代入(初期化しか)できない変数だろ。
blank finalがあるから。

665:デフォルトの名無しさん
07/07/16 18:49:06
>>663
それはJavaの話ではないのでMySQLスレで聞いた方がいい

排他制御がシビアであるのでない限り、TimeStampを使って簡単な排他制御を行うことが一般的。
つまり、更新するレコードを取得した時にLAST_UPDATE_TIMESTAMPなどを取得しておき、UPDATE時はWHERE条件に含めてしまう(排他で引っかかれば更新結果0件)など。

666:デフォルトの名無しさん
07/07/16 18:50:42
>>664
むしろ、変数に代入された値(参照先も含む)の不変性を保証

釣りにマジレスはここまで。

667:デフォルトの名無しさん
07/07/16 18:52:46
何が「むしろ」なんだ?>>664のが的を射ているし。

668:デフォルトの名無しさん
07/07/16 19:24:02
>>665
timestampはそういうときに使えるんですね
LAST_UPDATE_TIMESTAMPっていうのはMySQLの関数ですか?
探したんですが見つからないです。
あとこの方法だとテーブルにtimestamp型のカラムを持たせないとできないんですよね?

もうMySQLの質問になってますね。すいません。これで最後にします。

669:デフォルトの名無しさん
07/07/16 19:27:31
>>667
JLS3以降(Java5以降)でfinalの役割が重くなって、
666のようになったはず。

670:デフォルトの名無しさん
07/07/16 19:31:13
>>668
いや各テーブルに定義するカラム
最終更新日時ってカラムは何かと便利だから全てのテーブルに含めてテーブル設計することが多い(この辺もMySQLスレかDB総合スレ)

671:デフォルトの名無しさん
07/07/16 19:31:19
>>669
finalの役割が重くなったって、具体的にchapterいくつよ

672:デフォルトの名無しさん
07/07/16 19:45:43
>>670
あーカラム名ですか。
たしかにあったら便利ですね。
勉強になりました。ありがとうございました。

673:デフォルトの名無しさん
07/07/16 19:59:01
>>658
final = 再代入不可
変更不可ではない(参照先が変更されれば変更可能)
逆にすべての参照先をfinalにすれば変更不可(immutable)にできる
再代入の意図がなければなるたけつけておくのが良策

Cのconstとは違うので注意

674:デフォルトの名無しさん
07/07/16 20:08:24
>>673
Cのconstはダブルポインタ先も固定のままだっけか?


675:デフォルトの名無しさん
07/07/16 20:14:56
>>671
666はマジレスパワーが足りず言葉不足
chapterは 17.5 Final Field Semantics あたりか?
あとは自分で調べるか、やさしいエロイ人待ちなさい

676:デフォルトの名無しさん
07/07/16 20:30:43
一度しか代入(初期化しか)できない変数 と
変数に代入された値(参照先も含む)の不変性を保証 の差が解らない…

一度しか代入できないって事は代入された値が不変って事じゃないの?

677:デフォルトの名無しさん
07/07/16 21:09:36
>>676
final StringBuffer buf = new StringBuffer();

buf = null; //これはエラーになる=一度しか代入できない。
buf.append("hoge"); //これはエラーにならない。参照先の不変性は保証されない。

678:デフォルトの名無しさん
07/07/16 21:09:38
>>676
finalでStringBuffer持ってたら?

679:デフォルトの名無しさん
07/07/16 21:19:04
>>677,678
Java5から重くなって参照先の不変性を保証ということは、
buf.append("hoge");
でエラーになるということ?

680:デフォルトの名無しさん
07/07/16 21:21:12
>>679
それ嘘だから。エラーにはならないよ。

681:デフォルトの名無しさん
07/07/16 21:35:16
気分、こんな感じ

1. あるスレッドにおける代入結果は、他のスレッドからすぐには見えない
2. ファイナルフィールドとはいえ、一回は代入される
3. 不変と称しているのに、代入される前のファイナルフィールドが見えたらいやん
4. final の意味を強化

682:デフォルトの名無しさん
07/07/16 22:12:43
>>679
5.0の同期周りで後付けされた仕様を拡大解釈でもしてるんじゃない?

でもあれだ、static finalでプリミティブだと吐くバイトコードにリテラル埋め込んでるから定数と言えるかも。

あと、finalじゃなきゃinner classから参照できないんじゃなかったけ?

683:デフォルトの名無しさん
07/07/16 22:21:43
>>682
static final int a = Integer.getInteger("system.property");
みたいな事もできるから、「static final でプリミティブ」なだけじゃ定数とはいえない。

final でなければ参照できないってのは匿名クラスの話じゃないか?

684:デフォルトの名無しさん
07/07/16 22:52:09
付箋を作成したいのですが、コンパイルができません。
C:\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);

}
}


685:デフォルトの名無しさん
07/07/16 22:55:04
クラスパス上にDodai.classが存在しない

686:デフォルトの名無しさん
07/07/16 22:55:33
>>684
Dodaiクラスがないんだって。
コンパイルしてないんじゃねーの?

おかしいところ?
ソースコード→コンパイル→実行の流れ理解しているか怪しい

687:デフォルトの名無しさん
07/07/17 12:09:21
流れ切るけどjogl用のモデルローダーってないかな?
フォーマットは何でも良いんだけど。
できればソースコード公開義務のないライセンスがいいんだけど・・・。

java3d用なら色々あるんだけど、自分で実装しなきゃダメかな?

688:デフォルトの名無しさん
07/07/17 13:31:43
10万行のデータを描画するため自作GUIを作っているのですが、うまくいきません。
キャンバスに描画し、折り返し処理などは実現できたのですが、スクロール処理がうまく実現でしません。
少ないメモリで高速に描画できるソースなどはありませんでしょうか

689:デフォルトの名無しさん
07/07/17 13:34:20
段階に分けるのが一般的

690:デフォルトの名無しさん
07/07/17 14:18:47
こいつ、10万行のテキストデータを丸ごと読もうとかしてるのかwww

691:デフォルトの名無しさん
07/07/17 14:24:41
そんな無茶した事無いから解らんのだが
オーバーフローしないのか?w

692:デフォルトの名無しさん
07/07/17 14:32:32
Swingのスクロールの実装があるじゃないか。
ていうか10万って言ったらUnicodeでUTF-8で日本語で1行80文字としても殆どが1文字3バイト取られるからメモリを23Mbyte食うわけだが・・・。

693:デフォルトの名無しさん
07/07/17 14:34:35
>>688
10万行ってだけならなんとかなりそうだけど。
スクロール処理が上手くできないってのは
計算済みの折り返し情報を行毎に保持とかしてないんじゃね?

694:デフォルトの名無しさん
07/07/17 14:37:14
というかSwingには高レベルなEditコンポーネントがあるんだが、それを拡張しようとか思わないのか?
低レベルな事はすべて実装されてるだろうに。
Canvasとかに直描きとか?

695:デフォルトの名無しさん
07/07/17 14:41:20
方法としては694が一番手っ取り早いやね
と言うか普通は新しいクラス造りが趣味でもない限りそうするけど

696:デフォルトの名無しさん
07/07/17 14:52:44
現実問題として10万行スクロールするユーザーがいるとは思えないw

697:デフォルトの名無しさん
07/07/17 15:32:49
>>696
つ速読の練習

698:デフォルトの名無しさん
07/07/17 15:34:49
2chの1スレ分でも10万行はないよなあ
3000〜1万行くらい?

699:デフォルトの名無しさん
07/07/17 15:44:05
て言うかそんな整理されてないデータは価値も低い

700:デフォルトの名無しさん
07/07/17 17:32:52
とりあえずスレタイがちょうど目に付いたという理由で
「スレ立てるまでもない質問はここで」スレの過去ログを
いくつか見てみたけど、だいたい1スレ7000行弱に収まってるね。
ってことは10万行つったら15スレ分ぐらい、
それを一気に表示されたって使う方は困るし、それよりは
うまく分割するとか有益な情報を抽出するとかって方に
注力した方が得るものは大きいと思う。

701:デフォルトの名無しさん
07/07/17 17:42:37
解決としてバッファリング用の作業クラスを一つ作りファイルから必要分だけ抽出し表示用のクラスに
送り込めるようにするのがいいと思う。
但し、どうしても必要な場合に限定し、できうる限り整理されたデータを用いるべき。

702:デフォルトの名無しさん
07/07/17 19:21:45
その前に必要なデータの抽出だ。

703:デフォルトの名無しさん
07/07/17 19:47:51
>>688 こんなんでいいんでないの?
import java.awt.*;
import javax.swing.*;

public class J688 extends JFrame{
  JTextArea textArea = new JTextArea(10*10000, 40);
  JScrollPane scrollPane = new JScrollPane(textArea);
  public J688(){
    super();
    setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    for(int i=1;i<=textArea.getRows();++i) textArea.append("Line:"+i+"\n");
    add(scrollPane, BorderLayout.CENTER);
    setPreferredSize(new Dimension(300, 300));
    pack();
    setVisible(true);
  }
  public static void main(String[] args) {
    new J688();
  }
}


704:デフォルトの名無しさん
07/07/17 22:09:22
初歩的な質問ですいませんが。
標準入力でインスタンスの数が変わる場合、インスタンスの生成で
インスタンス名をどう指定すればいいんでしょう?
Player player1 = new Player;
と言う感じに固定ならば書きますが、このplayer1が可変な場合に
変数などでどう表せば良いのかでつまづいて…。

705:デフォルトの名無しさん
07/07/17 22:11:19
「インスタンスの数」ってなんだい?
そこんとこもう少し詳しく

706:デフォルトの名無しさん
07/07/17 22:16:08
なんかよくわからんがエスパーで回答してみる
System.inで読んだ内容からk個のインスタンスを作るんだったら
普通にk個インスタンスを生成して片っ端からListに入れればいいんじゃね?

707:デフォルトの名無しさん
07/07/17 22:20:19
引数可変でその数だけ同一オブジェクトを生成するなら配列にでもぶちこんどけ
ってパパが言ってた。

708:デフォルトの名無しさん
07/07/17 22:29:48
すみません
質問させてください

現在修行中の身で、JavaSE5.0を使って色々とOJTしております
XMLを扱う場面で先輩からJAXB2.0なる便利なものを教えていただきました。
途中からJavaSE6に変えてJAXB2.0を楽しんでいたのですが、会社の命令でJavaSE6禁止命令が出ました(出ましたというより、もともと5.0か1.4しか使っちゃだめらしいです)
そこで困っているのですが、またまた、先輩社員からJavaSE5.0使って、SE6のJAXB2.0だけコピーすりゃいいじゃんと言われました
そんなことできるんですか?

709:704
07/07/17 22:35:09
>>705-707
早速どうもです
何と言うか、インスタンスの数が2つと決まっていれば

Player player1 = new Player;
Player player2 = new Player;

と言う感じに2つ作れば出来ますが、標準入力で指定された数作ろうとした場合
下みたいな感じで配列なりで表してfor文ででも回せば良いかと思ったのですが。

m = 標準入力;
for(int n = 0 ; n>=m ; n++ ){
Player **** = new player;
}

ここの***をどう記述したら良いのかが分からずどうにもうまく行かなくて。
初心者で引数可変、Listがちょっと分かりませんが調べてみます。

710:デフォルトの名無しさん
07/07/17 22:56:07
>>708
JAXB自体はJavaSE6以前からある。ここね。
URLリンク(jaxb.dev.java.net)
ここからダウンロードしたファイルからjar取ってきて、クラスパスに足せばいいよ。

「SE6のJAXBだけコピー」と言われると違うが、お前さんの解釈違いの可能性もあるので
その先輩さんのことはとやかく言わないでおく。

711:デフォルトの名無しさん
07/07/17 23:04:44
>>708
いや、そんな事したらライセンスとライブラリの依存関係解決を別個にやる羽目になるじゃん。
JAXBのページがsunかその周辺のサーバーにホストされてるからそこ当たってみ。

>SE6のJAXB2.0だけコピーすりゃいいじゃん
ライセンス管理意識なさ過ぎ。

712:デフォルトの名無しさん
07/07/17 23:13:36
ファイル出力時のflush()についての質問です。
少し前に下記のようなコードを書いてプログラムを走らせたところ、出力ファイルの末尾が切れていました。

String output_file_str = "hoge.txt";
FileWriter output_file = new FileWriter(output_file_str);
BufferedWriter output_file_buf = new BufferedWriter(output_file);
/* 出力処理 */
output_file_buf.close();
output_file.close();

調べた結果、close()する前にflush()をしなければいけないということが分かったので、下記のように直して現状は正しく動作しています。

String output_file_str = "hoge.txt";
FileWriter output_file = new FileWriter(output_file_str);
BufferedWriter output_file_buf = new BufferedWriter(output_file);
/* 出力処理 */
output_file_buf.flush();
output_file_buf.close();
output_file.close();


713:712
07/07/17 23:14:20
続きです
ここで、ふと疑問に思ったのが、FileWriterとBufferedWriterの両方にflushが存在している点で、
FileWriterは一文字単位でしかやり取りできない、BufferedWriterを使うことで行単位などでもやり取りができるということから
【BufferedWriter】−【FileWriter】−【ファイル】
とつながっていると思うのですが、この場合

output_file_buf.flush(); /* BufferedWriterの内容をすべてFileWriterにflush()する */
output_file_buf.close(); /* BufferedWriterの中身はすべて出力済みなので閉じてOK */
output_file.flush(); /* FileWriterの内容をすべて指定したファイルにflush()する */
output_file.close(); /* FileWriterの中身はすべて出力済みなので閉じてOK */

と両方でflushすべきなのかどうかで迷っています。
いくつかのページを参考に調べてみると、

String output_file_str = "hoge.txt";
BufferedWriter output_file_buf = new BufferedWriter(new FileWriter(output_file_str));
/* 出力処理 */
output_file_buf.flush();
output_file_buf.close();

といった感じにひとつずつ変数を定義するのではなくまとめて書かれていたのですが、FileWriterを明示的にflushしなくても安全なのでしょうか?
以上です。どなたかアドバイスよろしくお願いします。


714:デフォルトの名無しさん
07/07/17 23:19:03
>>712
> 調べた結果、close()する前にflush()をしなければいけないということが分かったので
それは嘘。close() する前に flush() する必要はない。

715:デフォルトの名無しさん
07/07/17 23:42:06
>>710>>711
レスさんくすです
先輩のアドバイスは私の解釈違いかも知れないのでスルーしてください

JAXBはSE6以前からあったんですね
SE6で標準APIに加えられたとの解釈でOKですかね?

716:712
07/07/18 00:05:20
>>714
表現が少しあいまいでした。
正確には研究室の先生に出力が途切れる現象を伝えたところ、flush()すれば大丈夫との回答が得られ、実際にflush()の行を追加したところ、すべてが出力されたという状態です。

BufferedWriterのjavadocでは

flush
public void flush()
throws IOExceptionストリームをフラッシュします。

定義:
クラス Writer 内の flush
例外:
IOException - 入出力エラーが発生した場合

--------------------------------------------------------------------------------

close
public void close()
throws IOExceptionストリームを閉じます。

定義:
クラス Writer 内の close
例外:
IOException - 入出力エラーが発生した場合

とあって、closeが内部でflushを行ってからストリームを閉じるとは書いてはないので、実は明示的に行わないとまずいのではと思ったのですが・・・
でもいくつかのページではcloseはflushを行った後にストリームを閉じるって書いてあって、でも各ページの説明で使っているサンプルコードにはちゃんとcloseの前にflushが入っているわけで・・・

初めに出力されなかった問題点はもっと別のところにあるのかな?


717:デフォルトの名無しさん
07/07/18 00:10:38
>>709
配列作って pl[n]
それから、「new Player;」 「n >= m」 は間違ってるから修正しとき

718:デフォルトの名無しさん
07/07/18 00:33:53
>>716
1.6 のAPIリファレンスでは
>ストリームを最初にフラッシュして、閉じます。
って書いてある。
たぶん、あまりにも当然すぎて書かれなかっただけなんじゃないかと。

> 初めに出力されなかった問題点はもっと別のところにあるのかな?
output_file_buf.close() を呼ぶ前に
output_file.close() を呼んでいた、に一票。

719:デフォルトの名無しさん
07/07/18 02:42:29
>>715
そう。EE5.0にあるxmlライブラリをSEに持ってきた時に依存関係を解決するついでにくっついて来た感じ。

標準ライブラリに昇格しただけでJAXB自体は前からあった。

720:デフォルトの名無しさん
07/07/18 03:53:12
SwingとかWebStartとかXMLとか流行りそうで流行らんなー。

721:デフォルトの名無しさん
07/07/18 03:58:29
720プロデュースで大々的にキャンペーンでもうってみてはどうだろう

722:デフォルトの名無しさん
07/07/18 05:19:42
Swingとxmlは流行るとかそういうものじゃないと思うが。

723:デフォルトの名無しさん
07/07/18 09:59:11
質問させてください。
以下のような処理を行いたいと思ってるのですが、行き詰まっています。

1. JScrollPaneのscrollble clientに、GridBagLayoutのJPanelを貼り付けて、ボタンの
テーブルを作成。

2. JScrollPaneのcolumn headerに、JTableのcolumnNamesのような項目名をテーブルの
各要素の幅に同期するように作成。

上記の、2.の処理を上手くやる方法はないでしょうか?

最初は、JTableのセルにパネルを貼り付けられないかと考えていたのですが、探した限り
やり方がみつからなかったので、この方法をとろうとしています。

良いお知恵をお持ちの方、ご教示願います。


724:デフォルトの名無しさん
07/07/18 10:28:34
>最初は、JTableのセルにパネルを貼り付けられないかと考えていたのですが、探した限り
>やり方がみつからなかったので、この方法をとろうとしています。

TableCellRenderer

725:デフォルトの名無しさん
07/07/18 10:46:52
チュートリアルに無いか?

726:デフォルトの名無しさん
07/07/18 12:06:38
いや、JDKのデモに付いてた気がする。

727:712
07/07/18 15:25:28
>>718
言われてみて、はっと気がついてソースコード見直したら

/* バッファーの内容を全て吐き出す */
buf_output_file.flush();

/* ファイルクローズ */
output_file.close();

ってなってました・・・
すみませんでした〜〜〜(>_<)

Javaで本格的に書き始めたのが、今回エラーの出たソースコードで、最近第2作目に突入していて頭の中がごっちゃになってました。^^;


728:デフォルトの名無しさん
07/07/18 18:08:40
char型の変数 c があるとして、 int n = (int)c; でUnicodeでの文字コードが取得できるらしいんですが、
これをShift-JISでの文字コードを取得するにはどうしたらいいですか?

729:デフォルトの名無しさん
07/07/18 18:54:30
> int n = (int)c; でUnicodeでの文字コードが取得できる
出来ません。
CharacterやStringクラスにコードポイントを返すメソッドがあるのでそれを使いましょう。

今のunicodeは21bitなんだな

730:デフォルトの名無しさん
07/07/18 19:03:00
>>728
char型の変数cに収まる範囲の文字コードについてはいい加減にこういうふうに
char c = 'あ';
short s = java.nio.charset.Charset.forName("Shift_JIS").encode(String.valueOf(c)).getShort();
System.out.printf("%04x%n", (int)c);
System.out.printf("%04x%n", s);

731:デフォルトの名無しさん
07/07/18 19:15:44
>>730
Charsetまで呼ばなくても、それならこれでいいんじゃね?
for (byte b : String.valueOf(c).getBytes("Shift_JIS")) System.out.printf("%02x", b);

732:デフォルトの名無しさん
07/07/18 21:44:44
>>717
急いで書いたらしょうもないミスしてますね、すいません。
配列で出来るんですか…う、う…ん…。
何か根本的にやり方がおかしいようですね…。
勉強しなおしてきます。

733:デフォルトの名無しさん
07/07/18 22:47:44
JTable にスクロール機能を持たせる場合、通常 JScrollPane を使用しますが、
大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
ので、JScrollBar を使用した手動スクロールを作成したいのですが、
作成方法を教えて頂けませんでしょうか?
サンプルなどがあるHPでも結構ですので、ご教授頂けると幸いです。


734:デフォルトの名無しさん
07/07/18 22:57:28
688

735:デフォルトの名無しさん
07/07/18 23:01:21
Frame上でJSplitPaneとか、Jの付くコンポーネント使って何か問題ありますか?

736:デフォルトの名無しさん
07/07/18 23:10:52
>>733
> 大量データがある場合はパフォーマンスとリソースの観点から実用的では無い
JScrollPane使ってたら、描画が必要な部分しか描画しないはずだが。

737:デフォルトの名無しさん
07/07/18 23:12:34
軽量が先、重量が後に描画に起因する事象。問題あるかどうかはやり方次第。

738:デフォルトの名無しさん
07/07/18 23:19:24
>>736
Swingの使い方間違えてんだろう・・・Swingで著しくパフォーマンス悪いのと描画に問題あるのは昔からマが使い方間違えてるだけだし。

JTreeを初期化時に全部ツリー作るとかさ。

そういうことだ>>733ソース晒すなりしないと。
今のマシンスペックじゃあブラウザでFlash自慰サイト読み込んで
メモリ1Gくらい食ってガンガン動かしても余裕だからjavaなんて論外。


739:デフォルトの名無しさん
07/07/18 23:46:53
public void run() {
 try {
  while (true) {
   Socket acceptedSocket = serverSocket.accept();
   hogehoge(acceptedSocket);
  }
 } catch (InterruptedException e) {
 } catch (IOException e) {
  e.printStackTrace();
 } finally {
  try {
   serverSocket.close();
  } catch (IOException e) {
   e.printStackTrace();
  }
 }
}
他のスレッドからThread#interrupt()で止められるサーバーってこう書くのかと思ったら
例外 java.lang.InterruptedException は対応する try 文の本体ではスローされません。
正しくはどう書くものなんでしょうか。

740:デフォルトの名無しさん
07/07/18 23:47:08
>javaなんて論外
Flexっていう便利なものがあるんだからJavaでGUI書くなんて
論外って意味なのか、Javaで書くと重いと文句を言うなんて
(使い方を間違えてるだけから)論外って話なのか、どっちだろう


741:デフォルトの名無しさん
07/07/19 00:36:26
>>739
Thread#isInterrupted()、Thread#interrupted() 使って
自前で割り込みされたかチェック。

何したいのか良く分からんけど、
interrupt で止められるサーバって考え方自体が正しくないような気もするが。

742:デフォルトの名無しさん
07/07/19 00:47:41
>>739
ここでその手の話にまったく詳しくない俺が本で読んだだけの知識で答えるぜ
1.ServerSocket#accept()はInterruptExceptionを投げない→タイムアウトを使うしかないはず(nioあたりで止められるのはあった気がする)
2.Thread#interrupt()を実行したら勝手にInterruptExceptionが発行されるわけではない→Thread.currentThread().isInterrupted()でインタラプト状態を確認し手動で投げる
3.hogehogeがやたら時間のかかる処理でInterruptExceptionを使う場合hogehoge内で2の動作をすることでキャンセル可

743:739
07/07/19 01:12:45
参考になりました。
・・・が、方針の段階で間違っているんですかね・・・。
サーバーって普通どう止めるものなんでしょう?

744:デフォルトの名無しさん
07/07/19 01:40:36
そこでThreadPoolExecutorの出番ですよ

745:デフォルトの名無しさん
07/07/19 10:31:20
javaの配列の宣言で

class Fuck
{
String str[] = new String[5];

public static void main(String[] args)
{
}
}
ってやると配列の宣言でエラーがでるんですが何故でしょうか?
配列の宣言文をメインの中でやるとエラーはでないんですが

746:デフォルトの名無しさん
07/07/19 10:35:46
static

747:745
07/07/19 10:46:32
すみませんソース間違えました;
class fuckArr
{
static String str[] = new String[5];
str[0] = "myGOD";


public static void main(String[] args)
{
System.out.println(str[0]);
}
}

fuckArr.java:4: ']' がありません。
str[0] = "myGOD";
^
fuckArr.java:4: <identifier> がありません。
str[0] = "myGOD";

ってエラーがでるんですが何故でしょうか?
mainでstr[0] = "myGOD";ってやると通るのですが

748:デフォルトの名無しさん
07/07/19 10:46:41
>>745
配列の宣言(String str[] = new String[5];ってやってるところ)では エラーでないでしょ。

staticメソッドからは static でないメンバにアクセスできないけど。

749:デフォルトの名無しさん
07/07/19 10:51:08
>>747
そこには式文かけないから当たり前。
フィールド宣言時に初期化子つかってやるか、静的初期化子使え。

static String[] str = { "myGOD", null, null, null, null };
static String[] str = new String[]{ "myGOD", null, null, null, null };

static String[] str = new String[5];
static { str[0] = "myGOD"; }

750:デフォルトの名無しさん
07/07/19 10:52:11
ぬるぽ

751:デフォルトの名無しさん
07/07/19 10:52:42
class fuckArr
{
static String str[] = new String[5];
str[0] = new String("myGOD");


public static void main(String[] args)
{
System.out.println(str[0]);
}
}

752:デフォルトの名無しさん
07/07/19 10:54:30
>>747
str[0] = "myGOD";がある場所はコンストラクタやフィールド、メソッド、内部クラスの定義しか書けない場所。

753:745
07/07/19 11:08:51
>749-752
レスthx
単純に式文がかけない場所なんですね


754:デフォルトの名無しさん
07/07/19 13:54:28
Java sound apiを利用してWebアプリケーションを構築したいと考えているのですが
例えばページ上でボタンを押したら録音が始まり10秒間録音してユーザーのローカルにファイルとして保存するようなJSPは
構築可能でしょうか?

頭でなかなかイメージできないので、可能か不可能かも分かりません
具体的な解説を付け加えてもらえれば、なお助かります

755:デフォルトの名無しさん
07/07/19 14:05:41
ファイルの内容を一行消したい場合は何を使えば良いのでしょうか?

756:デフォルトの名無しさん
07/07/19 14:20:30
>>754
無理というかJSPにする意味が分からんというか。
そういうのはJWSにした方が良いよ。

757:デフォルトの名無しさん
07/07/19 14:37:26
>>756
JWSとJSPはサーバサイドかクライアントサイドかの差だけだと思っていたので、
サーバ側の自分が負担できればと思っていたのですが・・・
またもしJSPであれば、クライアント側はJRE等が必要なくて済むかと・・・

つまり先述の例であれば、JWSの方が良い理由があるということでしょうか?

758:デフォルトの名無しさん
07/07/19 14:53:09
サーバサイドのプログラムでクライアントの音声デバイスにはアクセスできない。
サーバにくっついてるマイクの音だけしか拾えない。

759:デフォルトの名無しさん
07/07/19 14:55:58
Javaを理解するためにはアルゴリズムを勉強したほうがいいでしょうか?

760:デフォルトの名無しさん
07/07/19 15:06:23
>>757
サーバー側で動くもの作ったことある?
というかどういう風に動いてるか知ってる?

根本的なところから勉強した方が良い気がする。

761:デフォルトの名無しさん
07/07/19 15:07:03
>>759
Javaに限らずそれはしたほうがいい

762:デフォルトの名無しさん
07/07/19 15:37:59
RMIでできるべ

763:デフォルトの名無しさん
07/07/19 15:39:19
サーバ側のミキサーにアクセスするだけの話
だからそれほど難しい話ではない

764:デフォルトの名無しさん
07/07/19 15:44:09
>>761
ありがとうございます。
ちなみにビギナー向けでいい本ご存知ですか?

765:デフォルトの名無しさん
07/07/19 15:55:10
>>764
アルゴリズムの勉強は言語(Javaでもいい)の基礎が出来ていて多少書けることが前提
「アルゴリズム」とか「データ構造」でぐぐればネットでも勉強できる
これはC言語だけどアルゴリズムの考え方自体は同じだから参考になると思う
URLリンク(www.geocities.jp)
Javaで説明されてる本も出版されてるみたいだけど読んだことは無い

766:デフォルトの名無しさん
07/07/19 16:08:57
>>765
そうですか。自分はJavaの勉強に行き詰っている状態なのでちょっと厳しいかもしれません
ネットでも勉強出来るんですね?ありがとうございました

767:デフォルトの名無しさん
07/07/19 16:22:07
基本的なアルゴリズムが身につくと応用力が付く
ネットで見たりするソースに隠れたものを理解できるようになる
そうなるとどんどん力が付くよ。

最初はやはり本で少し学んだ方がいいかもしれない
それほど高く無い値段で出回ってる。

768:デフォルトの名無しさん
07/07/19 16:35:37
本日の部下との会話

俺:newってどういう意味?

部下:
          ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \  あたらしく作るということです 
    |      |r┬-|    |      
     \     `ー'´   /      
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


俺:newって単語の意味だけで想像して言っただろ?

部下:はい(´Д`;)ヾ

769:デフォルトの名無しさん
07/07/19 17:00:11
苦労してるな

770:デフォルトの名無しさん
07/07/19 17:03:28
>>765
フヒヒ 横からいいHPハケーン!

771:デフォルトの名無しさん
07/07/19 17:50:23
>>763
クライアント側のミキサーにアクセスしようとしてるんだと思うが?

772:デフォルトの名無しさん
07/07/19 17:58:17
だったらそれでもいいだろ
難しく考えすぎ

773:デフォルトの名無しさん
07/07/19 18:16:19
盗聴のような真似ができるから今問題になってるね

774:755
07/07/19 19:00:25
どなたか(´;ω;`)

775:デフォルトの名無しさん
07/07/19 19:03:44
読み込んだあと該当箇所のエスケープシーケンスを消す
そのあと保存

776:デフォルトの名無しさん
07/07/19 19:04:45
1行ずつよみこんで新たなファイルに書き込む。該当行はスキップ。

777:デフォルトの名無しさん
07/07/19 20:23:58
特定の文字列に対して正規表現がマッチしている、みたいなのはできたのですが、
正規表現を指定してそれにマッチする文字列をランダムで作成する、みたいなことってできないでしょうか。
仕事なんでできないとだめなんですが、ご意見いただけないでしょうか。

778:デフォルトの名無しさん
07/07/19 21:10:16
>>777
ランダムで文字列を作成して、正規表現にマッチしていればループを抜ける

779:デフォルトの名無しさん
07/07/19 21:17:15
正規表現を逆解析して、適切なテストデータを流すDBからデータとってくるとかかな
むかーし、そんな感じのテストツール作ろうかと考えたこともあった。

780:デフォルトの名無しさん
07/07/19 21:30:12
正規表現の逆なんて正規表現でのマッチングよりも難しいんじゃないか?
適当に使用する文字を絞り込んでから778の言うようにランダムに作成してマッチングかけるのが手っ取り早そうだ

仕事なんで出来ないとダメってのは何かおかしいと思うぞ
出来ないものは出来ないと言うべきだ

781:デフォルトの名無しさん
07/07/19 21:38:22
>>778
最初それで考えたんだが、文字数だとかが絡んだりするとそう簡単にはいかんことに気付き断念

>>780
普通はそうなんだろうが、そうもいかない会社はいくらでもあるのよ。

とりあえず対応できそうな構文のみでいってみるか・・・

782:デフォルトの名無しさん
07/07/19 21:43:34
>>781
だいたい何の用途で使うんだ?
正規表現って言ってもどこまで対応するかによってとんでもなく面倒だぜ

783:754・757
07/07/19 21:51:25
>>758
なるほど、これでだいぶ理解できました
ありがとうございます
>>760
全くの初心者です
今日、早速本を買ってきました
これから勉強していこうと思います
ありがとうございました。

784:デフォルトの名無しさん
07/07/19 22:27:57
>>774
特にAPIは無いんじゃないの?


785:デフォルトの名無しさん
07/07/19 22:32:00
>>781
1.
ある表現から固定の決まったシーケンスを出すようにする
[a-z]* なら aaa
[0-9]* なら 000
2.
あるシーケンスの正規表現マッチングを崩さないような変更を行うメソッドを
いろいろ(対応する正規表現分だけ)用意する
例:
[a-z]* の aaa を aab にするとか、 aaにするとか。

3.
1.に対して2.を適当な回数適用する

どう?
まぁできあがる表現に偏りはできると思うがね。
ランダムの定義が曖昧だしこれでいいよな?
1.のシードをある程度余分に作っておけばそれなりにばらけるかもしれないし。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5055日前に更新/271 KB
担当:undef