【初心者】Java質問・相談スレッド104【大歓迎】at TECH
【初心者】Java質問・相談スレッド104【大歓迎】 - 暇つぶし2ch1:デフォルトの名無しさん
07/07/27 08:46:32
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作板をご利用ください。URLリンク(pc10.2ch.net)

過去ログ、関連スレッド、よくある質問とその回答など、
質問をする前に、貴方が見なければならないサイトについての情報は、
下のwikiのページにまとめてあります。
URLリンク(www.wikiroom.com)
これからJavaでプログラミングを始めたいが、何をすればいいかわからない人も、
wikiからのリンクをおたどりください。

よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 URLリンク(www.wikiroom.com)
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」

前スレッド
【初心者】Java質問・相談スレッド103【大歓迎】
スレリンク(tech板)

/* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。

次スレは>>980あたりで。

2:デフォルトの名無しさん
07/07/27 08:55:33
                          刀、           , ヘ
                  /´ ̄`ヽ /: : : \_____/: : : : ヽ、
              ,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
               /: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
     ,. -─「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
    /: :.,.-ァ: : : |: : : : : : : : :    :\: : : : :: : : :ヽ  \   /: : : :/
    ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i  / /: : : : :/
     /: :     ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/  /: : : : :/         、
.    /: : /  . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : |  /: : : : :/            |\
   /: : ィ: : : : :.i: : |   \!___/ ヽ:: : : : : : :\|:.:.:.:/:!  ,': : : : /              |: : \
   / / !: : : : :.ト‐|-    ヽ    \: : : : : l::::__:' :/  i: : : : :{              |: : : :.ヽ
   l/   |: : :!: : .l: :|            \: : : l´r. Y   {: : : : :丶_______.ノ: : : : : :}
      l: : :l: : :ト、|         、___,ィ ヽ: :| ゝ ノ    '.: : : : : : : : : : : : : : : : : : : : : : /
      |: : :ト、: |: :ヽ ___,彡     ´ ̄´   ヽl-‐'     \: : : : : : : : : : : : : : : : : : イ
        !: :从ヽ!ヽ.ハ=≠' , ///// ///u /           ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
      V  ヽ|    }///  r‐'⌒ヽ  イ〉、
              ヽ、______ー‐‐' ィ´ /:/:7rt‐---、       こ、これは>>1乙じゃなくて
                  ィ幵ノ ./:/:./:.! !: : : : :!`ヽ     ポニーテールなんだから
              r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\   変な勘違いしないでよね!
               /: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\

3:デフォルトの名無しさん
07/07/27 15:36:55
Java Communication APIというものを用いて,PCカードのポートに接続したGPS(機種はI-ODATAの
CFGPS2)から座標などの情報を取得しようとしています.
現在その前段階として,下記のサイトで公開されているポートの種類や数,通信状況を調べる
サンプルプログラムをお借りして,動作確認をしようとしています.GPS機器を接続しているポート
(COM1)が通信状態になるようにするため,他の電子地図アプリケーションなどでGPSからの情報を
受信している状況を作り出し,このサンプルを動作させました.しかしながら,『COM1が使用中で
ある』という出力が得られませんでした.
こちらでお尋ねするのが相応しいのかどうかの判断に困りましたが,一応Javaを使用している
こともあり,今回質問に参りました.なにかアドバイス等頂きたいと存じます.また,他に質問するに
相応しい場所があるようでしたら,お手数ですがそちらへの誘導をお願いします.

よろしくお願いします.

参考URL:URLリンク(www.javainthebox.net)

4:デフォルトの名無しさん
07/07/27 21:40:21
4ね

5:デフォルトの名無しさん
07/07/27 22:05:00
>>3
GPSはシリアルポートとして見える仕様なのか?
ノートでもオンボードでシリアルのチップが載ってるかもしれないので
まずそれを切ること(完全に切れない可能性も高いけど)
それか単にCOM3あたりで見える可能性もあり。あとはハイパーターミナルあたりで
確認すれ。

6:デフォルトの名無しさん
07/07/27 23:33:51
>996
synchronized でガードされるのはステートメントだけ
従って他のsynchronized メソッドおよびに、synchronized(this)で囲まれたブロックが同期化の対象になる
オブジェクト自体は保持しているクラスなどから自由に触れるわけで同期とは関係がないぞ

一般的に言えば、そのクラスの可変な変数に対して読み込みと書き込みを行っているメソッドを全てsynchronizedにすれば同期化の要件は満たす(ただし、実効性能は考えない)

7:デフォルトの名無しさん
07/07/27 23:38:53
javaでmidiファイルの生成中です。

import javax.sound.midi.spi.*;
import javax.sound.midi.*;

で、何とかメロディを作ったり、音色を変えたりできる様になったのですが、
ドラムの音の出し方が分かりません。

どうぞご教授お願いします。

8:デフォルトの名無しさん
07/07/28 00:21:52
マルチか?
それともこっちのスレで質問しなおす事にしたのか?
もしそうならあっちに一言書いてからこっちに書くべきじゃないか?
誘導もされてなかったのに質問だけしてほったらかしってのは正直どうかと思うよ。

9:デフォルトの名無しさん
07/07/28 02:22:02
どっちにしろjavaの質問じゃないね。
midi関連を扱う板/スレへ池。

10:デフォルトの名無しさん
07/07/28 02:34:03
FileInputStream fis = new FileInputStream("flight.dat");

として読み込んだファイルの行数を得る方法ってありますか?
教えてください。m(_ _)m

11:デフォルトの名無しさん
07/07/28 02:36:38
LineNumberReaderってのがある。

12:デフォルトの名無しさん
07/07/28 03:17:27
>>11
ありがとうございます!

13:デフォルトの名無しさん
07/07/28 06:21:58
jarファイルにもクラスファイルにも同じクラスを置いたら、誤作動起こす?クラスノットファウンドとか?

14:デフォルトの名無しさん
07/07/28 06:48:37
クラスローダが先に見つけたクラスがロードされる

15:デフォルトの名無しさん
07/07/28 08:57:22
ソケット通信を実装しています。

スレッドは使わず、Selectorクラスを利用して複数クライアントからのデータ受信を
実現しようと思っているのですが、一つ確認させてください。

Selectorクラスでイベントが発生したチャネルを取得するselectedKeys()メソッドからは
Keyがイベント発生順に格納されているのでしょうか?

Aさんが送信→Bさんが送信→Cさんが送信→Aさんが送信
とやった場合、上記の順序は確実に保証されてselectedKeys()から取得できるのでしょうか?


16:13
07/07/28 11:59:23
>>14
レスサンクス

もう一つ質問
とあるサイトで配布されているjarファイルを使用する時に、
一部のクラスがソースも配布されていたため、
その対象のクラスだけリコンパイルして実際に動かすJava環境と
同じJavaのバージョンでクラスファイルを作成し、
ソースが提供されていないクラスはそのままにして、
それらをもとの一つのjarファイルとして作り直したら、
キャスト変換エラーが起きた。

リコンパイルしてjarを作り直しただけなのに、わけわかんね。


17:デフォルトの名無しさん
07/07/28 12:11:22
>>15
ソケット通信の実装ってかなり高度だぞw

Selector.selectedKeys() はSetを返すように定義されている
従って、順番が保証されているとは通常は考えられない
保証しているならば、SortedとかListを返すだろう

そもそも、送信順番は受信側では基本的に保証できないよ
どんな順番でServerSocketがacceptするかには関与できないから
"おそらく"送信順番に受け付ける、ってくらいじゃね?
そこまでソケット通信の実装をしているならば別だがw

18:デフォルトの名無しさん
07/07/28 13:32:11
オンラインゲームってかw

19:デフォルトの名無しさん
07/07/28 14:01:40
ダイアログを親フレームとの相対位置に表示したいです。
親フレームの絶対位置が分かれば出来そうですが、それを取得する方法が分かりません。
それとも他に適した方法がありますか?

教えてください。

20:デフォルトの名無しさん
07/07/28 14:37:39
javaの基本文法は一通り終了して、更にjavaの勉強を続けようと思うのですが、どのような勉強方法がよいでしょうか?

21:デフォルトの名無しさん
07/07/28 14:41:54
何か作ったことある?
電卓とか○×ゲームくらいは作れる?

22:デフォルトの名無しさん
07/07/28 14:43:47
>>21
アプレットで電卓、それとC言語で○×ゲーム(コンソールアプリ)は作成したことあります。

23:デフォルトの名無しさん
07/07/28 14:48:41
そか
URLリンク(www.geocities.jp)
こういうアルゴリズムとデータ構造の勉強はした?

24:デフォルトの名無しさん
07/07/28 14:53:28
有名なアルゴリズムに関しては基本情報技術者試験の勉強で一通り目を通しましたが、
自分で実装まではしていません。

このようなデータ構造とアルゴリズムは一通り自分で実装して動きを確かめた方がよいのでしょうか?

25:デフォルトの名無しさん
07/07/28 15:05:37
>>16 同名の別クラスがあって、部分的なソースでコンパイルした時と、完全なソースでコンパイルした時ではロードされるクラスが違う、とか。
//////////////Test.java////////////////
public class Test{
 public static void main(String[]args){
  System.out.println(new StringBuffer("Test"));
 }
}
//////////////StringBuffer.java////////////////
public class StringBuffer {
  String a;
  public StringBuffer(String a){ this.a=a; }
  public String toString(){ return a.toUpperCase(); }
}
//////////////////////////////
例えばこんなん。Test.javaだけでコンパイルした場合とStringBuffer.java付きでコンパイルした場合では動作が違う。

26:デフォルトの名無しさん
07/07/28 15:12:40
>>24
そりゃするに越したことはない
ある程度規模の大きなものを作る事と
色んなクラスの使用を経験しておくのがいいと思う

27:デフォルトの名無しさん
07/07/28 15:56:22
javaでエディタ作ろうと思っているんだけど、
TextArea内に行数を表示させる箇所を作るのって不可能ですよね。
今考えてるのは、文章入力用のTextAreaとそれに対応するように
行数表示用で編集不可のTextAreaを並べておこうと思っているんだけど。
もし、swing使ったり他の方法でこれが実現できるようなら教えてもらえないでしょうか。

28:デフォルトの名無しさん
07/07/28 16:07:41
>27
TextAreaの中に書くことは無理
独自にComponentを作成するか、JTableなどと組み合わせれば可能

29:デフォルトの名無しさん
07/07/28 17:10:54
>>25
うーん、自分の環境はそれは考えにくいと思うんだけど。。


30:デフォルトの名無しさん
07/07/28 20:32:42
for(int idx = 0 ; idx < 32; idx++) {
 if (i<<idx < 0) {
    System.out.print("1 ");
 } else {
    System.out.print("0 ");
 }
}
↑はint型の変数iのビット列を表示するやつなんですけど、
これのbyte型バージョンを作ろうとしたらうまく動きません
(for文の条件のところを idx < 8 に変更し、iをbyte型のbに変更)
なぜでしょうか?


31:デフォルトの名無しさん
07/07/28 20:47:42
インターフェースを渡して、それを実装したクラスを返すプログラムを作りたいんですが。
(今はとりあえずから実装)、可能でしょうか?
public class Hoge{
public static Class<? extends T> createClass(Class<T> c){
if(c.isInterface()){
なんらかの手段を使ってメソッドを空実装したクラスをreturn;
}else return null;
}
}
public interface Hello{
String sayHello();
}
public class Hogehoge{
public void main(String[] args){
Hoge.createClass(Hello.class<Hello>);
}
}

32:デフォルトの名無しさん
07/07/28 21:19:28
>>30
たぶん、シフト演算でされる単項数値昇格を忘れてるんだと思う。
シフト演算のオペランドの型が byte、short、char なら
シフト演算する前に暗黙のうちに int 型に変換される。

33:デフォルトの名無しさん
07/07/28 21:25:33
>>32
単項数値昇格ですか。初めて聞きました。
これから調べてみます
どうもありがとうございました。

34:デフォルトの名無しさん
07/07/28 21:31:33
>>31
可能。でも、そこのサンプルなんか変じゃね?

35:デフォルトの名無しさん
07/07/28 23:04:28
このスレで見つけたJUnitとかいうツール使ってみたんだけど、これって戻り値がない場合は使えないの?

36:デフォルトの名無しさん
07/07/28 23:28:20
>35
お前には使えなそうだ

37:デフォルトの名無しさん
07/07/28 23:47:17
>>26
そういうことをやろうかと考えていたのですが、
具体的にはどんなことをすればよいのでしょうか?

38:デフォルトの名無しさん
07/07/28 23:59:15
>>29
考えにくい、じゃなくて実際に確かめようぜ。大した手間じゃないだろ。
うまく行かない時ってのは大抵自分の思い違いが原因でな(だからゴムのアヒルに話すのが有効なデバッグになる)。
すぐにわかる事を調べずに、思いこみでコードいじってる内は若葉マーク取れないよ?

39:デフォルトの名無しさん
07/07/28 23:59:16
>>37
アルゴリズムは知識レベルでも十分だと思う
ソート スタック キュー リスト マップ ハッシュ
これらは既にJavaがAPI化しているからJavadocでも読んで理解してればいい

どっちかっていうと、学校や会社であまり詳しく教えてくれないデザインパターンを勉強した方が為になる。

Java デザインパターン でぐぐれ


40:デフォルトの名無しさん
07/07/29 00:07:17
>>38
レスありが㌧。
一応jarの中身を見たけど、別のjarファイル内にあるクラスファイルとは重複してなかったんだ。
実行時にどのjarファイルを読んでクラスの情報を取得したかについてはデバッガで調べて正しかった。
そのクラスがimport宣言しているクラスが実はJavaのバージョンによっては対象外だったりしてたのかも。。


41:名無しさん@そうだ選挙に行こう
07/07/29 03:21:32
>jarの中身を見たけど、別のjarファイル内にあるクラスファイルとは重複してなかったんだ。
>実行時にどのjarファイルを読んでクラスの情報を取得したかについてはデバッガで調べて正しかった。
複数のjarがあり、ソースのあるjarは別のjarのクラスを利用しているわけか(後付けすんなよ…)。
で、調べたのはそれだけ?同じパッケージ内のクラスは?

>import宣言しているクラスが実はJavaのバージョンによっては対象外
無ければコンパイル時に見つからないと出るし、複数あってもコンパイル時にどれか分らないって出ると思うけど。


つーかそもそもどこまで分ってるんだ?
1.キャスト変換エラーが出る場所が分っている。
2.キャスト変換エラーが出るインスタンスが分っている。
3.キャスト変換エラーが出るインスタンスの本来あるべきクラスが分っている。
4.キャスト変換エラーが出るインスタンスがいつ、どこで作成されるか分っている。
5.キャスト変換エラーが出るインスタンスの実際のクラスが分っている。
6.上記3.と5.は異なっている事が分っている。

#一応ソースとかコンパイル→jar固め手順が誤って無いって前提で話してるけど、そのへんは大丈夫だろうか


42:名無しさん@そうだ選挙に行こう
07/07/29 03:40:42
>>39
Java デザインパターン
でぐぐってみる
サンクス

デザインパターンでオススメの参考書とかってある?

43:名無しさん@そうだ選挙に行こう
07/07/29 03:47:36
>42
CollectionとかSwingの実装
本だと結城本が入門用で定番
個人的にはリファクタリングによるデザインパターン入門とかってやつがオススメ

44:名無しさん@そうだ選挙に行こう
07/07/29 03:55:56
>>43
なるほど
明日本屋行って買ってくる
遅い時間にありがとう

45:名無しさん@そうだ選挙に行こう
07/07/29 15:36:09
FileDialogで選択したファイルのパスとファイル名をTextFieldにsetTextで入れて
そのTextField内の文字列を初期値にFileを作りたいのですがうまくいきません。
そのFileでhashCodeとgetNameを行うためにはどうすればいいんでしょうか?

46:デフォルトの名無しさん
07/07/29 15:39:46
>>41
詳細に説明してくれて、感謝感激雨あられです。

>つーかそもそもどこまで分ってるんだ?
もっと詳しくソース追ってみたけど、実はキャスト変換の前のコードでそもそもの問題が見つかってしまって。。
ClassクラスのforName()のnewInstance()の戻り値が、事前にstaticなオブジェクト変数に値が入っていることで、
別のインスタンスが返されるように出来ているっぽい。コンストラクタ上でforNameの引数に渡したクラス名とは
別のオブジェクトを返すように実装されている感じ。


>#一応ソースとかコンパイル→jar固め手順が誤って無いって前提で話してるけど、そのへんは大丈夫だろうか
jar固め手順とは?

jar -cvf "jarファイル名" "フォルダ1(リコンパイルしたもの)" "フォルダ2(もともとjarに格納されていたもの)" "ファイル(*.propertiesなど)"

みたいな感じでjarを作っている。

もしリコンパイルしたソースが他のパッケージ内のクラスを参照しているのであれば,
上記の場合、フォルダ1とフォルダ2は逆かな?パッケージ名は単純にアルファベット順にならべてんだけど。。




47:名無しさん@そうだ選挙に行こう
07/07/29 16:26:50
>>45
うまくいきませんじゃ、分からないのだが?
そのような内容では、出来るはずですとしか答えられん・・・。
うまくいかないコードをはってくれ。

48:名無しさん@そうだ選挙に行こう
07/07/29 16:53:53
書き込んだあとに調べてみたところ
tf1.setText(fd.getDirectory()+fd.getFile());
とやってはディレクトリの区切り文字が\になってしまってるのが原因のようでした。
この\を\\に置き換えることってできますかね?

49:名無しさん@そうだ選挙に行こう
07/07/29 18:32:40
JFrameの表示座標ってどうにか変えられないだろうか
JButtonに反応して表示するように下はいいけど左上が画面の左上に吸着したような位置にでてしまう

50:名無しさん@そうだ選挙に行こう
07/07/29 19:27:39
public void setLocationRelativeTo(Component c)

引数をnullとすれば画面中央に表示

51:名無しさん@そうだ選挙に行こう
07/07/29 19:50:10
>49,50
setLocationRelativeTo(parentFrame) でね?
 
parentFrameは、JButtonを配置したJFrameな

52:名無しさん@そうだ選挙に行こう
07/07/29 20:09:04
>>49 >>50
setLocationRelativeToでググってみたらsetLocationなんていうのもあるんだな
ちょっとこれ使ってやってみる
返答サンクス

53:デフォルトの名無しさん
07/07/30 12:32:04
ファイルの入出力について詰まったので、教えてください。

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

public class TextReader {

public TextReader(){
try{
String strLine;
FileReader in = new FileReader("stage.txt");
BufferedReader reader = new BufferedReader(in);
while((strLine = reader.readLine()) != null){
System.out.println(strLine);
}
reader.close();
}catch(IOException ie){
System.out.println("error");
}
}
}

↑のようなプログラムで、stage.txtというファイルの中身をコンソール上に表示させたいのですが、エラーになってしまいます。
ちなみにstage.txtというファイルは、このプログラムファイルと同じディレクトリに入れています。
どこがおかしいのかご指摘頂けないでしょうか、お願いします。

54:デフォルトの名無しさん
07/07/30 12:34:42
すいません、書き忘れましたが、
public static void main(String s[]){
TextReader t = new TextReader();
}
もTextReader内に入っています。

お願いいたします。

55:デフォルトの名無しさん
07/07/30 14:34:36
>>53
System.out.println("error"); を ie.printStackTrace() に変えて、
どんなエラーなのか調べれば?

56:デフォルトの名無しさん
07/07/30 14:41:55
>>55
レスありがとうございます。
それを試してみたら(指定したファイルが見つかりません)になりました。
同じディレクトリ内にファイルを入れてるんですが・・・。何かファイルの指定法に間違いがあるんでしょうか?

57:デフォルトの名無しさん
07/07/30 19:07:28
同じディレクトリってどこと同じなんだYO
File file = new Filr("stage.txt");
と書いてみて、絶対パス表示してみろ

58:デフォルトの名無しさん
07/07/30 20:23:24
俺が思うに、綴りが間違ってるんじゃないかな。

59:デフォルトの名無しさん
07/07/30 20:26:28
>>57
うわ・・・なんというミス・・・ありがとうございます。
確かにどこと同じなんだよって話ですね・・・。解決しました。ありがとうございます。

60:デフォルトの名無しさん
07/07/30 20:37:12
次のようなCSVダウンロードプログラムをLinuxサーバー上で実行し、
Windowsでダウロードした場合、なぜか、Windowsで改行コードがCR/LFになってしまう。
なぜ、LFでなく、CR/LFになるのでしょうか?
ブラウザが変換している?
response.setHeader(xxxxxx);
PrintWriter pw = response.getWriter();
pw.println(XXXX);
pw.close();

61:デフォルトの名無しさん
07/07/30 20:41:52
>>60
printlnが出力する改行コードはJVMが動いているシステムにとって自然な改行コードになる。
もし変えたくなければ自分で必要な改行コードを出力する。

62:61
07/07/30 20:44:18
あ、すまん。勘違い。>>61は忘れてくれ。

63:デフォルトの名無しさん
07/07/30 20:51:32
>60
どこにCSVファイルがあるか教えてくれ、ただのサーブレットにしか見えない

64:デフォルトの名無しさん
07/07/30 21:37:00
setHeaderでapplication/octet-streamにする

65:19
07/07/30 23:08:45
どなたか分かりませんか?

66:デフォルトの名無しさん
07/07/30 23:16:40
setLocation / setLocationRelativeTo

67:デフォルトの名無しさん
07/07/30 23:25:27
なんかgdgdだがsetLocationRelativeTo なんてあったのか。
Swingはデカすぎるから困る。

68:デフォルトの名無しさん
07/07/30 23:28:48
SWT/JFaceに比べりゃ・・・
Eclipseで入力補完使いながら、setといれれば直ぐ見つかる程度だろう

69:デフォルトの名無しさん
07/07/30 23:44:22
質問javamail使ってwebmailみたいのつくりたいんだけど、HTMLメールを
どうしようかなって思ってて。
やろうと思ってるのはHTMLタグ(&)だけ抜いて、テキストだけで
実装しようかと思ってるんだけど、HTML抜くライブラリとかってあるの?
smtp実装してるのはあるんだけど、popしてメール表示するようなサンプルって
あんましないんだよね。。誰かやったことある人おしえてください。
文字コードencodingは次考えます。

70:61
07/07/30 23:46:28
プログラムのXXXの部分は適当です。カンマ区切りで出力と仮定しています。
なぜ、Linuxなのに、CRがつくのかがわからないです。

71:デフォルトの名無しさん
07/07/31 00:13:39
JMSって何をする目的で使うのでしょうか?

72:質問です
07/07/31 01:11:55
サーブレット間通信について質問です。

あるコンテキスト内で2つのサーブレットが起動しています。
この片方からもう片方のメゾッドを呼び出すことが出来ることを知りました。
書籍には
Servlet ServletContext.getServlet(String str)
でもう片方のサーブレットを取得できると書いてありますが、
如何せん書籍が古いため、現在このメゾッドはサポートされていないそうです。
同等の機能を実現するためにはどうすればいいのでしょうか?

73:デフォルトの名無しさん
07/07/31 06:17:50
>>61
Servletの設定がそうなっているんじゃない?

>>72
相当古い本だな、それ
そのメソッドをServletではなく共通で使える普通のクラスにすればいい
Servletの何か(パラメータ等)が必要ならば、それを引数に渡せばOK

74:質問です
07/07/31 09:23:13 BE:42319687-2BP(6)
>>73
回答ありがとうございます。
片方のサーブレットが持つ情報をもう片方がほしければ、
その「普通のクラス」のstaticなクラス変数を介してもらえばいいということでしょうか?

75:デフォルトの名無しさん
07/07/31 15:45:43
予約後って全部暗記したほうがいいの?

76:デフォルトの名無しさん
07/07/31 15:48:27
うん

77:デフォルトの名無しさん
07/07/31 16:52:41
Math.abs(-10);
のメソッドの結果がなんで-10じゃなくて10なんですか?

78:デフォルトの名無しさん
07/07/31 17:08:02
[バージョン]JDK1.5
[内容]
java.util.concurrent パッケージの ArrayBlockingQueue と LinkedBlockingQueue は
どのように使い分ければ良いのでしょうか。

URLリンク(java.sun.com)
URLリンク(java.sun.com)

実際にやろうとしていることは、ThreadPoolExecutor 生成でこれらを用い、

・実行されるスレッド数の上限を決めたい(例えば10)
・上限に達したら、submit された際キューに積まず例外で返したい

なのですが、この場合、

ThreadPoolExecutor executor = new ThreadPoolExecutor(10, 10, 0L,
    TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>(10));
executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());

と言った感じで良いものなのでしょうか。

URLリンク(www-06.ibm.com)
を見ると、LinkedBlockingQueue だと取りあえず受けてしまう様にも見えるのですが、
Javadoc の説明からは読み取りきれず悩んでいます。

79:デフォルトの名無しさん
07/07/31 18:24:09
>>77
Math.abs がどんな機能なのか知ってるか?

>>78
>どのように使い分ければ
Array~は固定サイズ限定だから、無限にしたければLinked~を選ぶしかない。
でなければ、別にどっちでも。

>実行されるスレッド数の上限を決めたい(例えば10)
>上限に達したら、submit された際キューに積まず例外で返したい
SynchronousQueue を使う。
他のキューだと、スレッド数が上限に達しても、さらにキューが一杯になるまでタスクが溜まる。

80:デフォルトの名無しさん
07/07/31 18:52:16
>>77
現役中学生に聞いてみれば?

81:デフォルトの名無しさん
07/07/31 18:54:22
>>80
なんで?
Math.absってどういう意味?Mathはなんとなく数学っぽいが。

82:デフォルトの名無しさん
07/07/31 18:56:44
absは阿部さんの略

83:デフォルトの名無しさん
07/07/31 19:12:25
つーかjavadoc嫁よ屑

84:デフォルトの名無しさん
07/07/31 19:44:07
>>82
つまんねぇんだよカス

85:デフォルトの名無しさん
07/07/31 19:48:11
ご、ごめん

86:デフォルトの名無しさん
07/07/31 19:55:48
質問させていただきます。
ArrayList を Iterator で順序アクセスした場合、この順序はもとのリストの順序と一致しないのでしょうか?

87:デフォルトの名無しさん
07/07/31 20:30:05
一致する

88:デフォルトの名無しさん
07/07/31 20:43:36
てか順序が一致しないListってあるの?
Setと違って並びありきなクラスだと思うんだけど。

89:デフォルトの名無しさん
07/07/31 21:05:26
一致しないとまずすぎるだろ常考・・・

90:デフォルトの名無しさん
07/07/31 21:11:38
>>88
no

91:デフォルトの名無しさん
07/07/31 21:13:29
セックル中?

92:デフォルトの名無しさん
07/07/31 21:16:09
回答ありがとうございます。
自分もそう思って、

for (int i=0; i < list.size(); i++) {
// list.get(i) を処理
}



for (Object obj: list) {
// obj を処理
}

のように書き換えたら問題がおきたのです。
他の問題があったのかな。

93:デフォルトの名無しさん
07/07/31 21:31:13
どんな問題が起きたんだよw
ClassCastExceptionとかNullPoだったら氏ね

94:デフォルトの名無しさん
07/07/31 21:39:48
>>78
最初にExecutors.newHogeHoge の標準ファクトリメソッドで生成されるものを使うのが推奨されている。
それでダメならばカスタマイズ汁

で、こんな場所で質問しているヤシはマルチスレッドなんかに手を出すべきじゃない

95:デフォルトの名無しさん
07/07/31 21:46:57
こんな場所で質問しているヤシはJavaなんかに手を出すべきじゃない

96:デフォルトの名無しさん
07/07/31 22:23:16
じゃあどの言語がいいんだよ

97:デフォルトの名無しさん
07/07/31 22:53:34
>>96
それをこんな場所で質問しているヤシはプログラムなんかに手を出すべきじゃない


98:デフォルトの名無しさん
07/07/31 23:09:41
じゃあこのスレにいるやつらはなんなんだよw

99:デフォルトの名無しさん
07/07/31 23:31:39
質問があるんですが,アプレットで文字とかを描画するときに,
paintメソッドで,Graphics gとかを引数にとっていると思うのですが,
gが良くわかりません.
他のクラスから,アプレットのメソッドを呼び出したりして,
アプレットに文字列を描画したいのですが,gのところをどうすればよいかわかりません.
どなたか詳しい方教えてください

100:デフォルトの名無しさん
07/07/31 23:43:30
>>99
もしかして、paintを自分から呼び出して描画処理を行おうとしていない?
paintには描画したい内容を記述して、
それを呼び出すのはjavaの処理系が再描画すべき時点でやってくれる。
もし自分から描画させたい場合はpaintを直接呼び出さず、
repaintなどの再描画を促すメソッドを呼び出せばいい。
こちらからアクティブに描画する方法もあるが、
初心者のうちはこういうパッシブ描画でがまんしておけ。

101:デフォルトの名無しさん
07/07/31 23:43:40
>>99
gは大事にしてね。
引数渡しするかキャンバスクラスに実装して使い回せばおk

102:デフォルトの名無しさん
07/08/01 00:16:19
>>101
使いまわしたら生きてるか死んでるかの確認と再生成を自力でやらなきゃいけなくない?

103:デフォルトの名無しさん
07/08/01 00:34:08
すみません、自力では限界なので誰か教えてください。
当方、専門学校の選択でJAVAを取った1年生です。

Eclipseを使ってJAVAをやっているのですが
import model.product;
の行で「インポートされた model は見つかりません。」とエラーが表示され、先に進めず困っています。

このぐらい自力で解決しろ、と思われますが、
検索をかけても解るものがヒットしないのです、どうか宜しくお願いします。

…教諭がソース(コメント、解説無し)のプリントを配布するだけで質問に答えてくれないんです。

104:デフォルトの名無しさん
07/08/01 00:55:35
パッケージを理解しろ。「java パッケージ」でぐぐれ。
srcフォルダの下に、model/product っていうディレクトリはあるのか?

専門学校ってEclipseとかやるんだ。

105:デフォルトの名無しさん
07/08/01 01:37:05
専門学校でツール使うばあい、ツール教える側が理解してなくてカオスってるときがあるけどな。

それでサポやらされる身にもなってみろ。

106:デフォルトの名無しさん
07/08/01 01:51:48
じゃあやめちまえ

107:デフォルトの名無しさん
07/08/01 02:26:30
>>103
>質問に答えてくれないんです

嘘つくな

108:デフォルトの名無しさん
07/08/01 02:32:44
int test[]={80,43,43,32,84};

109:デフォルトの名無しさん
07/08/01 02:40:44
>>103
どこの学校か教えてくれたら、完全な解説を書きます。

110:103
07/08/01 06:19:13
>104
回答有難う御座います、srcというフォルダ自体がありません。
Wikipediaでパッケージというものがどういうものか、一応は理解できたつもりです。

プリントの中に package model.Product; と書かれたソースファイルが無いです…

>105
多分その通りかと…とても若い人で出欠取ったらどこかへ行ってしまいます。

>106
辞めてもいいのですが単位が…

>107
授業中に質問ができなく、職員室に突撃して聞いても「自分で調べろ」の一点張りで…

>109
日本工学院です

111:デフォルトの名無しさん
07/08/01 07:55:06
>授業中に質問ができなく、職員室に突撃して聞いても「自分で調べろ」の一点張りで…

質問に答えるとボロが出るからな


112:デフォルトの名無しさん
07/08/01 11:27:37
>>110
model.product なんてクラスが必要なければそんな import 文は単に消しちまうか、
どっかで使われてるなら model パッケージを作って product クラスを適当にでっちあげればいいんでない。

113:デフォルトの名無しさん
07/08/01 15:00:44
>>103
エラーメッセージをググる事を覚えるといいかも。
例えば「インポートされた は見つかりません」
固有部分を抜いて検索してみるのね。

114:デフォルトの名無しさん
07/08/01 18:11:16
配列のソートがよくわからん。
誰かおせーて。

115:デフォルトの名無しさん
07/08/01 18:12:34
>>114
URLリンク(www.geocities.jp)

ここら辺の話?

116:デフォルトの名無しさん
07/08/01 18:43:30
>>114
Arrays.sort で出来るよ

117:デフォルトの名無しさん
07/08/01 19:18:47
専門学校の教師に聞いた話だが、2年制とかになると早めに辞めさせてしまう方が評価が高いらしい
下手に全員が進級すると教室が足りないんだってw

118:デフォルトの名無しさん
07/08/01 20:07:32
>>117
教室と言うか教室の中にある設備機材のほうだなw

だから講師が生徒潰しにかかって、それに触発されて生徒間も潰し合いし出して
マジで頭おかしくなって精神科・心療内科行く奴が増えて
そっち系の知識が豊富になりつつ、潰し合いに生き残った者たちはどんどん専門学校に洗脳されて外でワケワカメな事言いだすんじゃないか。

そもそも、コンピュータ系専門に常駐してる講師なんて業界の底辺から溢れて食ってけないから講師をry
それを補うためにたまに外部からプロ呼ぶんだろうが。


119:デフォルトの名無しさん
07/08/01 21:48:40
>>118
まるでヒューマ○みたいな専門学校だなww
もっとツールを使わないで一から作る技術を身につけたほうが
いいんだろうけど。

120:デフォルトの名無しさん
07/08/01 22:08:50
ツール類の環境を整えてるのが売りなんじゃ?
まあ、今は学生書があれば激安で一式そろえれるから今は独学でも勉強が。

仕事で使うような自社ライブラリとかはそもそも入手できないし。
仕事で使う数十万から100万するモデリングツールや動画編集ソフト類も無理だろうし。

121:デフォルトの名無しさん
07/08/01 23:09:58
JMSのことが詳しくのってる本かサイトはありませんかね?
できれば日本語希望です。

122:デフォルトの名無しさん
07/08/01 23:16:50
JMSなりActiveMQでぐぐって、最初のリストに出てくるサイトの中に無ければないんじゃね?

123:デフォルトの名無しさん
07/08/02 01:38:04
struts関連の事ですので、多少スレ違いかも知れませんが
ご容赦下さい。

環境:JDK1.5 apache+tomcat struts winXP (+Exlipse3.2 All in One)

アクセスログ出力の為、RequestProcessorを拡張する事に
なりました。(Actionのexecute発行前後でログを出す)

で、今回画面項目のチェック等でvalidationを使用する為、
TilesPluginとTilesRequestProcessorを使用しています。

(参考www.atmarkit.co.jp/fsecurity/rensai/struts03/struts03.html)
上記サイトを参考にし、TilesRequestProcessorをextendsした
クラスをstruts-config.xmlのcontroller processorClass に
指定していますが、何の反応も有りません。
(ロジックを通っていない、エラーも特に起きない)
((エラーが起きる様なロジックをわざと用意しても同様))


で、PukiWiki様の説明によると、TilesPlugin使用時には
TilesRequestProcessorが自動的に指定される、との事でした
ので、ワザとcontroller processorClassに変なクラスを
指定してみたりもしたのですが・・・・やはり何も起きません。


上記の結果、controller processorClass指定時は。
他の設定ファイル(web.xml等)も設定が必要なのでは?
他に設定が無い限り、TilesRequestProcessoの自動指定
が外れないのでは無いか?と疑っているのですが、何か
ご存知の方、他に設定が必要でしたらお教え下さい。
お願い致します。

124:デフォルトの名無しさん
07/08/02 08:07:54
URLリンク(www.atmarkit.co.jp)
URLリンク(www.atmarkit.co.jp)

125:デフォルトの名無しさん
07/08/02 11:15:57
統計ライブラリは何を使ってますか
フリーのものでお勧めのがあればご紹介ください

126:デフォルトの名無しさん
07/08/02 12:17:49
setColorでRGB値で色を作ろうとした時に、
色を格納している変数の名前をr,g,bにしていたところ、

hoge.java:18: シンボルを見つけられません。
シンボル: コンストラクタ Color(int,java.awt.Graphics,int)
場所    : java.awt.Color の クラス
g.setColor(new Color(r,g,b));

というエラーが出たのですが、これどういうことでしょうか?
変数名をred,green,blueに変えたらコンパイルちゃんと通ったのですが、
引数に禁止されてる変数名とかあるのですか?

127:デフォルトの名無しさん
07/08/02 12:33:40
>>126
gの型は何のつもりなんすか。int or Graphics?



128:デフォルトの名無しさん
07/08/02 12:39:59
>>127
あ…Graphics gを引数で受け取ってて、
記憶域の都合で関数外でint r,g,bを宣言してたから
名前が被ってた…orz
Javaは昨日からだけどC/C++は2年くらいやってるのに
何をこんな間違いを…orz
ちょっと吊って来ます。

129:質問です
07/08/02 12:47:08 BE:9069034-2BP(6)
java で特定の日時を保存するには何のクラスを使えば適切なのでしょうか?

130:デフォルトの名無しさん
07/08/02 12:56:48
>>129
君の言ってる保存って何?
ファイルに出力する事?

131:質問です
07/08/02 13:15:19 BE:11335853-2BP(6)
>>129
あ。すいません。
メモリー上で保持することです。JavaPlatform SE 6でお願いします。
Dateかと思ったんですが、ドキュメントをみるとメンバー関数に
推奨されてない的なことが沢山あったので別にあるのかなと思って質問いたしました。

132:質問です
07/08/02 13:42:15
int i;
for (int j = 1 ; j <= 9 ; j++){
i = 2 * j;
System.out.println("2 × " + j + " = " + i);

for文なんですが、出力部分の"+"の意味がわかりません。
どういう意味なんでしょうか?

133:デフォルトの名無しさん
07/08/02 13:45:34
>>131
yyyy年MM月dd日 hh時mm分ss秒のDateインスタンスを作りたいってことね。
java.util.Calendarを使うこと。例えば今日の日付ならこうなる。

Calendar cal = Calendar.getInstance();
cal.set(2007, 7, 2, 13, 32, 40); // 2007年8月2日 13時32分40秒
Date today = cal.getTime();

Calendar#set()の第二引数は月の指定だが、0スタートなので注意。
詳しくはjavadoc参照。

134:デフォルトの名無しさん
07/08/02 13:49:37
>>132
System.out.println("aaa"+"bbb");
表示されるのは「aaabbb」

int x=5;
System.out.println("aaa"+"x");
表示されるのは「aaax」

int x=5;
System.out.println("aaa"+x);
表示されるのは「aaa5」

135:デフォルトの名無しさん
07/08/02 13:50:26
>>132
+は文字列同士の連結の意味
iとかjはintだけど文字列に自動で変換されたあとで連結される
たとえばj=3,i=6の場合、
System.out.println("2 × " + j + " = " + i);

System.out.println("2 × " + "3" + " = " + "6");

System.out.println("2 × 3 = 6");
になる

136:デフォルトの名無しさん
07/08/02 13:50:35
>>132
なんだ、足し算教えろっていってるのか?

137:デフォルトの名無しさん
07/08/02 13:51:45
>>132
文字同士の連結
文字通りの足し算だね

138:質問です
07/08/02 13:52:10 BE:31739876-2BP(6)
>>133
おおお、詳しくありがとうございます(ノ∀`)
参考になりました

139:デフォルトの名無しさん
07/08/02 13:57:15
さすがに千葉工業大学だなw
つりもレベル低いや

140:デフォルトの名無しさん
07/08/02 20:23:37
よくわかったね

141:デフォルトの名無しさん
07/08/02 21:20:10
よくわかるも何も自己紹介してるじゃん

142:デフォルトの名無しさん
07/08/02 21:23:20
Be付けて恥さらし(笑)

143:質問です
07/08/02 21:35:16 BE:7557252-2BP(6)
>>142
ニセ者をニセ物と見抜けないおまいも(略

144:デフォルトの名無しさん
07/08/02 21:44:49
やってることが恥晒しってことだろ

145:デフォルトの名無しさん
07/08/03 10:03:28
JTextAreaで表示するテキストの行間の間隔を変えたいのですが、それっぽい設定が見つかりませんorz
どこをいじれば良いのでしょうか・・

146:145
07/08/03 12:02:22
自己解決しました。

147:デフォルトの名無しさん
07/08/03 12:32:27
してないです。

148:デフォルトの名無しさん
07/08/03 13:07:38
test

149:デフォルトの名無しさん
07/08/03 14:09:41
メゾッド内で引数に与えられたboolean型の値の変更をするために
Boolean型を使おうと思っているのですが、使い方がよくわかりません。

private void _found_error(Boolean error_frag)
{
  error_frag = Boolean.valueOf(true);
}

public void readFormData()
{
  // 初期値はfalse
  Boolean error_frag = Boolean.valueOf(false);

  // 内部でtrueにしているはずなのに
  _found_error(error_frag);

  if(error_frag.booleanValue())
  {
// なぜかここが実行されない
  }
}

何が悪いのか教えてください

150:デフォルトの名無しさん
07/08/03 14:32:02
_found_error の error_frag が指す先を別のオブジェクトに変えても、
readFromData の error_frag が指す先は変わらないから。

151:デフォルトの名無しさん
07/08/03 14:33:43
>>149
Boolean はimmutableなのでインスタンスの状態の変更はできない。
そしてJavaは全て値渡し。
error_frag の参照値がコピーされて _found_error に渡され、
_found_error ではコピーされた参照値をBoolean.valueOf(true) が戻す参照値で上書きする。
その際、readFromData の error_frag は影響を受けない。

解決法としてはインスタンスメソッドなら error_frag をインスタンス変数にする、
それが嫌なら boolean[] やら class MyBoolean{ boolean flag; } を使うなどして
インスタンスの状態を変更できるものを使う。

152:デフォルトの名無しさん
07/08/03 14:38:54
考えてみれば
error_frag = Boolean.valueOf(true);
ではerror_fragの実体の指す先が変わってしまいますよね、失礼しました。

値を変えたいboolean型をこれらのメゾッドの関数が含まれるクラスのメンバー変数にして
解決することにしました。

どうもありがとうございます。

153:デフォルトの名無しさん
07/08/03 15:10:46
連絡がありません。いいかげんな対応をされては困ります。あと一週間以内に何も連絡が無い場合、
落札者都合で削除すると同時に悪い評価が付きます。

154:デフォルトの名無しさん
07/08/03 15:42:52
ServerSocket.accept()や、BufferedReader.readLine()のような
入力がある、終わるまで待機するような方法を探しているのですが、スレッドを使って値を

155:デフォルトの名無しさん
07/08/03 15:45:24
途中で書き込んでしまったorz
ServerSocket.accept()や、BufferedReader.readLine()のような
入力がある、終わるまで待機するような方法を探しているのですが、スレッドを使って値を
監視する、以外に方法はないでしょうか?なんかこれだとCPUの無駄遣いのような気がしますし
もっと効率のいい方法がないかなと。


156:デフォルトの名無しさん
07/08/03 16:05:35
何を待ちたいのかわからないが、
自スレッドを Object#wait で寝かせて、他のスレッドから #notify もしくは #notifyAll で起こすことはできる

157:デフォルトの名無しさん
07/08/03 16:09:32
それか、複数のソケットを同時に待ちたいってことなら、Selector を使うと幸せかもしれない。
ぜんぜん違う話なら、もっとくわしく・・・

158:デフォルトの名無しさん
07/08/03 18:22:06
初期状態の時にJListが描画(表示)されません。
中央の"set"の下らへんをクリックするとJListが初めて描画される感じです。
これを簡単に解決したいんですが、どうしたらいいでしょうか?
やはり、上の描画部分はCanvasで下はボタン等のパネルにすべきでしょうか?

URLリンク(up.spawn.jp)

159:デフォルトの名無しさん
07/08/03 18:22:51
すいません、"set"じゃなくて"m"です。とりあえず中央のボタンの下らへんにJListがあります。

160:デフォルトの名無しさん
07/08/03 19:00:50
thread内でDBにSELECTしたりINERTしたりする時ってデッドロックって起きる?
同じテーブルの同じレコードに同時にINSERTしたりしたら起きるんかな?

161:デフォルトの名無しさん
07/08/03 20:01:20
>>159
まあ、SwingというかAWTから勉強した方が良い。

162:デフォルトの名無しさん
07/08/03 20:12:21
>>158
とりあえず super.paint(g);

レイアウトマネージャとか、AWTとSwingを混ぜるなとか、色々あるけど、まぁね。がんばれ。。

163:デフォルトの名無しさん
07/08/03 20:18:01
そもそもprintConponent()な。

164:デフォルトの名無しさん
07/08/03 20:20:08
paintComponentじゃね?

165:デフォルトの名無しさん
07/08/03 20:25:51
>>157
Jinputを使ってgamepadからの入力を受け付けるんですけど
Jinputだといわゆるイベント(keyEvent)とかを発行しないんです。
だから現状はいつボタンが押されたか常にスレッドで~msごとに
どのボタンが押されてるかチェックしてるんですが、
もっと効率よくイベント発行するタイミング(ボタンおされた時)を調べるにはどうしたらいいかなと。


166:デフォルトの名無しさん
07/08/04 00:33:16
jinputなんか知りまへん・・・と言いたいが、そのうち自分も使いたくなるかもしれないから調べてみる。

・・・・・・
だめっぽいね。 一定時間ごとに poll するしかなさそうです。
よく考えたら DirectInput も joyGetPos も自分で取りに行くしかないっけか。。。
結論 → むり

167:デフォルトの名無しさん
07/08/04 09:28:53
ソースコード上に書いたクラスのフィールドやメソッドの順番って、
コンパイル後やHotSpotコンパイラがネイティブコンパイルした後も維持されますか?
どのVMならというのではなくて、言語仕様としてどうなのかなと。

168:デフォルトの名無しさん
07/08/04 10:37:28
ソースの字面出現順にメモリにアラインメントされるかってこと?

それなんて構造体?

javaはレジスタすら動的に配置して定期的にメモリ内容かわってるのに。
ていうか配列すら最適化のために連続しておかれる保証はないのに。


169:デフォルトの名無しさん
07/08/04 11:24:42
>>155
Swingとかでの話か?
1文字入力がある度に、KeyEventListenerで拾って処理するってのが定石
お前さんが思うほど不可はかからない
もしくは、フォーカスが外れたタイミングで処理する

CUIとかでの話であれば、System.in.read() 等はブロックする筈

170:デフォルトの名無しさん
07/08/04 11:54:11
自作classの使用方法についての質問です。

次のような構造でDBにアクセスするプログラムを作成しています。

(Console)--[入力取得と出力]--[データ加工]--[DBAHelperImpl implements DataStoreAccessHelper]--(MySQL)
注 [xxx]:自作Javaクラス、(xxx):システム外部を表します

[DataStoreAccessHelper]は、情報の取得、情報の保存、取得した情報からオブジェクトを作成、
取得した情報をjava.util.Listで戻す、などのメソッドを宣言したインタフェースです。
[DBAHelperImpl]は、そのインタフェースをMySQL用に実装したクラスです。

ここで、[DBAHelperImpl]を使用する方法について調べたところ、3通りの方法が見つかりました。
(1) DBAHelperImplをnewして使用する
(2) DBAHelperImpl内にstaticなインスタンスを作成し、
   作成したインスタンスをDataStoreAccessHelperとして戻すメソッドを通じて使用する
(3) DBAHelperImplをDataStoreAccessHelperとして作成して戻すクラスを新たに作り、
   そのクラス経由で取得、使用する

私は(1)の方法で使用していたのですが、(1)の方法はあまり勧められないとの記述があり、迷っています。
諸兄のご意見をお聞かせください。

171:デフォルトの名無しさん
07/08/04 12:03:26
>>168
> 配列すら最適化のために連続しておかれる保証はない
まじでか。まあデカイ配列で落ちられても困るから有りだけど。

172:デフォルトの名無しさん
07/08/04 12:34:34
>>170
(1)の方法で勧められない理由は何か説明できる?
説明できないならば、(1)の方法でも何も問題ない。

(2)は結局はImplがどれかを知らなければならないので(1)と何も変わらない
(3)はいわゆるFactoryクラスを作るパターンだが、Implを状況に応じて使い分ける必要がないならばただのオナヌー

173:デフォルトの名無しさん
07/08/04 12:42:55
(2)は後のリファクタリングを意識した冗長設計だな。
シングルトンにしたほうが都合が良いなら、内部でそうすればいいし、
DBAHelperImplに致命的なバグがあり、
工数的に他所のDAOをラップして返した方が都合が良い場合もある。

174:デフォルトの名無しさん
07/08/04 12:49:43
>>167
フィールドは並び替えられているという話を読んだ覚えがある。
char a;
int b;
char c;
みたいなのを順番どおり並べると隙間が出来て無駄なんで
int b;
char a;
char c;
に並び替えて隙間を詰める。

175:デフォルトの名無しさん
07/08/04 13:17:36
低レイヤーの話をするのは無意味。Cじゃないし。

176:デフォルトの名無しさん
07/08/04 13:23:32
>>171
javaの配列が短形でなくて良いのはどうせ最適化されて実行時に都合の良いように再配置され凸凹になるから。

メモリアドレスで言えば番地が連続している訳ではないし、その必要も無い。

配列要素nがあったとして番地的にn+1の要素が隣の番地にあるとは限らない。

だからjavaの配列は順次アクセスが早いとは限らない。


177:デフォルトの名無しさん
07/08/04 13:27:36
まあこのくらいの問題なら自分でアラインするより
よっぽどスマートなメモリの使い方する(文字列以外)から気にしたら負け。


178:デフォルトの名無しさん
07/08/04 14:58:42
javaで構造体(みたいなもの)を定義してその中のある要素でソートするにはどうしたらいいですか?
たとえば
名前、身長、体重のデータからなる構造体を身長の高い順から表示するようなプログラムを作りたいんですが。

179:デフォルトの名無しさん
07/08/04 15:30:54
compareTo

180:デフォルトの名無しさん
07/08/04 15:31:04
OSのシステム言語を英語にするとコンソールの日本語が文字化けしてしまうのですが
システム言語に関係なく日本語を文字化けさせないためには、どのようにすればよいのでしょうか?

ロケールなどを設定してもダメでした…

181:デフォルトの名無しさん
07/08/04 15:32:07
仕様です

182:170
07/08/04 15:45:23
お答えありがとうございます。
現時点では(1)を否定する理由が思いつかないため、(1)でいこうと思います。

その後いろいろ調べてみました。
(2)を採用する理由は、実装クラスの内部的な変更に強くなる(インタフェースのメソッドのみを使用している限り、利用する側の修正がない)。
(3)を採用する理由は、実装クラスそのものが別のクラスに変更されることに強くなる(データストアがWeb、Fileなどに変わっても使える)。

このように理解したのですが、これで問題ないでしょうか。

183:デフォルトの名無しさん
07/08/04 17:36:18
> (2)を採用する理由は、実装クラスの内部的な変更に強くなる(インタフェースのメソッドのみを使用している限り、利用する側の修正がない)。
> (3)を採用する理由は、実装クラスそのものが別のクラスに変更されることに強くなる(データストアがWeb、Fileなどに変わっても使える)。

(2) と (3) はほとんど同じことだと思うが。

(2) は DBAHelperImpl のメソッドで取得するとはいえ、
実際に何のクラスが返されてるか外からはわからないわけで。
別のクラスにすりかえることはカンタン。

184:デフォルトの名無しさん
07/08/04 18:04:03
どなたかListについて教えていただきたいのですが

例えばArrayListでインスタンスを生成したListの変数があり
そのリストには1000個の要素(文字列)が入ってるとします。
もっと具体的に書くと文字列"AAA"と"BBB"と"CCC"が
それぞれ100個、400個、500個リストに格納されてるとして
(格納されてる文字列の並びは適当)
このときリストに格納されている各文字列の存在個数を高速に割り出す方法はありますでしょうか?

パフォーマンスを無視すれば配列のサイズ分だけ回せば可能ですが
それだと配列のサイズの二乗になってしまうので可変長データでやるにはかなり非現実的ですので

185:デフォルトの名無しさん
07/08/04 18:14:53
>>184
ソートしてからなら1次でしょ。
StringはComparable<String>を実装してますよん。

186:デフォルトの名無しさん
07/08/04 18:17:15
コピーしてマージソートしてから1週舐めるなら
文字列の種類が少ない場合に遅くなるかもしれんけどね。

187:デフォルトの名無しさん
07/08/04 18:22:50
ハッシュマップで数えるとか。
for (String s : list) {
if (hashmap.containsKey(s)) {
hashmap.put(s, map.get(s) + 1);
} else {
hashmap.put(s, 1);
}
}

188:デフォルトの名無しさん
07/08/04 18:26:02
TreeSetじゃだめなん?

189:デフォルトの名無しさん
07/08/04 18:27:08
あーSetはだめだった。

190:デフォルトの名無しさん
07/08/04 18:40:40
>>187の方法でやったことあるけど十分早かったような

191:デフォルトの名無しさん
07/08/04 18:41:43
いま軽くコレクションクラスでソートしてみたら恐ろしく簡単にソートできたので
>>185様の案で行くことにしました。ありがとうございました。

192:デフォルトの名無しさん
07/08/04 18:52:16
ソートする必要なければ TreeMap/TreeSet よりか HashMap/HashSet のが速いよ
Tree の利点はキーが常にソート順を維持されてるところ
Hash は順序不定

193:デフォルトの名無しさん
07/08/04 18:58:05
それじゃ187様の方法で行きます。ありがとうございました

194:デフォルトの名無しさん
07/08/04 19:12:46
ところでListの配列をHashMapに変換または簡単に作成する方法ある?

195:デフォルトの名無しさん
07/08/04 19:32:16
キーはいかがなさいますの?

196:デフォルトの名無しさん
07/08/04 19:44:35
やっぱソートして比較することにした

197:デフォルトの名無しさん
07/08/04 19:50:02
Stringのマイクロベンチマークは、String.equalsが落とし穴になるよな。
例えば定数をコンソールやテキストから入力するなら、s1 == s2 で true になることは無い。
静的にデータを持つならnew String(CONST_STR)みたいにしとくことが必要になる。

こういう正しいテストデータ作成用のライブラリってない?

198:デフォルトの名無しさん
07/08/04 19:53:25
>>197
何がやりたいか分からん

199:デフォルトの名無しさん
07/08/04 19:54:20
マイクロベンチマークがしたい。

200:デフォルトの名無しさん
07/08/04 20:01:55
>>180
コンソール側のページコードでどうにかならない?

201:デフォルトの名無しさん
07/08/04 20:02:07
>new String(CONST_STR)みたいにしとくことが必要

ここがわからない。

>正しいテストデータ

ここもわからない。

202:デフォルトの名無しさん
07/08/04 20:04:55
>>201
> ここがわからない。
>> 例えば定数をコンソールやテキストから入力するなら、s1 == s2 で true になることは無い。

言語仕様がわからないなら介入しなくていいから。

203:デフォルトの名無しさん
07/08/04 20:05:37
equalsつかえよ

204:デフォルトの名無しさん
07/08/04 20:08:27
迷惑だからキミは絡まないで。

205:デフォルトの名無しさん
07/08/04 20:08:54
とりあえず>>197はアホ

206:デフォルトの名無しさん
07/08/04 20:10:20
String.equalsの仕様を知らない馬鹿がなんか邪魔してくる・・・

207:デフォルトの名無しさん
07/08/04 20:43:25
オブジェクトが一致する場合と一致しない場合で、equals が true になる場合の計算コストが違うことをいってるわけ?
トーシロの俺には何がなんだか(´・ω・`)

208:197
07/08/04 20:46:30
事故解決しますた

209:208
07/08/04 20:48:48
誤爆です><

210:デフォルトの名無しさん
07/08/04 20:57:44
     /ニYニヽ
    /( ゚ )( ゚ )ヽ
   /::::⌒`´⌒::::\   でっていうwwwwwwww
  | ,-)___(-、|
  | l   |-┬-|  l |
   \   `ー'´   /


211:デフォルトの名無しさん
07/08/04 21:55:52
存在個数なら、ListなめてMapにカウント突っ込んでいけばいいんじゃないの?

212:デフォルトの名無しさん
07/08/04 22:36:53
パフォーマンスの問題は、実際にパフォーマンス上の問題が起きてボトルネックが発見できた場合に対処すればいい。
机上の空論でのパフォーマンス対処ほど無駄なものはない

213:デフォルトの名無しさん
07/08/04 22:40:59
 /i /{/'⌒'}  }}Y/ / ,r-、ヽ,  /
 ノ、|、ヾ_,,ノ  ノ ノ{ ヾ {^')) }フ/ /          _/
   \ヽ、    彡'`、、  'ー' ノ //",,゙ """ /    ヽ 理  議  そ
 ヽ-、ミ‐-、、 、,r=‐'¬ー=、、,-‐'_ ヽ、    /ノ     /  解  論  の
 ミ/   ~          ̄ノ /\   /彡 ""  |/   で   し  な
  /   ,'    u ∪   ! ヽ  | i、゙ー''"彡     /|   き  て  め
  、、∪ / ノ /  _,,,...-‐‐ニ=,ノ,,/ ヽ、,,_ \   ,イ / |   な  い  方
  ニ、=!, l_. レr=-ニ二、,,,.-'"    ー、==-ヽ'"/ / ヽ   い  る  を
  、(・,)>ノ⌒  ∠,(・,)_く  ゙`   ヽ゚ノ`ー=、_ /// ∠  の  こ
    ̄/""゙   ヽ ̄ ̄  \ヽ      ̄ ̄ //   ノ  か  と
  u 〈  、     u   (ヽ          //     ̄ノ ?  も
    ヽ -'   lj     >、       //  /    ̄ヽ、
    /ヽー‐ 、      /'"´ 'i     //  /       ∨ヽ/
    ^゙"⌒ヾ、     ,i|  ,"__}    //  /  /
    ー-  -      ヽ_人`'′ //  /  /
               / i'゙' /-─‐‐''/_/_
   、         _/-‐ヽ、___,,,, -‐‐  ̄
   ー-、、,,__,-‐'//ノゝノ ノ  ヽ\

214:デフォルトの名無しさん
07/08/04 22:45:30
>問題が起きてボトルネックが発見できた場合に対処すればいい

どこの腐れ初心者ですか?
あ、ここは初心者スレか。悪かった

>机上の空論でのパフォーマンス対処ほど無駄なものはない
何千件とデータ回す場合を考えたら目に見えて明らかなんだが頭大丈夫かお前?

215:デフォルトの名無しさん
07/08/04 23:00:33
それは凄い動体視力

216:デフォルトの名無しさん
07/08/04 23:20:25
>>214
マジレスしとけば、数千件程度でパフォーマンスに影響出るって何時の世代のマシンだよw
数千回DBアクセスでもすんの?
数千回IOでもすんの?

217:デフォルトの名無しさん
07/08/04 23:24:49
じゃあ数百万件に変更な。これでいいか?

218:デフォルトの名無しさん
07/08/04 23:27:47
>>217
素直にDB使え

219:デフォルトの名無しさん
07/08/04 23:36:24
>>217
そりゃアルゴリズムか設計に問題あるだろ

220:デフォルトの名無しさん
07/08/04 23:42:42
>184だが、Listに文字列を突っ込む時にMapにカウントしておく
適当に書いたのでコンパイルは通らないと思うがこんな感じだ
class StringList {
  List<String> list;
  Map<String, Integer> counter;
  public int add(String str) {
      Integer count = counter.get(str);
      if(count == null) {
          count = new Integer(0);
          counter.put(str, count);
      }
      count++;
      list.add(str);
      return count;
  }
}
最初から数えておけばいいってこと

221:デフォルトの名無しさん
07/08/04 23:57:17
最初からカウントしてたら誰も質問しねぇわなww
オナニーコードもほどほどにな

222:デフォルトの名無しさん
07/08/05 00:09:22
プッ

223:デフォルトの名無しさん
07/08/05 00:34:48
longやintといったプリミティブ型の数値をbyte配列に変換するにはどうしたらいいでしょうか?
longの値をbyte[8]の配列に入れたいのです。

何か方法がありましたらぜひお教えください。

224:デフォルトの名無しさん
07/08/05 00:38:27

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

225:デフォルトの名無しさん
07/08/05 00:40:17
どういうふうに変換したいのよ。

どういうふうでもいいなら、これでどう↓
long x = 0;
byte[] b = new byte[8];
new DataOutputStream(new ByteArrayOutputStream(b)).writeLong(x);

226:デフォルトの名無しさん
07/08/05 00:42:33
>>223
long l = 1000;
byte b = (byte) l;
という形でダウンキャストを行う
そうすれば、上位ビットを無視するので、最下位のバイトが格納される。

上位バイトの取得は、ビットシフトを使えばOK

227:デフォルトの名無しさん
07/08/05 00:42:42

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

228:デフォルトの名無しさん
07/08/05 00:42:51
byte[] binary = new byte[8];
ByteBuffer buff = ByteBuffer.wrap(binary);
buff.put(longValue)

もっといい方法が在るかもしれん。
あとJava内部のバイト配列はビッグエンディアンのはずだから気をつけること。

229:デフォルトの名無しさん
07/08/05 01:01:41

くそ天皇 くそ天皇 くそ天皇 くそ天皇

いい加減死ねっつってんだろ屑ニートくそ天皇が

相変わらず病的な粘着っぷりだな屑ニートくそ天皇が

毎日毎日毎日粘着出来て良いでちゅねくそ天皇

くそ天皇さっさと死にやがれゴミが

東京に在住している精神病珍米糞ニートくそ天皇君の末路

さっさと精神病院逝くか首吊って逝くか選べや糞天皇が

早く死ねよ糞ニート天皇が

粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました
さっさと死ねやくそ天皇が

早く死ねっつってんだろ屑ニートくそ天皇が

お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや

とっと死に晒せや糞ニート天皇が

230:デフォルトの名無しさん
07/08/05 01:07:06
初心者じゃないんだけど、axisとかlog4jとか使ってるフリーのJavaライブラリを
複数使ってるとjarの中にあるクラスがバージョン違いで実行エラーになるんだけど
どうしたらいいんだろう。

実行中にロードされたクラスファイル全部を見直して、モジュールの競合を解決してくれたり
何がいけないのかを判断してくれるツールないかなー?


231:デフォルトの名無しさん
07/08/05 01:12:54
>>230
・競合ライブラリを最新のものに統一する。動かない部分は自前で修正
・それかクラスローダを分ける

232:デフォルトの名無しさん
07/08/05 01:14:47
>>231
クラスローダを分けるとClassクラスとかでインスタンス生成するとき面倒じゃない?
競合ライブラリを最新のものにして、古いメソッドや仕様変更したAPI使ってたら、アウトだし。


233:デフォルトの名無しさん
07/08/05 01:18:44
初心者じゃないって前振りはいったいなんだったのだろうか。

234:デフォルトの名無しさん
07/08/05 01:21:31
class A<T> {
List<T> list = new ArrayList<T>;
public List<T> getList() {
return list;
}
}

みたいにクラスにリストを持たせたとき、

A<Hoge> a = new A<Hoge>();

に対して

a.getList.add(hoge1);

とか

a.getList.remove(hoge2);

って出来ないの?やってみたところできてないっぽいんだけど

235:デフォルトの名無しさん
07/08/05 01:26:58
できるでしょ。

>a.getList.add(hoge1);

a.getList().add(hoge1);

236:デフォルトの名無しさん
07/08/05 01:29:07
uho-勘違いしていました
お恥ずかしい(-_-)

>>235
回答ありがとうございました

237:デフォルトの名無しさん
07/08/05 02:33:58
複数のスレッドから操作されるフィールドcountに
volatlieを付けるとする。どの程度保障されるもの?

while (count < 0) {

}
public void setCount() {
    this.count = count;
}


238:デフォルトの名無しさん
07/08/05 02:35:06
仮引数書き忘れた。。。

239:デフォルトの名無しさん
07/08/05 02:44:20
そんな意味不明なコード片じゃ何が言いたいのかわからん。

count++; みたいなコードは、volatile であってもアトミックにならない。他のスレッドが割り込む可能性がある。
つまり count++; をするスレッドが複数あったらだめ。
書き込むスレッドがひとつだけの場合は複数のスレッドから読んでも大丈夫。

・・・ていう話? それとも volatile の正確な定義が知りたいのん?

240:デフォルトの名無しさん
07/08/05 02:45:56
Java の volatile はいい加減な実装になってる可能性がある、
って話を見たことがあるんだけど、今でもそうなの?

241:デフォルトの名無しさん
07/08/05 02:55:30
可能性の話をされてもなぁ。
1.4 以前と 5.0 以降で volatile の仕様が変わったという話はある。
少なくとも 5.0 以降は仕様どおり実装されてんじゃない? Sun の VM では。
でなきゃ、java.util.concurrent.* あたりが今ごろ異常動作しまくりのはず。

詳しい話はこのへんでもどうぞ↓
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)
URLリンク(www-06.ibm.com)

242:223
07/08/05 03:25:44
>>225,226,228
回答ありがとうございます。
勉強になりました。

昔ならったコボルでは
long l=0x0123456789abcdefL;
byte[] b=new byte[8];
b=l;
で、lをbに代入すると
[01][23][45][67][89][ab][cd][ef]
こんな感じにカパッと当てはまったなー、javaではどうやればいいんだろうと思ったしだいです。
ビッグエンディアンには注意します。

243:デフォルトの名無しさん
07/08/05 04:02:50
Java内部がビッグエンディアンというか、
Data*StreamやデフォルトのByteBufferがそう補正してるってのが正しい?

244:デフォルトの名無しさん
07/08/05 04:09:43
正しくない。
というか意味がわからん



245:デフォルトの名無しさん
07/08/05 04:40:07
意味が分からないなら書くな。てかJavaDocに載ってる。

246:デフォルトの名無しさん
07/08/05 05:17:10
最近byteとintの単項数値昇格ネタ増えたな。
俺自身バイト指向でデータ扱うことが減ったのですっかり忘れてた。
"& 0xFF"で下位bitのみとれって話だよね。


247:デフォルトの名無しさん
07/08/05 09:05:18
Jakarta CommomsのHttpClientについてのいいページない?
ググったけど、情報量が足りないページばかり。

248:デフォルトの名無しさん
07/08/05 09:22:41
>>247
情報量って。。。本家にいくらでもあるだろ

249:デフォルトの名無しさん
07/08/05 09:27:21
ファイルの入出力をしているのですが、

もしプログラムと同じディレクトリに入出力用ファイルあれば、
そのファイルから中身を取り出し・加工して再びそのファイルに書き出す。
もし無ければ、新しいファイルを作成して、そこに書き出す。

という用に行いたいのですがどの様にしたら良いでしょうか?
教えてください。

250:デフォルトの名無しさん
07/08/05 09:50:44
>>249
どのJAVAの入門書でもサンプルコードが載ってるだろ
ググれば山ほどあるだろ

251:デフォルトの名無しさん
07/08/05 11:27:43
>>242
時代の流れだな
Javaでバイトを意識してデータを扱うケースは稀だし、知らない技術者も多い

252:デフォルトの名無しさん
07/08/05 13:02:22
String型変数に入っている(2バイト)文字の文字列を
漢字、ひらがな、カタカナ、その他記号などといった種類別に分割するということを

「プログラミング言語Javaに関する質問スレです。」
         ↓
「プログラミング」「言語」「Java」「に」「関」「する」「質問」「スレ」「です」「。」

Javaで(効率よく)やるにはどのようにしたらよいでしょうか?
(というか、文字種別をどうやって判断したらよいでしょうか?)
文字コードによる問題などもありますか?


253:デフォルトの名無しさん
07/08/05 13:07:50
ひらがなとカタカナは順序どおり並んでるらしいからif thenでやるのが簡単っぽいけど

254:デフォルトの名無しさん
07/08/05 13:10:03
漢字・ひらがななら3バイトだと思うのは置いといて、
自然言語解析するか単純にテキストそう舐めして用意しといた単語リストと照らすか。
日本語はRPNなのでry

言い出したら切りがないな。


255:デフォルトの名無しさん
07/08/05 13:12:39
UFT-16なんだから、全部2バイトだろ

256:デフォルトの名無しさん
07/08/05 13:14:09
volatlieの件だけど、1.5ならいけそうです。
ありがとう、検証してみます。
1~400のスレッドから操作を受けてるみたい

257:デフォルトの名無しさん
07/08/05 13:36:33
>>256
1.5ならば、AtomicIntegerの使用を検討してみたら?
アトミックな操作が簡単に出来る

ただ、そもそもスレッド周りの勉強をした上でスレッドに手を出した方がいい

258:デフォルトの名無しさん
07/08/05 13:39:45
>>252
効率よくやる方法はかなり難しいのではないか?
英語のように単語間がスペースで区切られているなら楽だろうが・・・

ぱっと思いつくのは、カタカナ・ひらがな・半角英数(といくつかの記号)は正規表現かなにかで定義
漢字で抽出するのは難しすぎるので「その他」で我慢する
後は、頭から崩して連結していくしかないと思う

下手に文字コードを数値で表現した所で、バグは増えても実行性能は大してかわらなそ

259:デフォルトの名無しさん
07/08/05 13:40:16
スレッドに手を出さなきゃスレッドの勉強なんぞできないだろ
このスレの自称中級者どもはうざいのばっかだな・・・

260:デフォルトの名無しさん
07/08/05 13:51:02
お前は新しい技術をコピペでもして使ってから勉強するのか?
動けばいいという低レベルなマの典型だな

261:デフォルトの名無しさん
07/08/05 13:56:40
お前のコードはバグだらけなんだろうな。
普通は模範的なコードを見て覚えるもんだ。

262:デフォルトの名無しさん
07/08/05 13:58:18
模範的なコードを意味も含めて理解することが勉強ではないのか?w

263:デフォルトの名無しさん
07/08/05 13:59:59
>>262
お前自身が何も理解してなさそうだな。この流れをみるに。

264:デフォルトの名無しさん
07/08/05 14:02:00
>260の頭が悪いということは解った

265:デフォルトの名無しさん
07/08/05 14:02:53
初学者がvolatileって単語にたどり着いてる時点でGoサインはでてるだろ
いじって覚える絶好のころあいだと思うのだが違うのか?

266:デフォルトの名無しさん
07/08/05 14:27:56
別の人がさわらないプログラムだからと言って、クラス変数を全てpublicにしたら怒られそうですが。

public class Hogegege
{
  private String name__;

  public String getName()
  {
    return new String(name__);
  }
}

っていうように、クラス変数を要求されたときに
新たに生成したものを返して絶対に変更できないようにした方がいいんでしょうか?
それとも単に return name__; でOK?

267:デフォルトの名無しさん
07/08/05 14:32:10
String は元から絶対に変更できないから単に return でOK。
変更できるようなオブジェクト (普通の配列とか) は clone した方がいいこともある。

268:デフォルトの名無しさん
07/08/05 14:40:46
StringやIntegerなどは不変クラスと呼ばれる値オブジェクトとして理想的な構造を持ってる。

例えばOSごとの改行コードを返すクラスがあるとして、
それがchar[]で返されるものなら、それは return clCode.clone(); とかすべき。
コレクションならCollections.unmodifiable系メソッドでラップするのもよし。

269:デフォルトの名無しさん
07/08/05 14:50:07
定数にコレクションを使うときに下のようにすることもある。

public static final Set<String> SUPPORTED_LANGUAGE;
static {
    Set<String> set = new LinkedHashSet<String>();
    set.add("ja");
    set.add("en");
    SUPPORTED_LANGUAGE = Collections.unmodifiableSet(set).;
}

270:デフォルトの名無しさん
07/08/05 14:52:08
要求された側が何をしたいかにもよる
要求された側も何をさせてOKかを考える
その上で生で公開させてもいいし、防御的にコピーを返してもいい
結局は要求次第だが、なるべくは防御的にするのがセオリー

Stringに関しては>267,268の説明の通り
たが、char[]をコピーするか否かは要件次第なので、一概にコピーするべきとは言えない

271:デフォルトの名無しさん
07/08/05 15:41:35
変なのが騒いでるが
だれか満を持してネタ投下した>>255に突っ込んでやれよw

UTF系は固定長じゃないぞ。

272:デフォルトの名無しさん
07/08/05 16:15:11
UTF-32は固定長だが、UTFじゃなかったのか。

273:デフォルトの名無しさん
07/08/05 17:10:30
UTF-32は21bitになったUnicode3.1の全コードを単一のbit長で表現するために
後から作られたから可変長にする必要がないだけだよ。
アレが特殊。21bit範囲内はUCS-4と互換性を取るって目的もあるし。

可変長より固定長の方が扱いやすいからbitの無駄使いより扱いやすさを優先した符号化方式。

UTFは元来可変長で表すもの。

274:デフォルトの名無しさん
07/08/05 17:13:49
サロゲートがそもそも後付けだろ

275:132
07/08/05 17:31:38
連結って意味だったんですね^^;
謎が解けましたorz

ありがとうございました。

276:デフォルトの名無しさん
07/08/05 17:48:43
サロゲートが後付けって言うかUnicode作り出した段階で
すでに16bitじゃ足りないのは分かってたけどそれに対処したのが遅れただけ。
実装側の互換性の問題とかがあったから。

277:デフォルトの名無しさん
07/08/05 18:02:43
StringBuffer key = new StringBuffer();
Random random = new Random(タネ);

for(int index = 0;index < 20;index ++)
{
  key.append((char)('A' + random.nextInt() % 26));
}

ランダムなAからZまでの文字を20個追加したいのですが、
変な文字列が連結されます。何がいけないのでしょうか?
おしえてください。

278:デフォルトの名無しさん
07/08/05 18:08:47
>>277
nextInt()は32ビット乱数のはずだから負数も取った気がした。
0と自然数だけ欲しければnextInt(26)ってやれば0~25をとるよ。

279:デフォルトの名無しさん
07/08/05 18:10:52
>>277
出来ました!どうもありがとうございます。

280:デフォルトの名無しさん
07/08/05 18:13:04
>>277
random.nextInt() でマイナスも含まれるから。
試しにrandom.nextInt() だけ出力してみるといい

random.nextInt() にはオーバーロードメソッドで、0からnまでの乱数を返すrandom.nextInt(n) がある
random.nextInt(26) で試せば期待した結果になると思われ

281:デフォルトの名無しさん
07/08/05 18:23:18
アンカーミスった
>>278 >>280
思い通りの動作が出来ました、どうもありがとうございますm(_ _)m


282:デフォルトの名無しさん
07/08/05 19:52:27
>>276
サロゲートペアはUnicode誕生から5年後に導入されたんだが。
適当なこと書かないでおくれよw

283:デフォルトの名無しさん
07/08/05 21:45:02
小生、Eclipseを使って開発しているのですが
本日「BufferUnderflowException」なるものが発生しました。
ググってみたところ「相対「get」操作がソースバッファのリミットに達したときスローされる、チェックされない例外です。」
との記述があったのですがよく意味がわかりませんでした。
ここでいうソースバッファのリミットとはコンパイラーのメモリのことを指しているのでしょうか?
もしメモリ関連のサイズのことを指しているのでしたらどこで設定できるのかどなたか教えていただけないでしょうか?
ちなみにEclipseの設定→Java→インストール済みのJREに指定しているのは最新のJRE1.6.0です。

284:デフォルトの名無しさん
07/08/05 21:53:47
いや。
java.nio.ByteBufferあたりのクラスのget系メソッドでサイズをオーバーして読み込んでしまった意味。
配列で範囲外のインデックスを使ったっていうのに近い。 単にプログラミングミス。

285:デフォルトの名無しさん
07/08/05 22:04:45
>>283
相対操作はpositionが読み込んだ値のバイト数分先に進むんだよ。
あと何バイト読み込めるかはremainingで確認できる。

構造体チックに各メンバ変数の並びを仮定して使うなら、0, 4, 8みたく
プリミティブごとのバイト数を足して絶対アクセスすればいい。

286:デフォルトの名無しさん
07/08/05 22:10:18
プログラムミスだなんて・・・・そんな・・・
実績のある会社が提供してる有料のライブラリーに含まれるメソッドを使ってたんだけど
使い方がわるかったのかなぁ・・・あーもう嫌ぽ

287:デフォルトの名無しさん
07/08/05 22:20:12
すいません、javaである処理を実行すると
コンソールの初めあたりに以下のようなエラーメッセージが出て
VM?ごと処理落ちしてしまいます。
しかもこれは必ずは発生するというわけではなくて不定期に出てしまいます。
不定期ですが処理を繰り返しているとすぐ発生する感じです。
JREのランタイムも最新のものを指定いるのですが相変わらず発生します。
どなたかわかる方がいらっしゃいましたら教えてください
「An unexpected error has been detected by Java Runtime Environment」

288:デフォルトの名無しさん
07/08/05 22:29:50
エラーログ嫁

289:デフォルトの名無しさん
07/08/05 22:39:56
申し訳ありません。エラーログ?を読んでもさっぱりわかりませんでした。
通常のログとは違ってこの処理落ちの場合にのみ生成されるログをのことだと思いますが
なんか「Thread」「Process」「System」といった感じにわけられて情報を
ダンプしているような感じに見受けられましたがエラー原因となるような記述は
書かれているのかいないのかサパーリでした。なにか読み方があるのでしたら教えてください

290:デフォルトの名無しさん
07/08/05 23:03:08
URLリンク(forum.java.sun.com)
こういう感じのやつか?

最初のほうの#がついた行をうpしてみ

291:デフォルトの名無しさん
07/08/05 23:27:01
あぁそれですわ。でもログは職場のマスィーンにあるので今うpできんのです申し訳ないです

292:デフォルトの名無しさん
07/08/06 00:13:57
>>286
ソースコード読んでみろ
実績のある会社ならばソースコードくらい提供できる
出来ないとか抜かすならば金払う必要なし
逆コンパイルしてバグ見つけて訴訟もおk

293:デフォルトの名無しさん
07/08/06 00:42:55
>>287
それってJavaからネイティブモジュール読み込んでます?*.dllファイルとか?
それだともしかしたら、PCの相性が悪いだけかもしれません。
自分もJNIを用いたプログラムでブルースクリーン出した事がある。しかも不定期。。



294:デフォルトの名無しさん
07/08/06 01:06:59
ネイティブ使用ならVM引数にXcheck:jniをつけてみる
しかし>>287のよーな現象に陥ったことがない為役にたつかはわかんない。

295:デフォルトの名無しさん
07/08/06 01:15:05
>>286
まぁその会社のサポート窓口に訊いてみれば?
使い方の問題にせよバグにせよ、なんらかの返答はあるでしょ。

296:デフォルトの名無しさん
07/08/06 01:16:58
JDI でオブジェクト生成を監視するのってどうすれば良いとおもう?

297:デフォルトの名無しさん
07/08/06 03:02:37
>>282
お前は日本語理解しような。

16bitじゃ足りないのは初期段階から分かってたけど実装側を無視できなかったから"Unicode誕生から5年後に導入された"んだろうが。

だいたいjavaなら普段は拡張面無視してるからUTF-16で16bit単位の可変長だろうが。

固定長なのはUCS-2ですよw

298:デフォルトの名無しさん
07/08/06 08:10:39
UCS-2 UCS-4 っていうのは文字集合であってエンコーディングじゃないんでは?

299:デフォルトの名無しさん
07/08/06 12:16:16
>>252
単純にやりたいなら、java.text.BreakIterator#getWordInstance()
本格的にやりたいなら、形態素解析が必要。

300:デフォルトの名無しさん
07/08/06 18:37:52
//Sample1
AAAAA

 *

BBBBB

//Sample2
XXXXX
YYYYY
ZZZZZ
という中身のSample1.txtとうファイルを読み込んで
*の部分にSample2.txtというファイルの中身を書き加えて
Sample3.txtというファイルに書き込むとすればどうやって記述すればよいのか
教えてください。

//Sample3
AAAAA

XXXXX
YYYYY
ZZZZZ

BBBBB

301:デフォルトの名無しさん
07/08/06 18:41:13
>>300
1. Sample1.txtを読み込む
2. Sample2.txtを読み込む
3. Sample3.txt に Sample1.txt と Sample2.txt の内容を書き込む

302:デフォルトの名無しさん
07/08/06 18:46:53
Sample1.txtを少しずつ読む
*かどうか調べる
 *ならSample2.txtの内容をSample3.txtに書く
 *でないなら今まで読んだSample1.txtの内容をSample3.txtに書く
Sample1.txtの終わりまで繰り返す


303:デフォルトの名無しさん
07/08/06 19:30:00
>>301
>>302
ありがとうございます
やってみます

304:デフォルトの名無しさん
07/08/07 01:38:48
あの、関数の引数にfinalは付けるべきでしょうか。
関数内では値を変えることがないし変わって欲しくない場合、
finalを付けた方がいいとは思うんですが、
全てに付けているとパラメータの部分が長くなってしまい見づらいといえば見づらいです。
常識的にはどうするべきなんでしょうか。

305:デフォルトの名無しさん
07/08/07 01:49:10
>>304
限りなく好みかもしれない場所の1つだな
finalにした所でオブジェクトの内部は変更される可能性はある
引数に対して再代入する事自体を禁止し、FindBugsアタリでチェックしておけば不要とも言える
(逆に言えば、メソッド内で引数への再代入を防止する為にfinalを付ける、だがw)

個人的には不要派

306:デフォルトの名無しさん
07/08/07 01:50:10
final付ける場合と付けない場合もあるし、
つけなくてはエラーになるときがある。
べつに無理につける必要はないと思うのだが....


307:デフォルトの名無しさん
07/08/07 01:52:40
>>304
プロジェクトで決められてたら、それに従えばいい。そうでなければ好きにすれば良い。

経験的には手作業で final 付けてると、そのうち嫌気がさして止める。

308:デフォルトの名無しさん
07/08/07 02:06:45
一番最初にやるHelloWorldなんですけどテキストに書いて
それをコンパイルしようとしたんですけど
「javacは内部コマンドまたは外部コマンド、操作可能なプログラム
またはバッチファイルとして認識されていません」となってしまいます。
どうしたらコンパイルできるようになりますか?


309:デフォルトの名無しさん
07/08/07 02:08:35
環境変数でググれ

310:デフォルトの名無しさん
07/08/07 02:10:14
>>306
final付けなくてはエラーになると本気で思っているならば勉強不足
それは匿名クラスなどに参照を渡しているからだろう

311:デフォルトの名無しさん
07/08/07 02:10:26
環境変数PATHを設定する

312:308
07/08/07 02:23:25
とりあえずみんなが指摘してくれた通り環境変数見てみたんだけど多分あってると思う。
;C:\Program Files\Java\jdk1,5,0\binをpathに加えればいいんだよね?

313:デフォルトの名無しさん
07/08/07 02:23:54
JDBCでのデータベース接続ができなくて困っています。以下のように作業を進めました。

postgres@debian$ createdb hellodb

------Connector.java------
package db;

import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DriverManager;

public final class Connector {
private static Connection conn;

static {
try {
Class.forName("org.postgresql.Driver");
} catch (ClassNotFoundException ex) {
throw new InternalError(ex.getMessage());
}
}

private Connector() {
}

public static Connection open() throws SQLException {
return DriverManager.getConnection("jdbc:postgresql://debian/hellodb", "postgres", "");
}
}


314:308
07/08/07 02:26:07
やっぱり駄目だ・・・誰か助けてくれ

315:デフォルトの名無しさん
07/08/07 02:27:05
カンマとピリオド再確認

316:デフォルトの名無しさん
07/08/07 02:33:38
あと、本当に 1.5.0 かどうかも。
実は 1.6.0 をインストールしてましたとか。

317:デフォルトの名無しさん
07/08/07 02:34:29
------ConnectorTest.java------
package db;

public class ConnectorTest {
public static void main(String[] args) {
System.out.println(Connector.open());
}
}

postgres@debian$ java -cp .:/usr/share/java/postgresql.jar db.ConnectorTest

------エラーメッセージ------
org.postgresql.util.PSQLException: Connection refused.
Check that the hostname and port are correct and that the postmaster is accepting TCP/IP connections.

db名、ユーザ名、パスワード名は大丈夫だと思うんですが・・・。

318:デフォルトの名無しさん
07/08/07 02:50:20
>>312
> ;C:\Program Files\Java\jdk1,5,0\binをpathに加えればいいんだよね?
を加えちゃいかん
;"C:\Program Files\Java\jdk1,5,0\bin"
空白文字の扱いを知らんのか

319:318
07/08/07 02:52:26
しかもピリオドでなくてカンマやんw
;"C:\Program Files\Java\jdk1.5.0\bin"

320:デフォルトの名無しさん
07/08/07 02:53:01
>>312
pathに加えた手順を説明してみて

321:デフォルトの名無しさん
07/08/07 03:01:01
java的にはfinalな引数を導入したのは内部クラスから参照するためって事を知ってる前提で話してるんだよね?

人に聞くくらいなら内部クラスない場合は好み程度、と考えておけば良いんじゃない?

自分からfinal付ける明白な理由もなさそうだし。

322:308
07/08/07 03:04:37
駄目だ・・・何でできないんだ?とりあえず315さんにいわれたようにカンマとピリオドはおk
そして318さんに言われたとおりに;"C:\Program Files\Java\jdk1.5.0\binってPathのあとに
つけて今にいたりました>>320


323:デフォルトの名無しさん
07/08/07 03:08:53
PATHをマイコンピュータのプロパティから変更してるなら、
プロパティをOK押して閉じてからコマンドプロンプトをいったん閉じて開きなおす。

324:デフォルトの名無しさん
07/08/07 03:10:35
そもそもC:\Program Files\Java\jdk1.5.0\binってフォルダの中にjavac.exeがあるのかね?

325:デフォルトの名無しさん
07/08/07 03:13:11
>>322
ちなみにうちの環境だと
C:\Program Files (x86)\Java\jdk1.5.0_01\bin
にjavac.exeはある

326:308
07/08/07 03:24:33
なんか頭がもうパニックだ・・・とりあえず本に書いてある通りに書くと
class Examplel {
public static void main(String args[]) {
System.out.println("This is the output from Examplel");
}
}
をかいてそれをファイル名はExamplel.javaにして保存。実行するためにコマンド開いてjavac Examplel.java入力するらしい。
もう俺にはお手上げです。

327:デフォルトの名無しさん
07/08/07 03:28:25
>>326
それは関係無い

コマンドプロンプトから
"C:\Program Files\Java\jdk1.5.0\bin\javac.exe" -version
って入れて Enter 押して結果を教えなさい

328:308
07/08/07 03:31:03
指定されたパスが見つかりませんたって出ました

329:デフォルトの名無しさん
07/08/07 03:31:06
ClassPath通してる?

330:308
07/08/07 03:33:52
よくわからない

331:デフォルトの名無しさん
07/08/07 03:33:54
C:\Program Files\Java\jdk1.5.0\libの中の
jarファイルにクラスパス通してないんじゃないの?

332:デフォルトの名無しさん
07/08/07 03:34:39
>>328
マイコンピュータ開いてCドライブ開いて・・・って辿っていってjavac.exeのあるフォルダ確認して。
Windowsの種類やJDKのバージョンによってこのフォルダのパスは変わるから。

333:デフォルトの名無しさん
07/08/07 03:35:11
よく釣りに付き合ってますねー
肝心なとこスルーして答えてないしメチャクチャ釣り臭いんですけど

334:デフォルトの名無しさん
07/08/07 03:36:37
>>333は教えることもスルーすることもできないゴミ

335:デフォルトの名無しさん
07/08/07 03:36:45
>>328
ってことは、原因は 『C:\Program Files\Java\jdk1.5.0 に Java SDK をインストールしていない』 ってことになるんだけど、
[1] ダウンロードした SDK の確認(JDK と JRE と間違えてないか)
[2] インストール場所の確認
をお願い

336:デフォルトの名無しさん
07/08/07 03:36:45
釣りだべ

337:308
07/08/07 03:45:11
ごめん釣りじゃなくて本当にわかんないんだよ・・・喧嘩しないでくれ
>>332よくわからない調べ方が。>>335も調べ方がわからない。本当にすまん。初心者なんだ。


338:デフォルトの名無しさん
07/08/07 03:45:46
>>337
次の各問いに○か×で答えよ
1.C:\はあるか
2.C:\Program Filesはあるか
3.C:\Program Files\Javaはあるか
4.C:\Program Files\Java\jdk1.5.0はあるか
5.C:\Program Files\Java\jdk1.5.0\binはあるか
6.C:\Program Files\Java\jdk1.5.0\bin\javac.exeはあるか

339:デフォルトの名無しさん
07/08/07 03:51:11
もうjavac.exeをハードディスクの中で検索したら?

340:308
07/08/07 03:55:34
1○
2○
すまんもうこれ以上わからん・・・


341:308
07/08/07 03:56:15
>>339
ごめん。どうすればいいですか?

342:デフォルトの名無しさん
07/08/07 03:56:28
実はJDKをインストールしていませんでしたというオチ?

343:デフォルトの名無しさん
07/08/07 03:57:58
>>340
じゃあJDKをインストールしてないんじゃないの?
これはPCに元から入ってるものじゃないよ
どこからダウンロードした?
そもそもダウンロードすらしてない?

344:308
07/08/07 03:58:09
いや本についてる奴インストールしたと思う。

345:デフォルトの名無しさん
07/08/07 03:58:13
>>341
たぶんね、まじめな話パソコンに慣れてからのほうが良いと思うんだ。
門前払いする気は無いんだけど、PC の知識はどうしても必要になるから、今のままだと今後さらに悩むことになる。

とりあえず寝れ。寝て起きてまた考えろ。

346:デフォルトの名無しさん
07/08/07 03:59:20
>>341
HDD内のファイル検索すらしたことが無いのか?
プログラミングはかなり時期尚早だよ。

347:308
07/08/07 04:01:15
>>345
なんかみんなの話聞いてたら確かに自分は早すぎるなと思ったわ・・・_| ̄|○
とりあえず今日はもう一回インストールしてみて寝ます。ありがとうございました。


348:デフォルトの名無しさん
07/08/07 04:03:34
>>347
インストールの途中で出てくる説明はよく読んでね
特にインストール先のフォルダを指定するところがあるだろうからそこはメモしておくといい

349:デフォルトの名無しさん
07/08/07 04:03:45
>>347
今みたいに、Java を勉強する過程で PC についての知識を深めるという荒業もある
じっくりやれば良いと思うぜー

350:308
07/08/07 04:16:29
>>349
>>348
ありがとうございます。まだ基本的な知識が抜けているので自分で勉強しながらROMしようと思います。
質問できるレベルに達したらまた顔をだそうと思います。

351:デフォルトの名無しさん
07/08/07 04:23:37
>>304
引数につけた final はメソッドを使う側からは見えないので、
完全にメソッドの実装側の都合となるためそれほど重要でない。

>全てに付けているとパラメータの部分が長くなってしまい見づらいといえば見づらいです。
ここ重要。使い捨てでない限り、ソースコードは人が読む文書。しかも、唯一完全な文書。

意図せず誤ってパラメータへの代入を防ぐメリットとのトレードオフだが、
それが一目で分からないような複雑なメソッドはむしろリファクタリングの対象と思われ。

不要派が多いんじゃないかな。自分も不要派

352:351
07/08/07 04:42:09
補足。

引数に final をつけることにより、
ソースコードの読み手にその意図を伝える役割があるが、
そもそも、引数に代入を行うこと自体が混乱を招くことなので
通常やらない(むしろ、そのようなコードはリファクタリング対象)。

したがって、この意味でも、引数に final をつける意義は薄れている
というのが、不要派のおいらの個人的意見

353:デフォルトの名無しさん
07/08/07 07:35:11
C++でもconstを引数に使うのはconst char *のようなケースだけだものね。

354:デフォルトの名無しさん
07/08/07 07:44:14
いやC++のconst参照渡しは中身を書き換えないところまで保障するから別だとおもうが……

355:デフォルトの名無しさん
07/08/07 08:09:04
char * const s といった使い方はまずしないということだろ。
javaでfinalにした場合はこの意味だから。

356:デフォルトの名無しさん
07/08/07 09:32:08
>>352
引数に代入行うと混乱するぐらい長いメソッド自体の方をリファクタリング対象にした方が良いような。
短いメソッドなら引数に代入されても大して混乱しないし。

357:デフォルトの名無しさん
07/08/07 09:52:57
>>356
長いメソッド云々の前に引数に代入すんな、って話だと思う
どっちも糞コードなのは間違いないが、長いメソッドは可読性が低いだけ、引数に再代入するってのはバグと言ってもいいだろう

358:デフォルトの名無しさん
07/08/07 10:04:10
Javaにもいい加減constとfriendクラスが欲しいです

359:デフォルトの名無しさん
07/08/07 10:16:01
>>357
なんで引数に代入しただけでバグになるんだ……

変更前の引数の値を期待してるところが残ってるのに、引数変更しちゃうと
バグの元になるってんならわからなくもないけど、短いメソッドなら修正容易だし。

360:デフォルトの名無しさん
07/08/07 10:17:14
URLリンク(www.vipper.net)
この中で削除して良い物は在りますか?


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