【初心者】Java質問・相談スレッド104【大歓迎】
1 :
デフォルトの名無しさん :
2007/07/27(金) 08:46:32 プログラミング言語Javaに関する質問スレです。
JavaScript, 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質問・相談スレッド103【大歓迎】
http://pc11.2ch.net/test/read.cgi/tech/1182896607/ /* 既出の質問や、他に適切なスレが存在する質問は、容赦なく無視されます。
質問をする前にwikiで過去ログ、関連スレ、FAQをチェックしてください。 */
また、当スレで質問をするかたは、回答をもらえたときに、
wikiの更新をして頂ければ、忝なく存じます。
次スレは
>>980 あたりで。
刀、 , ヘ
/´ ̄`ヽ /: : : \_____/: : : : ヽ、
,. -‐┴─‐- <^ヽ、: : : : : : : : : : : : : : : : : : : : : : }
/: : : : : : : : : : : : : :`.ヽl____: : : : : : : : : : : : : : : : : : /
,. -──「`: : : : : : : : : :ヽ: : : : : : : : :\ `ヽ ̄ ̄ ̄ フ: : : : :/
/: :.,.-ァ: : : |: : : : : : : : : :\: : : : :: : : :ヽ \ /: : : :/
 ̄ ̄/: : : : ヽ: : : . . . . . . . . . . .、 \=--: : : :.i / /: : : : :/
/: : ∧: \: : : : : : : : : : ヽ: :\: : : 〃}/ /: : : : :/ 、
. /: : / . : : :! ヽ: : l\_\/: : : : :\: ヽ彡: : | /: : : : :/ |\
/: : ィ: : : : :.i: : | \!___/ ヽ:: : : : : : :\|:.:.:.:/:! ,': : : : / |: : \
/ / !: : : : :.ト‐|- ヽ \: : : : : l::::__:' :/ i: : : : :{ |: : : :.ヽ
l/ |: : :!: : .l: :| \: : : l´r. Y {: : : : :丶_______.ノ: : : : : :}
l: : :l: : :ト、| 、___,ィ ヽ: :| ゝ ノ '.: : : : : : : : : : : : : : : : : : : : : : /
|: : :ト、: |: :ヽ ___,彡 ´ ̄´ ヽl-‐' \: : : : : : : : : : : : : : : : : : イ
!: :从ヽ!ヽ.ハ=≠' , ///// ///u /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
V ヽ| }/// r‐'⌒ヽ イ〉、
ヽ、______ー‐‐' ィ´ /:/:7rt‐---、 こ、これは
>>1 乙じゃなくて
ィ幵ノ ./:/:./:.! !: : : : :!`ヽ ポニーテールなんだから
r‐'T¨「 |: | !:.∨:/:./: :| |: : : : .l: : : :\ 変な勘違いしないでよね!
/: : .|: :| !:.!ィ¨¨ヾ、:.:/ !: : : : l: : : : : :.\
3 :
デフォルトの名無しさん :2007/07/27(金) 15:36:55
Java Communication APIというものを用いて,PCカードのポートに接続したGPS(機種はI-ODATAの
CFGPS2)から座標などの情報を取得しようとしています.
現在その前段階として,下記のサイトで公開されているポートの種類や数,通信状況を調べる
サンプルプログラムをお借りして,動作確認をしようとしています.GPS機器を接続しているポート
(COM1)が通信状態になるようにするため,他の電子地図アプリケーションなどでGPSからの情報を
受信している状況を作り出し,このサンプルを動作させました.しかしながら,『COM1が使用中で
ある』という出力が得られませんでした.
こちらでお尋ねするのが相応しいのかどうかの判断に困りましたが,一応Javaを使用している
こともあり,今回質問に参りました.なにかアドバイス等頂きたいと存じます.また,他に質問するに
相応しい場所があるようでしたら,お手数ですがそちらへの誘導をお願いします.
よろしくお願いします.
参考URL:
ttp://www.javainthebox.net/JavaForFA/08-09CommAPI/No.08/commapi1.html
4 :
デフォルトの名無しさん :2007/07/27(金) 21:40:21
4ね
>>3 GPSはシリアルポートとして見える仕様なのか?
ノートでもオンボードでシリアルのチップが載ってるかもしれないので
まずそれを切ること(完全に切れない可能性も高いけど)
それか単にCOM3あたりで見える可能性もあり。あとはハイパーターミナルあたりで
確認すれ。
>996 synchronized でガードされるのはステートメントだけ 従って他のsynchronized メソッドおよびに、synchronized(this)で囲まれたブロックが同期化の対象になる オブジェクト自体は保持しているクラスなどから自由に触れるわけで同期とは関係がないぞ 一般的に言えば、そのクラスの可変な変数に対して読み込みと書き込みを行っているメソッドを全てsynchronizedにすれば同期化の要件は満たす(ただし、実効性能は考えない)
7 :
デフォルトの名無しさん :2007/07/27(金) 23:38:53
javaでmidiファイルの生成中です。 import javax.sound.midi.spi.*; import javax.sound.midi.*; で、何とかメロディを作ったり、音色を変えたりできる様になったのですが、 ドラムの音の出し方が分かりません。 どうぞご教授お願いします。
マルチか? それともこっちのスレで質問しなおす事にしたのか? もしそうならあっちに一言書いてからこっちに書くべきじゃないか? 誘導もされてなかったのに質問だけしてほったらかしってのは正直どうかと思うよ。
どっちにしろjavaの質問じゃないね。 midi関連を扱う板/スレへ池。
10 :
デフォルトの名無しさん :2007/07/28(土) 02:34:03
FileInputStream fis = new FileInputStream("flight.dat"); として読み込んだファイルの行数を得る方法ってありますか? 教えてください。m(_ _)m
11 :
デフォルトの名無しさん :2007/07/28(土) 02:36:38
LineNumberReaderってのがある。
12 :
デフォルトの名無しさん :2007/07/28(土) 03:17:27
jarファイルにもクラスファイルにも同じクラスを置いたら、誤作動起こす?クラスノットファウンドとか?
クラスローダが先に見つけたクラスがロードされる
ソケット通信を実装しています。 スレッドは使わず、Selectorクラスを利用して複数クライアントからのデータ受信を 実現しようと思っているのですが、一つ確認させてください。 Selectorクラスでイベントが発生したチャネルを取得するselectedKeys()メソッドからは Keyがイベント発生順に格納されているのでしょうか? Aさんが送信→Bさんが送信→Cさんが送信→Aさんが送信 とやった場合、上記の順序は確実に保証されてselectedKeys()から取得できるのでしょうか?
16 :
13 :2007/07/28(土) 11:59:23
>>14 レスサンクス
もう一つ質問
とあるサイトで配布されているjarファイルを使用する時に、
一部のクラスがソースも配布されていたため、
その対象のクラスだけリコンパイルして実際に動かすJava環境と
同じJavaのバージョンでクラスファイルを作成し、
ソースが提供されていないクラスはそのままにして、
それらをもとの一つのjarファイルとして作り直したら、
キャスト変換エラーが起きた。
リコンパイルしてjarを作り直しただけなのに、わけわかんね。
>>15 ソケット通信の実装ってかなり高度だぞw
Selector.selectedKeys() はSetを返すように定義されている
従って、順番が保証されているとは通常は考えられない
保証しているならば、SortedとかListを返すだろう
そもそも、送信順番は受信側では基本的に保証できないよ
どんな順番でServerSocketがacceptするかには関与できないから
"おそらく"送信順番に受け付ける、ってくらいじゃね?
そこまでソケット通信の実装をしているならば別だがw
オンラインゲームってかw
19 :
デフォルトの名無しさん :2007/07/28(土) 14:01:40
ダイアログを親フレームとの相対位置に表示したいです。 親フレームの絶対位置が分かれば出来そうですが、それを取得する方法が分かりません。 それとも他に適した方法がありますか? 教えてください。
javaの基本文法は一通り終了して、更にjavaの勉強を続けようと思うのですが、どのような勉強方法がよいでしょうか?
何か作ったことある? 電卓とか○×ゲームくらいは作れる?
>>21 アプレットで電卓、それとC言語で○×ゲーム(コンソールアプリ)は作成したことあります。
有名なアルゴリズムに関しては基本情報技術者試験の勉強で一通り目を通しましたが、 自分で実装まではしていません。 このようなデータ構造とアルゴリズムは一通り自分で実装して動きを確かめた方がよいのでしょうか?
>>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付きでコンパイルした場合では動作が違う。
>>24 そりゃするに越したことはない
ある程度規模の大きなものを作る事と
色んなクラスの使用を経験しておくのがいいと思う
27 :
デフォルトの名無しさん :2007/07/28(土) 15:56:22
javaでエディタ作ろうと思っているんだけど、 TextArea内に行数を表示させる箇所を作るのって不可能ですよね。 今考えてるのは、文章入力用のTextAreaとそれに対応するように 行数表示用で編集不可のTextAreaを並べておこうと思っているんだけど。 もし、swing使ったり他の方法でこれが実現できるようなら教えてもらえないでしょうか。
>27 TextAreaの中に書くことは無理 独自にComponentを作成するか、JTableなどと組み合わせれば可能
>>25 うーん、自分の環境はそれは考えにくいと思うんだけど。。
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に変更) なぜでしょうか?
インターフェースを渡して、それを実装したクラスを返すプログラムを作りたいんですが。 (今はとりあえずから実装)、可能でしょうか? 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>); } }
>>30 たぶん、シフト演算でされる単項数値昇格を忘れてるんだと思う。
シフト演算のオペランドの型が byte、short、char なら
シフト演算する前に暗黙のうちに int 型に変換される。
>>32 単項数値昇格ですか。初めて聞きました。
これから調べてみます
どうもありがとうございました。
>>31 可能。でも、そこのサンプルなんか変じゃね?
このスレで見つけたJUnitとかいうツール使ってみたんだけど、これって戻り値がない場合は使えないの?
>35 お前には使えなそうだ
>>26 そういうことをやろうかと考えていたのですが、
具体的にはどんなことをすればよいのでしょうか?
>>29 考えにくい、じゃなくて実際に確かめようぜ。大した手間じゃないだろ。
うまく行かない時ってのは大抵自分の思い違いが原因でな(だからゴムのアヒルに話すのが有効なデバッグになる)。
すぐにわかる事を調べずに、思いこみでコードいじってる内は若葉マーク取れないよ?
>>37 アルゴリズムは知識レベルでも十分だと思う
ソート スタック キュー リスト マップ ハッシュ
これらは既にJavaがAPI化しているからJavadocでも読んで理解してればいい
どっちかっていうと、学校や会社であまり詳しく教えてくれないデザインパターンを勉強した方が為になる。
Java デザインパターン でぐぐれ
>>38 レスありがd。
一応jarの中身を見たけど、別のjarファイル内にあるクラスファイルとは重複してなかったんだ。
実行時にどのjarファイルを読んでクラスの情報を取得したかについてはデバッガで調べて正しかった。
そのクラスがimport宣言しているクラスが実はJavaのバージョンによっては対象外だったりしてたのかも。。
>jarの中身を見たけど、別のjarファイル内にあるクラスファイルとは重複してなかったんだ。 >実行時にどのjarファイルを読んでクラスの情報を取得したかについてはデバッガで調べて正しかった。 複数のjarがあり、ソースのあるjarは別のjarのクラスを利用しているわけか(後付けすんなよ…)。 で、調べたのはそれだけ?同じパッケージ内のクラスは? >import宣言しているクラスが実はJavaのバージョンによっては対象外 無ければコンパイル時に見つからないと出るし、複数あってもコンパイル時にどれか分らないって出ると思うけど。 つーかそもそもどこまで分ってるんだ? 1.キャスト変換エラーが出る場所が分っている。 2.キャスト変換エラーが出るインスタンスが分っている。 3.キャスト変換エラーが出るインスタンスの本来あるべきクラスが分っている。 4.キャスト変換エラーが出るインスタンスがいつ、どこで作成されるか分っている。 5.キャスト変換エラーが出るインスタンスの実際のクラスが分っている。 6.上記3.と5.は異なっている事が分っている。 #一応ソースとかコンパイル→jar固め手順が誤って無いって前提で話してるけど、そのへんは大丈夫だろうか
>>39 Java デザインパターン
でぐぐってみる
サンクス
デザインパターンでオススメの参考書とかってある?
>42 CollectionとかSwingの実装 本だと結城本が入門用で定番 個人的にはリファクタリングによるデザインパターン入門とかってやつがオススメ
>>43 なるほど
明日本屋行って買ってくる
遅い時間にありがとう
FileDialogで選択したファイルのパスとファイル名をTextFieldにsetTextで入れて そのTextField内の文字列を初期値にFileを作りたいのですがうまくいきません。 そのFileでhashCodeとgetNameを行うためにはどうすればいいんでしょうか?
>>41 詳細に説明してくれて、感謝感激雨あられです。
>つーかそもそもどこまで分ってるんだ?
もっと詳しくソース追ってみたけど、実はキャスト変換の前のコードでそもそもの問題が見つかってしまって。。
ClassクラスのforName()のnewInstance()の戻り値が、事前にstaticなオブジェクト変数に値が入っていることで、
別のインスタンスが返されるように出来ているっぽい。コンストラクタ上でforNameの引数に渡したクラス名とは
別のオブジェクトを返すように実装されている感じ。
>#一応ソースとかコンパイル→jar固め手順が誤って無いって前提で話してるけど、そのへんは大丈夫だろうか
jar固め手順とは?
jar -cvf "jarファイル名" "フォルダ1(リコンパイルしたもの)" "フォルダ2(もともとjarに格納されていたもの)" "ファイル(*.propertiesなど)"
みたいな感じでjarを作っている。
もしリコンパイルしたソースが他のパッケージ内のクラスを参照しているのであれば,
上記の場合、フォルダ1とフォルダ2は逆かな?パッケージ名は単純にアルファベット順にならべてんだけど。。
>>45 うまくいきませんじゃ、分からないのだが?
そのような内容では、出来るはずですとしか答えられん・・・。
うまくいかないコードをはってくれ。
書き込んだあとに調べてみたところ tf1.setText(fd.getDirectory()+fd.getFile()); とやってはディレクトリの区切り文字が\になってしまってるのが原因のようでした。 この\を\\に置き換えることってできますかね?
JFrameの表示座標ってどうにか変えられないだろうか JButtonに反応して表示するように下はいいけど左上が画面の左上に吸着したような位置にでてしまう
public void setLocationRelativeTo(Component c) 引数をnullとすれば画面中央に表示
>49,50 setLocationRelativeTo(parentFrame) でね? parentFrameは、JButtonを配置したJFrameな
>>49 >>50 setLocationRelativeToでググってみたらsetLocationなんていうのもあるんだな
ちょっとこれ使ってやってみる
返答サンクス
ファイルの入出力について詰まったので、教えてください。 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というファイルは、このプログラムファイルと同じディレクトリに入れています。 どこがおかしいのかご指摘頂けないでしょうか、お願いします。
すいません、書き忘れましたが、 public static void main(String s[]){ TextReader t = new TextReader(); } もTextReader内に入っています。 お願いいたします。
>>53 System.out.println("error"); を ie.printStackTrace() に変えて、
どんなエラーなのか調べれば?
>>55 レスありがとうございます。
それを試してみたら(指定したファイルが見つかりません)になりました。
同じディレクトリ内にファイルを入れてるんですが・・・。何かファイルの指定法に間違いがあるんでしょうか?
同じディレクトリってどこと同じなんだYO File file = new Filr("stage.txt"); と書いてみて、絶対パス表示してみろ
俺が思うに、綴りが間違ってるんじゃないかな。
>>57 うわ・・・なんというミス・・・ありがとうございます。
確かにどこと同じなんだよって話ですね・・・。解決しました。ありがとうございます。
60 :
デフォルトの名無しさん :2007/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();
>>60 printlnが出力する改行コードはJVMが動いているシステムにとって自然な改行コードになる。
もし変えたくなければ自分で必要な改行コードを出力する。
62 :
61 :2007/07/30(月) 20:44:18
>60 どこにCSVファイルがあるか教えてくれ、ただのサーブレットにしか見えない
setHeaderでapplication/octet-streamにする
65 :
19 :2007/07/30(月) 23:08:45
どなたか分かりませんか?
setLocation / setLocationRelativeTo
なんかgdgdだがsetLocationRelativeTo なんてあったのか。 Swingはデカすぎるから困る。
SWT/JFaceに比べりゃ・・・ Eclipseで入力補完使いながら、setといれれば直ぐ見つかる程度だろう
69 :
デフォルトの名無しさん :2007/07/30(月) 23:44:22
質問javamail使ってwebmailみたいのつくりたいんだけど、HTMLメールを どうしようかなって思ってて。 やろうと思ってるのはHTMLタグ(&)だけ抜いて、テキストだけで 実装しようかと思ってるんだけど、HTML抜くライブラリとかってあるの? smtp実装してるのはあるんだけど、popしてメール表示するようなサンプルって あんましないんだよね。。誰かやったことある人おしえてください。 文字コードencodingは次考えます。
70 :
61 :2007/07/30(月) 23:46:28
プログラムのXXXの部分は適当です。カンマ区切りで出力と仮定しています。 なぜ、Linuxなのに、CRがつくのかがわからないです。
JMSって何をする目的で使うのでしょうか?
72 :
質問です :2007/07/31(火) 01:11:55
サーブレット間通信について質問です。 あるコンテキスト内で2つのサーブレットが起動しています。 この片方からもう片方のメゾッドを呼び出すことが出来ることを知りました。 書籍には Servlet ServletContext.getServlet(String str) でもう片方のサーブレットを取得できると書いてありますが、 如何せん書籍が古いため、現在このメゾッドはサポートされていないそうです。 同等の機能を実現するためにはどうすればいいのでしょうか?
>>61 Servletの設定がそうなっているんじゃない?
>>72 相当古い本だな、それ
そのメソッドをServletではなく共通で使える普通のクラスにすればいい
Servletの何か(パラメータ等)が必要ならば、それを引数に渡せばOK
74 :
質問です :2007/07/31(火) 09:23:13 BE:42319687-2BP(6)
>>73 回答ありがとうございます。
片方のサーブレットが持つ情報をもう片方がほしければ、
その「普通のクラス」のstaticなクラス変数を介してもらえばいいということでしょうか?
予約後って全部暗記したほうがいいの?
うん
Math.abs(-10); のメソッドの結果がなんで-10じゃなくて10なんですか?
>>77 Math.abs がどんな機能なのか知ってるか?
>>78 >どのように使い分ければ
Array〜は固定サイズ限定だから、無限にしたければLinked〜を選ぶしかない。
でなければ、別にどっちでも。
>実行されるスレッド数の上限を決めたい(例えば10)
>上限に達したら、submit された際キューに積まず例外で返したい
SynchronousQueue を使う。
他のキューだと、スレッド数が上限に達しても、さらにキューが一杯になるまでタスクが溜まる。
>>80 なんで?
Math.absってどういう意味?Mathはなんとなく数学っぽいが。
absは阿部さんの略
つーかjavadoc嫁よ屑
ご、ごめん
質問させていただきます。 ArrayList を Iterator で順序アクセスした場合、この順序はもとのリストの順序と一致しないのでしょうか?
一致する
てか順序が一致しないListってあるの? Setと違って並びありきなクラスだと思うんだけど。
89 :
デフォルトの名無しさん :2007/07/31(火) 21:05:26
一致しないとまずすぎるだろ常考・・・
セックル中?
回答ありがとうございます。 自分もそう思って、 for (int i=0; i < list.size(); i++) { // list.get(i) を処理 } を for (Object obj: list) { // obj を処理 } のように書き換えたら問題がおきたのです。 他の問題があったのかな。
どんな問題が起きたんだよw ClassCastExceptionとかNullPoだったら氏ね
>>78 最初にExecutors.newHogeHoge の標準ファクトリメソッドで生成されるものを使うのが推奨されている。
それでダメならばカスタマイズ汁
で、こんな場所で質問しているヤシはマルチスレッドなんかに手を出すべきじゃない
こんな場所で質問しているヤシはJavaなんかに手を出すべきじゃない
じゃあどの言語がいいんだよ
>>96 それをこんな場所で質問しているヤシはプログラムなんかに手を出すべきじゃない
じゃあこのスレにいるやつらはなんなんだよw
99 :
デフォルトの名無しさん :2007/07/31(火) 23:31:39
質問があるんですが,アプレットで文字とかを描画するときに, paintメソッドで,Graphics gとかを引数にとっていると思うのですが, gが良くわかりません. 他のクラスから,アプレットのメソッドを呼び出したりして, アプレットに文字列を描画したいのですが,gのところをどうすればよいかわかりません. どなたか詳しい方教えてください
>>99 もしかして、paintを自分から呼び出して描画処理を行おうとしていない?
paintには描画したい内容を記述して、
それを呼び出すのはjavaの処理系が再描画すべき時点でやってくれる。
もし自分から描画させたい場合はpaintを直接呼び出さず、
repaintなどの再描画を促すメソッドを呼び出せばいい。
こちらからアクティブに描画する方法もあるが、
初心者のうちはこういうパッシブ描画でがまんしておけ。
>>99 gは大事にしてね。
引数渡しするかキャンバスクラスに実装して使い回せばおk
>>101 使いまわしたら生きてるか死んでるかの確認と再生成を自力でやらなきゃいけなくない?
103 :
デフォルトの名無しさん :2007/08/01(水) 00:34:08
すみません、自力では限界なので誰か教えてください。 当方、専門学校の選択でJAVAを取った1年生です。 Eclipseを使ってJAVAをやっているのですが import model.product; の行で「インポートされた model は見つかりません。」とエラーが表示され、先に進めず困っています。 このぐらい自力で解決しろ、と思われますが、 検索をかけても解るものがヒットしないのです、どうか宜しくお願いします。 …教諭がソース(コメント、解説無し)のプリントを配布するだけで質問に答えてくれないんです。
パッケージを理解しろ。「java パッケージ」でぐぐれ。 srcフォルダの下に、model/product っていうディレクトリはあるのか? 専門学校ってEclipseとかやるんだ。
専門学校でツール使うばあい、ツール教える側が理解してなくてカオスってるときがあるけどな。 それでサポやらされる身にもなってみろ。
じゃあやめちまえ
>>103 >質問に答えてくれないんです
嘘つくな
int test[]={80,43,43,32,84};
109 :
デフォルトの名無しさん :2007/08/01(水) 02:40:44
>>103 どこの学校か教えてくれたら、完全な解説を書きます。
110 :
103 :2007/08/01(水) 06:19:13
>104 回答有難う御座います、srcというフォルダ自体がありません。 Wikipediaでパッケージというものがどういうものか、一応は理解できたつもりです。 プリントの中に package model.Product; と書かれたソースファイルが無いです… >105 多分その通りかと…とても若い人で出欠取ったらどこかへ行ってしまいます。 >106 辞めてもいいのですが単位が… >107 授業中に質問ができなく、職員室に突撃して聞いても「自分で調べろ」の一点張りで… >109 日本工学院です
>授業中に質問ができなく、職員室に突撃して聞いても「自分で調べろ」の一点張りで… 質問に答えるとボロが出るからな
>>110 model.product なんてクラスが必要なければそんな import 文は単に消しちまうか、
どっかで使われてるなら model パッケージを作って product クラスを適当にでっちあげればいいんでない。
>>103 エラーメッセージをググる事を覚えるといいかも。
例えば「インポートされた は見つかりません」
固有部分を抜いて検索してみるのね。
配列のソートがよくわからん。 誰かおせーて。
116 :
デフォルトの名無しさん :2007/08/01(水) 18:43:30
専門学校の教師に聞いた話だが、2年制とかになると早めに辞めさせてしまう方が評価が高いらしい 下手に全員が進級すると教室が足りないんだってw
>>117 教室と言うか教室の中にある設備機材のほうだなw
だから講師が生徒潰しにかかって、それに触発されて生徒間も潰し合いし出して
マジで頭おかしくなって精神科・心療内科行く奴が増えて
そっち系の知識が豊富になりつつ、潰し合いに生き残った者たちはどんどん専門学校に洗脳されて外でワケワカメな事言いだすんじゃないか。
そもそも、コンピュータ系専門に常駐してる講師なんて業界の底辺から溢れて食ってけないから講師をry
それを補うためにたまに外部からプロ呼ぶんだろうが。
>>118 まるでヒューマ○みたいな専門学校だなww
もっとツールを使わないで一から作る技術を身につけたほうが
いいんだろうけど。
ツール類の環境を整えてるのが売りなんじゃ? まあ、今は学生書があれば激安で一式そろえれるから今は独学でも勉強が。 仕事で使うような自社ライブラリとかはそもそも入手できないし。 仕事で使う数十万から100万するモデリングツールや動画編集ソフト類も無理だろうし。
JMSのことが詳しくのってる本かサイトはありませんかね? できれば日本語希望です。
JMSなりActiveMQでぐぐって、最初のリストに出てくるサイトの中に無ければないんじゃね?
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の自動指定 が外れないのでは無いか?と疑っているのですが、何か ご存知の方、他に設定が必要でしたらお教え下さい。 お願い致します。
125 :
デフォルトの名無しさん :2007/08/02(木) 11:15:57
統計ライブラリは何を使ってますか フリーのものでお勧めのがあればご紹介ください
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に変えたらコンパイルちゃんと通ったのですが、 引数に禁止されてる変数名とかあるのですか?
>>126 gの型は何のつもりなんすか。int or Graphics?
>>127 あ…Graphics gを引数で受け取ってて、
記憶域の都合で関数外でint r,g,bを宣言してたから
名前が被ってた…orz
Javaは昨日からだけどC/C++は2年くらいやってるのに
何をこんな間違いを…orz
ちょっと吊って来ます。
129 :
質問です :2007/08/02(木) 12:47:08 BE:9069034-2BP(6)
java で特定の日時を保存するには何のクラスを使えば適切なのでしょうか?
>>129 君の言ってる保存って何?
ファイルに出力する事?
131 :
質問です :2007/08/02(木) 13:15:19 BE:11335853-2BP(6)
>>129 あ。すいません。
メモリー上で保持することです。JavaPlatform SE 6でお願いします。
Dateかと思ったんですが、ドキュメントをみるとメンバー関数に
推奨されてない的なことが沢山あったので別にあるのかなと思って質問いたしました。
int i; for (int j = 1 ; j <= 9 ; j++){ i = 2 * j; System.out.println("2 × " + j + " = " + i); for文なんですが、出力部分の"+"の意味がわかりません。 どういう意味なんでしょうか?
>>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参照。
>>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」
>>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");
になる
>>132 なんだ、足し算教えろっていってるのか?
137 :
デフォルトの名無しさん :2007/08/02(木) 13:51:45
138 :
質問です :2007/08/02(木) 13:52:10 BE:31739876-2BP(6)
>>133 おおお、詳しくありがとうございます(ノ∀`)
参考になりました
さすがに千葉工業大学だなw つりもレベル低いや
よくわかったね
よくわかるも何も自己紹介してるじゃん
Be付けて恥さらし(笑)
143 :
質問です :2007/08/02(木) 21:35:16 BE:7557252-2BP(6)
>>142 ニセ者をニセ物と見抜けないおまいも(略
やってることが恥晒しってことだろ
145 :
デフォルトの名無しさん :2007/08/03(金) 10:03:28
JTextAreaで表示するテキストの行間の間隔を変えたいのですが、それっぽい設定が見つかりませんorz どこをいじれば良いのでしょうか・・
146 :
145 :2007/08/03(金) 12:02:22
自己解決しました。
147 :
デフォルトの名無しさん :2007/08/03(金) 12:32:27
してないです。
test
メゾッド内で引数に与えられた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()) { // なぜかここが実行されない } } 何が悪いのか教えてください
_found_error の error_frag が指す先を別のオブジェクトに変えても、 readFromData の error_frag が指す先は変わらないから。
>>149 Boolean はimmutableなのでインスタンスの状態の変更はできない。
そしてJavaは全て値渡し。
error_frag の参照値がコピーされて _found_error に渡され、
_found_error ではコピーされた参照値をBoolean.valueOf(true) が戻す参照値で上書きする。
その際、readFromData の error_frag は影響を受けない。
解決法としてはインスタンスメソッドなら error_frag をインスタンス変数にする、
それが嫌なら boolean[] やら class MyBoolean{ boolean flag; } を使うなどして
インスタンスの状態を変更できるものを使う。
考えてみれば error_frag = Boolean.valueOf(true); ではerror_fragの実体の指す先が変わってしまいますよね、失礼しました。 値を変えたいboolean型をこれらのメゾッドの関数が含まれるクラスのメンバー変数にして 解決することにしました。 どうもありがとうございます。
連絡がありません。いいかげんな対応をされては困ります。あと一週間以内に何も連絡が無い場合、 落札者都合で削除すると同時に悪い評価が付きます。
ServerSocket.accept()や、BufferedReader.readLine()のような 入力がある、終わるまで待機するような方法を探しているのですが、スレッドを使って値を
途中で書き込んでしまったorz ServerSocket.accept()や、BufferedReader.readLine()のような 入力がある、終わるまで待機するような方法を探しているのですが、スレッドを使って値を 監視する、以外に方法はないでしょうか?なんかこれだとCPUの無駄遣いのような気がしますし もっと効率のいい方法がないかなと。
何を待ちたいのかわからないが、 自スレッドを Object#wait で寝かせて、他のスレッドから #notify もしくは #notifyAll で起こすことはできる
それか、複数のソケットを同時に待ちたいってことなら、Selector を使うと幸せかもしれない。 ぜんぜん違う話なら、もっとくわしく・・・
すいません、"set"じゃなくて"m"です。とりあえず中央のボタンの下らへんにJListがあります。
160 :
デフォルトの名無しさん :2007/08/03(金) 19:00:50
thread内でDBにSELECTしたりINERTしたりする時ってデッドロックって起きる? 同じテーブルの同じレコードに同時にINSERTしたりしたら起きるんかな?
>>159 まあ、SwingというかAWTから勉強した方が良い。
>>158 とりあえず super.paint(g);
レイアウトマネージャとか、AWTとSwingを混ぜるなとか、色々あるけど、まぁね。がんばれ。。
そもそもprintConponent()な。
paintComponentじゃね?
>>157 Jinputを使ってgamepadからの入力を受け付けるんですけど
Jinputだといわゆるイベント(keyEvent)とかを発行しないんです。
だから現状はいつボタンが押されたか常にスレッドで〜msごとに
どのボタンが押されてるかチェックしてるんですが、
もっと効率よくイベント発行するタイミング(ボタンおされた時)を調べるにはどうしたらいいかなと。
jinputなんか知りまへん・・・と言いたいが、そのうち自分も使いたくなるかもしれないから調べてみる。 ・・・・・・ だめっぽいね。 一定時間ごとに poll するしかなさそうです。 よく考えたら DirectInput も joyGetPos も自分で取りに行くしかないっけか。。。 結論 → むり
ソースコード上に書いたクラスのフィールドやメソッドの順番って、 コンパイル後やHotSpotコンパイラがネイティブコンパイルした後も維持されますか? どのVMならというのではなくて、言語仕様としてどうなのかなと。
ソースの字面出現順にメモリにアラインメントされるかってこと? それなんて構造体? javaはレジスタすら動的に配置して定期的にメモリ内容かわってるのに。 ていうか配列すら最適化のために連続しておかれる保証はないのに。
>>155 Swingとかでの話か?
1文字入力がある度に、KeyEventListenerで拾って処理するってのが定石
お前さんが思うほど不可はかからない
もしくは、フォーカスが外れたタイミングで処理する
CUIとかでの話であれば、System.in.read() 等はブロックする筈
自作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)の方法はあまり勧められないとの記述があり、迷っています。 諸兄のご意見をお聞かせください。
>>168 > 配列すら最適化のために連続しておかれる保証はない
まじでか。まあデカイ配列で落ちられても困るから有りだけど。
>>170 (1)の方法で勧められない理由は何か説明できる?
説明できないならば、(1)の方法でも何も問題ない。
(2)は結局はImplがどれかを知らなければならないので(1)と何も変わらない
(3)はいわゆるFactoryクラスを作るパターンだが、Implを状況に応じて使い分ける必要がないならばただのオナヌー
(2)は後のリファクタリングを意識した冗長設計だな。 シングルトンにしたほうが都合が良いなら、内部でそうすればいいし、 DBAHelperImplに致命的なバグがあり、 工数的に他所のDAOをラップして返した方が都合が良い場合もある。
>>167 フィールドは並び替えられているという話を読んだ覚えがある。
char a;
int b;
char c;
みたいなのを順番どおり並べると隙間が出来て無駄なんで
int b;
char a;
char c;
に並び替えて隙間を詰める。
低レイヤーの話をするのは無意味。Cじゃないし。
>>171 javaの配列が短形でなくて良いのはどうせ最適化されて実行時に都合の良いように再配置され凸凹になるから。
メモリアドレスで言えば番地が連続している訳ではないし、その必要も無い。
配列要素nがあったとして番地的にn+1の要素が隣の番地にあるとは限らない。
だからjavaの配列は順次アクセスが早いとは限らない。
まあこのくらいの問題なら自分でアラインするより よっぽどスマートなメモリの使い方する(文字列以外)から気にしたら負け。
178 :
デフォルトの名無しさん :2007/08/04(土) 14:58:42
javaで構造体(みたいなもの)を定義してその中のある要素でソートするにはどうしたらいいですか? たとえば 名前、身長、体重のデータからなる構造体を身長の高い順から表示するようなプログラムを作りたいんですが。
compareTo
180 :
デフォルトの名無しさん :2007/08/04(土) 15:31:04
OSのシステム言語を英語にするとコンソールの日本語が文字化けしてしまうのですが システム言語に関係なく日本語を文字化けさせないためには、どのようにすればよいのでしょうか? ロケールなどを設定してもダメでした…
仕様です
182 :
170 :2007/08/04(土) 15:45:23
お答えありがとうございます。 現時点では(1)を否定する理由が思いつかないため、(1)でいこうと思います。 その後いろいろ調べてみました。 (2)を採用する理由は、実装クラスの内部的な変更に強くなる(インタフェースのメソッドのみを使用している限り、利用する側の修正がない)。 (3)を採用する理由は、実装クラスそのものが別のクラスに変更されることに強くなる(データストアがWeb、Fileなどに変わっても使える)。 このように理解したのですが、これで問題ないでしょうか。
> (2)を採用する理由は、実装クラスの内部的な変更に強くなる(インタフェースのメソッドのみを使用している限り、利用する側の修正がない)。 > (3)を採用する理由は、実装クラスそのものが別のクラスに変更されることに強くなる(データストアがWeb、Fileなどに変わっても使える)。 (2) と (3) はほとんど同じことだと思うが。 (2) は DBAHelperImpl のメソッドで取得するとはいえ、 実際に何のクラスが返されてるか外からはわからないわけで。 別のクラスにすりかえることはカンタン。
184 :
デフォルトの名無しさん :2007/08/04(土) 18:04:03
どなたかListについて教えていただきたいのですが 例えばArrayListでインスタンスを生成したListの変数があり そのリストには1000個の要素(文字列)が入ってるとします。 もっと具体的に書くと文字列"AAA"と"BBB"と"CCC"が それぞれ100個、400個、500個リストに格納されてるとして (格納されてる文字列の並びは適当) このときリストに格納されている各文字列の存在個数を高速に割り出す方法はありますでしょうか? パフォーマンスを無視すれば配列のサイズ分だけ回せば可能ですが それだと配列のサイズの二乗になってしまうので可変長データでやるにはかなり非現実的ですので
>>184 ソートしてからなら1次でしょ。
StringはComparable<String>を実装してますよん。
コピーしてマージソートしてから1週舐めるなら 文字列の種類が少ない場合に遅くなるかもしれんけどね。
ハッシュマップで数えるとか。 for (String s : list) { if (hashmap.containsKey(s)) { hashmap.put(s, map.get(s) + 1); } else { hashmap.put(s, 1); } }
TreeSetじゃだめなん?
あーSetはだめだった。
>>187 の方法でやったことあるけど十分早かったような
191 :
デフォルトの名無しさん :2007/08/04(土) 18:41:43
いま軽くコレクションクラスでソートしてみたら恐ろしく簡単にソートできたので
>>185 様の案で行くことにしました。ありがとうございました。
ソートする必要なければ TreeMap/TreeSet よりか HashMap/HashSet のが速いよ Tree の利点はキーが常にソート順を維持されてるところ Hash は順序不定
それじゃ187様の方法で行きます。ありがとうございました
ところでListの配列をHashMapに変換または簡単に作成する方法ある?
キーはいかがなさいますの?
やっぱソートして比較することにした
Stringのマイクロベンチマークは、String.equalsが落とし穴になるよな。 例えば定数をコンソールやテキストから入力するなら、s1 == s2 で true になることは無い。 静的にデータを持つならnew String(CONST_STR)みたいにしとくことが必要になる。 こういう正しいテストデータ作成用のライブラリってない?
マイクロベンチマークがしたい。
>>180 コンソール側のページコードでどうにかならない?
>new String(CONST_STR)みたいにしとくことが必要 ここがわからない。 >正しいテストデータ ここもわからない。
>>201 > ここがわからない。
>> 例えば定数をコンソールやテキストから入力するなら、s1 == s2 で true になることは無い。
言語仕様がわからないなら介入しなくていいから。
equalsつかえよ
迷惑だからキミは絡まないで。
String.equalsの仕様を知らない馬鹿がなんか邪魔してくる・・・
オブジェクトが一致する場合と一致しない場合で、equals が true になる場合の計算コストが違うことをいってるわけ? トーシロの俺には何がなんだか(´・ω・`)
208 :
197 :2007/08/04(土) 20:46:30
事故解決しますた
209 :
208 :2007/08/04(土) 20:48:48
誤爆です><
/ニYニヽ /( ゚ )( ゚ )ヽ /::::⌒`´⌒::::\ でっていうwwwwwwww | ,-)___(-、| | l |-┬-| l | \ `ー'´ /
存在個数なら、ListなめてMapにカウント突っ込んでいけばいいんじゃないの?
パフォーマンスの問題は、実際にパフォーマンス上の問題が起きてボトルネックが発見できた場合に対処すればいい。 机上の空論でのパフォーマンス対処ほど無駄なものはない
/i /{/'⌒'} }}Y/ / ,r-、ヽ, / ノ、|、ヾ_,,ノ ノ ノ{ ヾ {^')) }フ/ / _/ \ヽ、 彡'`、、 'ー' ノ //",,゙ """ / ヽ 理 議 そ ヽ-、ミ‐-、、 、,r=‐'¬ー=、、,-‐'_ ヽ、 /ノ / 解 論 の ミ/ ~  ̄ノ /\ /彡 "" |/ で し な / ,' u ∪ ! ヽ | i、゙ー''"彡 /| き て め 、、∪ / ノ / _,,,...-‐‐ニ=,ノ,,/ ヽ、,,_ \ ,イ / | な い 方 ニ、=!, l_. レr=-ニ二、,,,.-'" ー、==-ヽ'"/ / ヽ い る を 、(・,)>ノ⌒ ∠,(・,)_く ゙` ヽ゚ノ`ー=、_ /// ∠ の こ  ̄/""゙ ヽ ̄ ̄ \ヽ  ̄ ̄ // ノ か と u 〈 、 u (ヽ //  ̄ノ ? も ヽ -' lj >、 // /  ̄ヽ、 /ヽー‐ 、 /'"´ 'i // / ∨ヽ/ ^゙"⌒ヾ、 ,i| ,"__} // / / ー- - ヽ_人`'′ // / / / i'゙' /-─‐‐''/_/_ 、 _/-‐ヽ、___,,,, -‐‐  ̄ ー-、、,,__,-‐'//ノゝノ ノ ヽ\
>問題が起きてボトルネックが発見できた場合に対処すればいい どこの腐れ初心者ですか? あ、ここは初心者スレか。悪かった >机上の空論でのパフォーマンス対処ほど無駄なものはない 何千件とデータ回す場合を考えたら目に見えて明らかなんだが頭大丈夫かお前?
それは凄い動体視力
>>214 マジレスしとけば、数千件程度でパフォーマンスに影響出るって何時の世代のマシンだよw
数千回DBアクセスでもすんの?
数千回IOでもすんの?
じゃあ数百万件に変更な。これでいいか?
218 :
デフォルトの名無しさん :2007/08/04(土) 23:27:47
>>217 そりゃアルゴリズムか設計に問題あるだろ
>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; } } 最初から数えておけばいいってこと
最初からカウントしてたら誰も質問しねぇわなww オナニーコードもほどほどにな
プッ
223 :
デフォルトの名無しさん :2007/08/05(日) 00:34:48
longやintといったプリミティブ型の数値をbyte配列に変換するにはどうしたらいいでしょうか? longの値をbyte[8]の配列に入れたいのです。 何か方法がありましたらぜひお教えください。
224 :
デフォルトの名無しさん :2007/08/05(日) 00:38:27
くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
どういうふうに変換したいのよ。 どういうふうでもいいなら、これでどう↓ long x = 0; byte[] b = new byte[8]; new DataOutputStream(new ByteArrayOutputStream(b)).writeLong(x);
>>223 long l = 1000;
byte b = (byte) l;
という形でダウンキャストを行う
そうすれば、上位ビットを無視するので、最下位のバイトが格納される。
上位バイトの取得は、ビットシフトを使えばOK
227 :
デフォルトの名無しさん :2007/08/05(日) 00:42:42
くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
byte[] binary = new byte[8]; ByteBuffer buff = ByteBuffer.wrap(binary); buff.put(longValue) もっといい方法が在るかもしれん。 あとJava内部のバイト配列はビッグエンディアンのはずだから気をつけること。
229 :
デフォルトの名無しさん :2007/08/05(日) 01:01:41
くそ天皇 くそ天皇 くそ天皇 くそ天皇 いい加減死ねっつってんだろ屑ニートくそ天皇が 相変わらず病的な粘着っぷりだな屑ニートくそ天皇が 毎日毎日毎日粘着出来て良いでちゅねくそ天皇 くそ天皇さっさと死にやがれゴミが 東京に在住している精神病珍米糞ニートくそ天皇君の末路 さっさと精神病院逝くか首吊って逝くか選べや糞天皇が 早く死ねよ糞ニート天皇が 粘着精神病屑ニート天皇君は自らニートくそ天皇であると公言しました さっさと死ねやくそ天皇が 早く死ねっつってんだろ屑ニートくそ天皇が お前みたいなゴミクズ天皇は息してるだけで空気が汚れるからさっさと死ねや とっと死に晒せや糞ニート天皇が
初心者じゃないんだけど、axisとかlog4jとか使ってるフリーのJavaライブラリを 複数使ってるとjarの中にあるクラスがバージョン違いで実行エラーになるんだけど どうしたらいいんだろう。 実行中にロードされたクラスファイル全部を見直して、モジュールの競合を解決してくれたり 何がいけないのかを判断してくれるツールないかなー?
>>230 ・競合ライブラリを最新のものに統一する。動かない部分は自前で修正
・それかクラスローダを分ける
>>231 クラスローダを分けるとClassクラスとかでインスタンス生成するとき面倒じゃない?
競合ライブラリを最新のものにして、古いメソッドや仕様変更したAPI使ってたら、アウトだし。
初心者じゃないって前振りはいったいなんだったのだろうか。
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); って出来ないの?やってみたところできてないっぽいんだけど
できるでしょ。 >a.getList.add(hoge1); a.getList().add(hoge1);
uho-勘違いしていました
お恥ずかしい(-_-)
>>235 回答ありがとうございました
複数のスレッドから操作されるフィールドcountに volatlieを付けるとする。どの程度保障されるもの? while (count < 0) { } public void setCount() { this.count = count; }
仮引数書き忘れた。。。
そんな意味不明なコード片じゃ何が言いたいのかわからん。 count++; みたいなコードは、volatile であってもアトミックにならない。他のスレッドが割り込む可能性がある。 つまり count++; をするスレッドが複数あったらだめ。 書き込むスレッドがひとつだけの場合は複数のスレッドから読んでも大丈夫。 ・・・ていう話? それとも volatile の正確な定義が知りたいのん?
Java の volatile はいい加減な実装になってる可能性がある、 って話を見たことがあるんだけど、今でもそうなの?
242 :
223 :2007/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ではどうやればいいんだろうと思ったしだいです。
ビッグエンディアンには注意します。
Java内部がビッグエンディアンというか、 Data*StreamやデフォルトのByteBufferがそう補正してるってのが正しい?
244 :
デフォルトの名無しさん :2007/08/05(日) 04:09:43
正しくない。 というか意味がわからん
意味が分からないなら書くな。てかJavaDocに載ってる。
最近byteとintの単項数値昇格ネタ増えたな。 俺自身バイト指向でデータ扱うことが減ったのですっかり忘れてた。 "& 0xFF"で下位bitのみとれって話だよね。
Jakarta CommomsのHttpClientについてのいいページない? ググったけど、情報量が足りないページばかり。
>>247 情報量って。。。本家にいくらでもあるだろ
249 :
デフォルトの名無しさん :2007/08/05(日) 09:27:21
ファイルの入出力をしているのですが、 もしプログラムと同じディレクトリに入出力用ファイルあれば、 そのファイルから中身を取り出し・加工して再びそのファイルに書き出す。 もし無ければ、新しいファイルを作成して、そこに書き出す。 という用に行いたいのですがどの様にしたら良いでしょうか? 教えてください。
>>249 どのJAVAの入門書でもサンプルコードが載ってるだろ
ググれば山ほどあるだろ
>>242 時代の流れだな
Javaでバイトを意識してデータを扱うケースは稀だし、知らない技術者も多い
String型変数に入っている(2バイト)文字の文字列を 漢字、ひらがな、カタカナ、その他記号などといった種類別に分割するということを 「プログラミング言語Javaに関する質問スレです。」 ↓ 「プログラミング」「言語」「Java」「に」「関」「する」「質問」「スレ」「です」「。」 Javaで(効率よく)やるにはどのようにしたらよいでしょうか? (というか、文字種別をどうやって判断したらよいでしょうか?) 文字コードによる問題などもありますか?
ひらがなとカタカナは順序どおり並んでるらしいからif thenでやるのが簡単っぽいけど
漢字・ひらがななら3バイトだと思うのは置いといて、 自然言語解析するか単純にテキストそう舐めして用意しといた単語リストと照らすか。 日本語はRPNなのでry 言い出したら切りがないな。
UFT-16なんだから、全部2バイトだろ
volatlieの件だけど、1.5ならいけそうです。 ありがとう、検証してみます。 1〜400のスレッドから操作を受けてるみたい
>>256 1.5ならば、AtomicIntegerの使用を検討してみたら?
アトミックな操作が簡単に出来る
ただ、そもそもスレッド周りの勉強をした上でスレッドに手を出した方がいい
>>252 効率よくやる方法はかなり難しいのではないか?
英語のように単語間がスペースで区切られているなら楽だろうが・・・
ぱっと思いつくのは、カタカナ・ひらがな・半角英数(といくつかの記号)は正規表現かなにかで定義
漢字で抽出するのは難しすぎるので「その他」で我慢する
後は、頭から崩して連結していくしかないと思う
下手に文字コードを数値で表現した所で、バグは増えても実行性能は大してかわらなそ
スレッドに手を出さなきゃスレッドの勉強なんぞできないだろ このスレの自称中級者どもはうざいのばっかだな・・・
お前は新しい技術をコピペでもして使ってから勉強するのか? 動けばいいという低レベルなマの典型だな
お前のコードはバグだらけなんだろうな。 普通は模範的なコードを見て覚えるもんだ。
模範的なコードを意味も含めて理解することが勉強ではないのか?w
>>262 お前自身が何も理解してなさそうだな。この流れをみるに。
>260の頭が悪いということは解った
初学者がvolatileって単語にたどり着いてる時点でGoサインはでてるだろ いじって覚える絶好のころあいだと思うのだが違うのか?
別の人がさわらないプログラムだからと言って、クラス変数を全てpublicにしたら怒られそうですが。 public class Hogegege { private String name__; public String getName() { return new String(name__); } } っていうように、クラス変数を要求されたときに 新たに生成したものを返して絶対に変更できないようにした方がいいんでしょうか? それとも単に return name__; でOK?
String は元から絶対に変更できないから単に return でOK。 変更できるようなオブジェクト (普通の配列とか) は clone した方がいいこともある。
StringやIntegerなどは不変クラスと呼ばれる値オブジェクトとして理想的な構造を持ってる。 例えばOSごとの改行コードを返すクラスがあるとして、 それがchar[]で返されるものなら、それは return clCode.clone(); とかすべき。 コレクションならCollections.unmodifiable系メソッドでラップするのもよし。
定数にコレクションを使うときに下のようにすることもある。 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).; }
要求された側が何をしたいかにもよる 要求された側も何をさせてOKかを考える その上で生で公開させてもいいし、防御的にコピーを返してもいい 結局は要求次第だが、なるべくは防御的にするのがセオリー Stringに関しては>267,268の説明の通り たが、char[]をコピーするか否かは要件次第なので、一概にコピーするべきとは言えない
変なのが騒いでるが
だれか満を持してネタ投下した
>>255 に突っ込んでやれよw
UTF系は固定長じゃないぞ。
UTF-32は固定長だが、UTFじゃなかったのか。
UTF-32は21bitになったUnicode3.1の全コードを単一のbit長で表現するために 後から作られたから可変長にする必要がないだけだよ。 アレが特殊。21bit範囲内はUCS-4と互換性を取るって目的もあるし。 可変長より固定長の方が扱いやすいからbitの無駄使いより扱いやすさを優先した符号化方式。 UTFは元来可変長で表すもの。
サロゲートがそもそも後付けだろ
275 :
132 :2007/08/05(日) 17:31:38
連結って意味だったんですね^^; 謎が解けましたorz ありがとうございました。
サロゲートが後付けって言うかUnicode作り出した段階で すでに16bitじゃ足りないのは分かってたけどそれに対処したのが遅れただけ。 実装側の互換性の問題とかがあったから。
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個追加したいのですが、 変な文字列が連結されます。何がいけないのでしょうか? おしえてください。
>>277 nextInt()は32ビット乱数のはずだから負数も取った気がした。
0と自然数だけ欲しければnextInt(26)ってやれば0〜25をとるよ。
>>277 出来ました!どうもありがとうございます。
280 :
デフォルトの名無しさん :2007/08/05(日) 18:13:04
>>277 random.nextInt() でマイナスも含まれるから。
試しにrandom.nextInt() だけ出力してみるといい
random.nextInt() にはオーバーロードメソッドで、0からnまでの乱数を返すrandom.nextInt(n) がある
random.nextInt(26) で試せば期待した結果になると思われ
アンカーミスった
>>278 >>280 思い通りの動作が出来ました、どうもありがとうございますm(_ _)m
>>276 サロゲートペアはUnicode誕生から5年後に導入されたんだが。
適当なこと書かないでおくれよw
小生、Eclipseを使って開発しているのですが 本日「BufferUnderflowException」なるものが発生しました。 ググってみたところ「相対「get」操作がソースバッファのリミットに達したときスローされる、チェックされない例外です。」 との記述があったのですがよく意味がわかりませんでした。 ここでいうソースバッファのリミットとはコンパイラーのメモリのことを指しているのでしょうか? もしメモリ関連のサイズのことを指しているのでしたらどこで設定できるのかどなたか教えていただけないでしょうか? ちなみにEclipseの設定→Java→インストール済みのJREに指定しているのは最新のJRE1.6.0です。
いや。 java.nio.ByteBufferあたりのクラスのget系メソッドでサイズをオーバーして読み込んでしまった意味。 配列で範囲外のインデックスを使ったっていうのに近い。 単にプログラミングミス。
>>283 相対操作はpositionが読み込んだ値のバイト数分先に進むんだよ。
あと何バイト読み込めるかはremainingで確認できる。
構造体チックに各メンバ変数の並びを仮定して使うなら、0, 4, 8みたく
プリミティブごとのバイト数を足して絶対アクセスすればいい。
プログラムミスだなんて・・・・そんな・・・ 実績のある会社が提供してる有料のライブラリーに含まれるメソッドを使ってたんだけど 使い方がわるかったのかなぁ・・・あーもう嫌ぽ
すいません、javaである処理を実行すると コンソールの初めあたりに以下のようなエラーメッセージが出て VM?ごと処理落ちしてしまいます。 しかもこれは必ずは発生するというわけではなくて不定期に出てしまいます。 不定期ですが処理を繰り返しているとすぐ発生する感じです。 JREのランタイムも最新のものを指定いるのですが相変わらず発生します。 どなたかわかる方がいらっしゃいましたら教えてください 「An unexpected error has been detected by Java Runtime Environment」
エラーログ嫁
申し訳ありません。エラーログ?を読んでもさっぱりわかりませんでした。 通常のログとは違ってこの処理落ちの場合にのみ生成されるログをのことだと思いますが なんか「Thread」「Process」「System」といった感じにわけられて情報を ダンプしているような感じに見受けられましたがエラー原因となるような記述は 書かれているのかいないのかサパーリでした。なにか読み方があるのでしたら教えてください
あぁそれですわ。でもログは職場のマスィーンにあるので今うpできんのです申し訳ないです
292 :
デフォルトの名無しさん :2007/08/06(月) 00:13:57
>>286 ソースコード読んでみろ
実績のある会社ならばソースコードくらい提供できる
出来ないとか抜かすならば金払う必要なし
逆コンパイルしてバグ見つけて訴訟もおk
>>287 それってJavaからネイティブモジュール読み込んでます?*.dllファイルとか?
それだともしかしたら、PCの相性が悪いだけかもしれません。
自分もJNIを用いたプログラムでブルースクリーン出した事がある。しかも不定期。。
ネイティブ使用ならVM引数にXcheck:jniをつけてみる
しかし
>>287 のよーな現象に陥ったことがない為役にたつかはわかんない。
>>286 まぁその会社のサポート窓口に訊いてみれば?
使い方の問題にせよバグにせよ、なんらかの返答はあるでしょ。
JDI でオブジェクト生成を監視するのってどうすれば良いとおもう?
>>282 お前は日本語理解しような。
16bitじゃ足りないのは初期段階から分かってたけど実装側を無視できなかったから"Unicode誕生から5年後に導入された"んだろうが。
だいたいjavaなら普段は拡張面無視してるからUTF-16で16bit単位の可変長だろうが。
固定長なのはUCS-2ですよw
UCS-2 UCS-4 っていうのは文字集合であってエンコーディングじゃないんでは?
>>252 単純にやりたいなら、java.text.BreakIterator#getWordInstance()
本格的にやりたいなら、形態素解析が必要。
300 :
デフォルトの名無しさん :2007/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 :
デフォルトの名無しさん :2007/08/06(月) 18:41:13
>>300 1. Sample1.txtを読み込む
2. Sample2.txtを読み込む
3. Sample3.txt に Sample1.txt と Sample2.txt の内容を書き込む
Sample1.txtを少しずつ読む *かどうか調べる *ならSample2.txtの内容をSample3.txtに書く *でないなら今まで読んだSample1.txtの内容をSample3.txtに書く Sample1.txtの終わりまで繰り返す
303 :
デフォルトの名無しさん :2007/08/06(月) 19:30:00
あの、関数の引数にfinalは付けるべきでしょうか。 関数内では値を変えることがないし変わって欲しくない場合、 finalを付けた方がいいとは思うんですが、 全てに付けているとパラメータの部分が長くなってしまい見づらいといえば見づらいです。 常識的にはどうするべきなんでしょうか。
305 :
デフォルトの名無しさん :2007/08/07(火) 01:49:10
>>304 限りなく好みかもしれない場所の1つだな
finalにした所でオブジェクトの内部は変更される可能性はある
引数に対して再代入する事自体を禁止し、FindBugsアタリでチェックしておけば不要とも言える
(逆に言えば、メソッド内で引数への再代入を防止する為にfinalを付ける、だがw)
個人的には不要派
306 :
デフォルトの名無しさん :2007/08/07(火) 01:50:10
final付ける場合と付けない場合もあるし、 つけなくてはエラーになるときがある。 べつに無理につける必要はないと思うのだが....
>>304 プロジェクトで決められてたら、それに従えばいい。そうでなければ好きにすれば良い。
経験的には手作業で final 付けてると、そのうち嫌気がさして止める。
一番最初にやるHelloWorldなんですけどテキストに書いて それをコンパイルしようとしたんですけど 「javacは内部コマンドまたは外部コマンド、操作可能なプログラム またはバッチファイルとして認識されていません」となってしまいます。 どうしたらコンパイルできるようになりますか?
環境変数でググれ
310 :
デフォルトの名無しさん :2007/08/07(火) 02:10:14
>>306 final付けなくてはエラーになると本気で思っているならば勉強不足
それは匿名クラスなどに参照を渡しているからだろう
環境変数PATHを設定する
312 :
308 :2007/08/07(火) 02:23:25
とりあえずみんなが指摘してくれた通り環境変数見てみたんだけど多分あってると思う。 ;C:\Program Files\Java\jdk1,5,0\binをpathに加えればいいんだよね?
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 :2007/08/07(火) 02:26:07
やっぱり駄目だ・・・誰か助けてくれ
カンマとピリオド再確認
あと、本当に 1.5.0 かどうかも。 実は 1.6.0 をインストールしてましたとか。
------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名、ユーザ名、パスワード名は大丈夫だと思うんですが・・・。
>>312 > ;C:\Program Files\Java\jdk1,5,0\binをpathに加えればいいんだよね?
を加えちゃいかん
;"C:\Program Files\Java\jdk1,5,0\bin"
空白文字の扱いを知らんのか
319 :
318 :2007/08/07(火) 02:52:26
しかもピリオドでなくてカンマやんw ;"C:\Program Files\Java\jdk1.5.0\bin"
java的にはfinalな引数を導入したのは内部クラスから参照するためって事を知ってる前提で話してるんだよね? 人に聞くくらいなら内部クラスない場合は好み程度、と考えておけば良いんじゃない? 自分からfinal付ける明白な理由もなさそうだし。
322 :
308 :2007/08/07(火) 03:04:37
駄目だ・・・何でできないんだ?とりあえず315さんにいわれたようにカンマとピリオドはおk
そして318さんに言われたとおりに;"C:\Program Files\Java\jdk1.5.0\binってPathのあとに
つけて今にいたりました
>>320
PATHをマイコンピュータのプロパティから変更してるなら、 プロパティをOK押して閉じてからコマンドプロンプトをいったん閉じて開きなおす。
そもそもC:\Program Files\Java\jdk1.5.0\binってフォルダの中にjavac.exeがあるのかね?
>>322 ちなみにうちの環境だと
C:\Program Files (x86)\Java\jdk1.5.0_01\bin
にjavac.exeはある
326 :
308 :2007/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入力するらしい。 もう俺にはお手上げです。
>>326 それは関係無い
コマンドプロンプトから
"C:\Program Files\Java\jdk1.5.0\bin\javac.exe" -version
って入れて Enter 押して結果を教えなさい
328 :
308 :2007/08/07(火) 03:31:03
指定されたパスが見つかりませんたって出ました
329 :
デフォルトの名無しさん :2007/08/07(火) 03:31:06
ClassPath通してる?
330 :
308 :2007/08/07(火) 03:33:52
よくわからない
331 :
デフォルトの名無しさん :2007/08/07(火) 03:33:54
C:\Program Files\Java\jdk1.5.0\libの中の jarファイルにクラスパス通してないんじゃないの?
>>328 マイコンピュータ開いてCドライブ開いて・・・って辿っていってjavac.exeのあるフォルダ確認して。
Windowsの種類やJDKのバージョンによってこのフォルダのパスは変わるから。
よく釣りに付き合ってますねー 肝心なとこスルーして答えてないしメチャクチャ釣り臭いんですけど
>>333 は教えることもスルーすることもできないゴミ
>>328 ってことは、原因は 『C:\Program Files\Java\jdk1.5.0 に Java SDK をインストールしていない』 ってことになるんだけど、
[1] ダウンロードした SDK の確認(JDK と JRE と間違えてないか)
[2] インストール場所の確認
をお願い
336 :
デフォルトの名無しさん :2007/08/07(火) 03:36:45
釣りだべ
337 :
308 :2007/08/07(火) 03:45:11
ごめん釣りじゃなくて本当にわかんないんだよ・・・喧嘩しないでくれ
>>332 よくわからない調べ方が。
>>335 も調べ方がわからない。本当にすまん。初心者なんだ。
>>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はあるか
もうjavac.exeをハードディスクの中で検索したら?
340 :
308 :2007/08/07(火) 03:55:34
1○ 2○ すまんもうこれ以上わからん・・・
341 :
308 :2007/08/07(火) 03:56:15
実はJDKをインストールしていませんでしたというオチ?
>>340 じゃあJDKをインストールしてないんじゃないの?
これはPCに元から入ってるものじゃないよ
どこからダウンロードした?
そもそもダウンロードすらしてない?
344 :
308 :2007/08/07(火) 03:58:09
いや本についてる奴インストールしたと思う。
>>341 たぶんね、まじめな話パソコンに慣れてからのほうが良いと思うんだ。
門前払いする気は無いんだけど、PC の知識はどうしても必要になるから、今のままだと今後さらに悩むことになる。
とりあえず寝れ。寝て起きてまた考えろ。
>>341 HDD内のファイル検索すらしたことが無いのか?
プログラミングはかなり時期尚早だよ。
347 :
308 :2007/08/07(火) 04:01:15
>>345 なんかみんなの話聞いてたら確かに自分は早すぎるなと思ったわ・・・_| ̄|○
とりあえず今日はもう一回インストールしてみて寝ます。ありがとうございました。
>>347 インストールの途中で出てくる説明はよく読んでね
特にインストール先のフォルダを指定するところがあるだろうからそこはメモしておくといい
>>347 今みたいに、Java を勉強する過程で PC についての知識を深めるという荒業もある
じっくりやれば良いと思うぜー
350 :
308 :2007/08/07(火) 04:16:29
>>349 >>348 ありがとうございます。まだ基本的な知識が抜けているので自分で勉強しながらROMしようと思います。
質問できるレベルに達したらまた顔をだそうと思います。
>>304 引数につけた final はメソッドを使う側からは見えないので、
完全にメソッドの実装側の都合となるためそれほど重要でない。
>全てに付けているとパラメータの部分が長くなってしまい見づらいといえば見づらいです。
ここ重要。使い捨てでない限り、ソースコードは人が読む文書。しかも、唯一完全な文書。
意図せず誤ってパラメータへの代入を防ぐメリットとのトレードオフだが、
それが一目で分からないような複雑なメソッドはむしろリファクタリングの対象と思われ。
不要派が多いんじゃないかな。自分も不要派
352 :
351 :2007/08/07(火) 04:42:09
補足。 引数に final をつけることにより、 ソースコードの読み手にその意図を伝える役割があるが、 そもそも、引数に代入を行うこと自体が混乱を招くことなので 通常やらない(むしろ、そのようなコードはリファクタリング対象)。 したがって、この意味でも、引数に final をつける意義は薄れている というのが、不要派のおいらの個人的意見
C++でもconstを引数に使うのはconst char *のようなケースだけだものね。
いやC++のconst参照渡しは中身を書き換えないところまで保障するから別だとおもうが……
char * const s といった使い方はまずしないということだろ。 javaでfinalにした場合はこの意味だから。
>>352 引数に代入行うと混乱するぐらい長いメソッド自体の方をリファクタリング対象にした方が良いような。
短いメソッドなら引数に代入されても大して混乱しないし。
357 :
デフォルトの名無しさん :2007/08/07(火) 09:52:57
>>356 長いメソッド云々の前に引数に代入すんな、って話だと思う
どっちも糞コードなのは間違いないが、長いメソッドは可読性が低いだけ、引数に再代入するってのはバグと言ってもいいだろう
Javaにもいい加減constとfriendクラスが欲しいです
>>357 なんで引数に代入しただけでバグになるんだ……
変更前の引数の値を期待してるところが残ってるのに、引数変更しちゃうと
バグの元になるってんならわからなくもないけど、短いメソッドなら修正容易だし。
360 :
デフォルトの名無しさん :2007/08/07(火) 10:17:14
>>360 JRE が一つでもあればいいのなら、赤線の枠内は全部削除して良い。
J2RE5 が一つはあった方が良いなら、赤線の枠内は
J2SE Runtime Environment 5.0 update11 残して全部削除。
362 :
デフォルトの名無しさん :2007/08/07(火) 10:37:28
>>359 限りなくバグに近いだろう、例外の握りつぶしとかと同じレベル
極端な話、引数は自然にfinalでもいいだろうと思う
ついでに、6 の Update 2 があるんだから、 6 の Update 1 も削除していいんじゃない?
理由も無しに「バグに近い」とか言われても。夏だなぁ、としか。
365 :
デフォルトの名無しさん :2007/08/07(火) 10:50:36
理由も解らないなんて夏だな
>>362 にとってはバグなんだろ
そっとしといてやれ
どっちでもいいんだけど、そもそもバグの定義ってなんだ?
質問よろしいでしょうか。 ある文字列をキーに検索を行うプログラムを作っています。 その文字列のキーをワイルドカード(一文字マッチは"?"で行います)でも使用できるようにしたいと思い、文字列を末尾から"?"に置換するメソッドを作りました。 String value = "AAAAA"; int len = value.length(); for (int i = 0; i < len; i++) { String s = exec(value, len, i); // 検索処理 } public String exec(String _s, int _len, int _i) throws Exception { StringBuffer sb = null; try { sb = new StringBuffer(_s.substring(0, _len - _i)); while (sb.length() < _len) { sb.append("?"); } return sb.toString(); } catch(Exception e) { throw e; } }
自分の思った通りにならなくて駄々をこねる状態にさせるもの
これでAAAAA, AAAA?, AAA??, AA???, A????という文字列から検索を行えますが、 このメソッドを以下のような文字列を返すメソッドにしたいと思います。 パラメータが"ABC"なら、(2 ** 文字列長)回のループで以下の文字列を順番に返す。 1回目:ABC 2回目:AB? 3回目:A?C 4回目:A?? 5回目:?BC 6回目:?B? 7回目:??C 8回目:??? どなたかご教示頂けないでしょうか。
>>370 32文字以下に限るけど、
2^n 回ループで、iが媒介変数だとして、
「iのmビット目が立っていたらm文字目を?に置き換える」という処理を
n回やればいいんでは。
buildSearchKey とかが良いと思うんだ
>>370 import java.math.BigInteger;
import java.util.*;
public class A implements Iterable<String> {
private String s;
public A(String s) { this.s = s; }
public Iterator<String> iterator() { return new B(); }
private class B implements Iterator<String> {
private BigInteger i = BigInteger.ZERO;
private final BigInteger m = BigInteger.valueOf(2).pow(s.length());
private final int len = s.length();
public boolean hasNext() { return i.compareTo(m) < 0; }
public String next() {
if (i.compareTo(m) >= 0) throw new NoSuchElementException();
StringBuilder sb = new StringBuilder(s);
for (int j = 0; j < len; j++) if (i.testBit(j)) sb.setCharAt(len - j - 1, '?');
i = i.add(BigInteger.ONE);
return sb.toString();
}
public void remove() { throw new UnsupportedOperationException(); }
}
}
使い方はこんな感じで import java.util.*; public class C { public static void main(String[] args) { Iterator<String> iterator = new A("ABCD").iterator(); while (iterator.hasNext()) { String s = iterator.next(); System.out.println(s);//本当はsを使って検索処理 } } }
簡単に書くならこうでもいい for (String s : new A("ABCD")) System.out.println(s);
引数への再代入は否定せんが仮引数名から (変数の役割が)意味が変わる再代入は反対だな。アレは書いた奴にしか読めん。 friend欲しいのは設計が悪い。 constはjavaでは無意味。
constっぽいものはJSR-308のサンプルにある @Readonlyが追加されたら近い事が出来るようになるかも?
>@Readonlyが追加されたら近い事が出来るようになるかも? generics組み合わせたりすると型名がやたら長くなるのはいただけないけど、 コーディングミスを考えるとやむを得ないか……
>ご回答下さった各位様 ありがとうございます。 少々違った形での実装となりそうですが、無事に進められそうです。 // 検索キーの桁数を考慮しないと酷い性能に……orz
なんかよくわからんが、元の検索キーから正規表現を構築してそれで検索した方が簡単じゃない?
集計やイテレータを担う変数など、変化することが前提であるもの以外は、 引数を含むローカル変数は基本的に再代入禁止にした方がよいし、そうすることが可能。 外科手術に例えると、高度な手術は可能な限り無菌状態を保つことで初めて可能になる と、どこかのお偉いさんが言ってたヨ また、このリファクタリングは、他のリファクタリングを行う際の前処理にもなる場合もある。 例えば、ローカル変数の内容をメソッドから取り出すようにリファクタリングする際、 内容がメソッドの場所によって変わってたら困る。
明示的にコンストラクターを起動している間、インスタンス・フィールド name は参照できません このエラーはどういうことでしょうか? 調べてもわからなかったです。すみません。
スーパークラスのコンストラクタが終わるまでのあいだ this は使えない。 例えば class A { A(int x){} } class B extends A { int x = 10; B() { super( this.x ); // ← これ } }
384 :
デフォルトの名無しさん :2007/08/07(火) 21:34:25
「世界でいちばん簡単」なe本なのに… 50ページ目のコンパイルで躓いてます。 javacがなんかおかしいみたい。何故だろう?
そんな本もってないからわからない。 くわしく
386 :
デフォルトの名無しさん :2007/08/07(火) 21:40:22
最初の「プログラミングしてみる」 という項目で //MyJava class MyJava{ public static void main(String args[]) { System.out.println("My Java Program"); } } と、テキストで打ちました。 で、コンパイルするんですが
387 :
デフォルトの名無しさん :2007/08/07(火) 21:45:49
コマンドプロンプトで 「cd c:\MyJava」 「dir」 「javac MyJava.java」 と打つと 「'javac'は、内部コマンドまたは外部コマンド、操作可能な プログラムまたはバッチファイルとして認識されていません」 と出てしまうのです。
JDK をインストールしているかどうか、 インストールしているならそのインストール先を確認して、 そのインストール先の bin フォルダを環境変数 PATH に追加する。 ・・・その手の設定方法って本に載ってない?
389 :
デフォルトの名無しさん :2007/08/07(火) 21:54:41
>>388 様、ありがとうございます。
最初に、JDKのインストールと、PATHの設定が載ってました。
それは本の通りに進んでいたのですが…
390 :
デフォルトの名無しさん :2007/08/07(火) 21:56:13
質問させて下さい。 int型のデータ「0xC01A」からString型のデータ"\uC01A"に 変換したいのですが、どのようなやり方がありますでしょうか?
>>389 コマンドプロンプトで PATH って打って、
JDK の bin フォルダがちゃんと追加されているかどうか確認する。
エクスプローラーでマイコンピュータから C: → Program Files → ... ってたどっていって、
本当にそのフォルダが存在していて中に javac があるかどうか確認する。
392 :
デフォルトの名無しさん :2007/08/07(火) 22:00:02
>>391 様、ありがとうございます。
早速やってみます。
>>390 int x = 0xc01a;
String s = "" + (char)x;
""+ ってのがなんかイヤだったら、面倒いけど
String s = new String(new char[]{ (char)x });
>>390 String str = Integer.toString(0xC01A);
すまん、間違えた String str = Character.toString((char)0xC01A); だな
397 :
デフォルトの名無しさん :2007/08/07(火) 22:27:56
>>391 様
C:\MyJava>path
PATH=C:WINDOWS\system32;C:WINDOWS;C:\WINDOWS\system32\Wbem;C:
\Program Files\pcbNavi\bin;C:\Program Files\Fujitsu\sa\dll;
c:\j2sdk_1.4.1_01\bin
と表示されました。
C: → Program Files →Java→の中にはjavacは無く、
C: → j2sdk1.4.1 01 →bin→javacとありました。
何か間違ったのでしょうか?
>>394 様、ありがとうございます。
1.4.1 01を選んでダウンロードしたのですが…自信ないです。
アンダーバーの有無をよく確認してみて。 PATH の中の j2sdk_1.4.1_01 実は j2sdk1.4.1_01 が正しいんじゃない?
>>397 c:\j2sdk_1.4.1_01\bin\javac -version
ってコマンドプロンプトで打ち込んでみて
どうでもいいが、pathに設定してもろくな事ないと思うが・・・
>>390 new String(new int[] { 0xC01A }, 0, 1)
>>390 String s = "\\u"+ String.format("%x", 0xC01A).toUpperCase();
それなんか違うような・・・ ところで toUpperCase するなら %X でいいんじゃない?
404 :
デフォルトの名無しさん :2007/08/07(火) 22:52:02
>>398 様、ありがとうございます。
j2sdk1.4.1_01 では通りませんでした。
>>399 様、やってみます。
405 :
デフォルトの名無しさん :2007/08/07(火) 22:53:54
>>399 様、「指定されたパスが見つかりません」となりました。
>>397 には javac のあるフォルダ名が j2sdk1.4.1 01 って書いてあるけど、1.4.1 と 01 の間は空白?
そうだったら PATH もそのように
一字一句同じ名前を入れてください
407 :
デフォルトの名無しさん :2007/08/07(火) 23:01:41
>>406 様、すみません。_ありました。ここでの打ち間違いでした。
じゃあ、
>>397 の PATH には ...fujitsu\sa\dll; と c:\j2sdk... の間に改行が入ってるように見えるけど、
本当に改行やら無駄な空白が入っているのなら、取り除いてみてください。
409 :
デフォルトの名無しさん :2007/08/07(火) 23:18:09
>>408 様、ありがとうございます。
もう一度やってみます。
>>405 エスパーしてみる
DドライブにJDK入っているとかじゃない?
エクスプローラーからjavac.exeを選んで、コマンドプロンプトにドラック&ドロップしてみてくれ
そこで表示されたパスをここにココにコピる
>>397 c:\j2sdk_1.4.1_01\bin
志村、sdkの後ろに_入ってるぞ
キーボードで入力するんじゃなくて、パスはコピー&ペースト汁
>>409 エクスプローラでアドレスバーを表示するようにしてないの?
413 :
デフォルトの名無しさん :2007/08/08(水) 01:05:36
皆様、ありがとうございました。
アンインストールしてもう一回始めからやり直してました。
そのおかげか、ソースコードを書き直したお陰か(本の文書の方では
『//MyJava』となってましたが、実際の画面を写した写真では『//MyJava.java』と)
PATHの方も、本を見るのではなく、
>>411 様の通りにコピペをしました。
何とか前進できました。
まずはWindowsの使い方から始めるべきだな
>>413 そんな違いよく見つけたね
でもコメントの違いはプログラムの動作に影響しない
416 :
デフォルトの名無しさん :2007/08/08(水) 01:17:41
>>414 様、ありがとうございます。
頑張ります。
PC自体初心者なのに、訓練学校に入ってしまい今、毎日が勉強です。
今年中にブロンズとSJC-Aを取得するように言われていて…
努力しかないですね。
最近はコマンドプロンプトもbatもいらないからな
独習が良いと聞き買ったが分厚いので持ち運びに不便であまり読まないwwwwwww
質問させていただきます。 部分文字列"]"をマッチさせ、例外的に"\]"はマッチさせないような正規表現をJavaで書くのにはどうしたらよろしいでしょうか?
(?<!\\)\] ソース中に書くのなら \ はエスケープして "(?<\\\\)\\]"
なんか間違えた。"(?<!\\\\)\\]"
>>420 回答させていただきます。
(?!\)]
質問です。初めてEJB3.0を使用してプログラムを作ろうと思っています。 DBはpostgresです。 それでEntityを作成しているのですが、postgresのinterval型での型にするにはjavaではどのクラスで定義すればいいでしょうか?
425 :
423 :2007/08/08(水) 13:24:31
先読みと後読みまちがえた。てへ。
逆コンパイラってある?
Jadでググれ というかJava 逆コンパイラでぐぐれw
429 :
420 :2007/08/08(水) 13:46:50
回答ありがとうございました
430 :
デフォルトの名無しさん :2007/08/08(水) 15:42:23
Javaというか、Eclipseの初心者です。 Eclipse---すばらしい開発環境だとは思うのですが、 なにかの拍子にクラスパスにあるリソース(Hibernate関連のXML文書とか) を勝手に削除してしまうので困っています。 どうすればいいのでしょうか? HibernateはHibernateで、リソースをクラスパスに置いておかないとだめ みたいだし(そうでもないのかな? Hibernateも初心者なので)
意味が解らないので、何をどうすると何が消えるのかを明確に
433 :
430 :2007/08/08(水) 16:06:48
前日、クラスパスのリソースを読み込んで、 正常な動作をしていたプログラムが、次の日、 Eclipseを立ち上げて動作させようとすると動かない ==>クラスパス内のフォルダにあったリソースが、 ごっそり消えている。あるいはフォルダごと消えている。 とか、あるいは、外部jarの変更等でプロジェクトが 再構築されたときとかも、同じようなことが起こります。
434 :
430 :2007/08/08(水) 16:08:47
>>432 ソースディレクトリには被害はないのですが。
でも、ギャーの雰囲気は似ている。
>>430 そんな事は一度も起きた事ない。
インストールしているプラグインの何かが不具合起こしているんじゃないか?
列挙できる?
436 :
430 :2007/08/08(水) 16:42:56
Eclipse SDK バージョン: 3.2.0のデフォルト状態ですけど。 デフォルトでもあまりにも多すぎますが。
output folder はどこに設定してる? Project > Properties > Java Build Pathページ > Sourceタブ > Default output folder そのクラスパスはどうやって設定してる?
>>430 ビルドの時に、削除する。
というか、ant cleanをするようなイメージ。
クラスファイルの置き場は、動的に更新されるように思っておくといい。
なので必要なファイルは、クラスパスではなく
ソースディレクトリとして登録した場所の下に置けばいい。
439 :
430 :2007/08/08(水) 17:12:25
”ビルド・パスの構成”で設定しています。 WorkBench/build/classes こんな感じです。ここに置いてある、*.class以外のファイルが被害に遭います。 主に被害に遭うのはclasses/Hibernateにあるxmlファイル群ですが、 たまに、classes/Hibernateがなくなったり、classes直下のディレクトリ以外の ファイルも消えます。classes/Hibernateにあるxmlファイル群だけ消えてclasses直下 のファイルは残っていたり、現象はバラエティーがあります。
>>430 出力先フォルダを指定した場合、そこにファイルを置いちゃダメ
ソースフォルダ配下に置いておくこと。
コンパイルと同様に出力先フォルダにコピーされる
javacとかでコンパイルした事ないのね、今の人って
ant使う場合でも、.javaはコンパイルして出力先フォルダにコピー
.java以外のファイルは出力先にそのままコピーって使うもの
出力先はそれらの作業を行う前にクリアする
だから、出力先にぽんとおいてはダメ
441 :
430 :2007/08/08(水) 17:20:17
>>440 にゃるほど&ありがとう。
ためしてみます。
442 :
430 :2007/08/08(水) 17:29:47
あはは、ようするに今までどおり手でコピーって使わねばなんのか。 (誤解してソースフォルダからリソースを持って行ってくれるのかと思ったよ。 よく考えたらそんなわけないですよね。) でも、勝手に出力フォルダのファイルを消してしまうのが”仕様”だと分かって安心しました。
え?ソースフォルダに置いといたら勝手にビルドフォルダにコピってくんない?
ソースフォルダに置いたファイルが Package Explorer で見えてないのなら、右クリック → Refresh それか、ファイルを Package Explorer にドラッグ&ドロップしても放り込める
445 :
430 :2007/08/08(水) 18:06:01
>>444 そうなのか! と思って勇んで右クリック → RefreshでPackage Explorer
にリソースが出現したので、やって見るとだめでした。
で、ふとみるとプロジェクトに赤で白抜きのバッテンが!
これって、ときどきなるいんだけど、コンパイルしなくなって
にっちもさっちもいかなくなることがあります。
(わけわからずにいろいろ触っているうちに直る)
お恥ずかしい話だが、プロジェクトの赤で白抜きのバッテンを解消する
方法をぜひ教えてください。
Problems ビューになんか出てない? そこにエラーメッセージの一覧が出てるはず。 そもそも Problems ビューが表示されてないのなら、Window > Show View > Other... > General > Problems 日本語だったら 「問題」 ビューという名前だったかなぁ。 メニュー名は適当に類推すれ。
447 :
430 :2007/08/08(水) 18:19:58
う゛ぁーん、プロジェクトの赤で白抜きのバッテンが解消されないうちに、 夏休みに突入です。みなさんどうもありがとう。
448 :
デフォルトの名無しさん :2007/08/08(水) 19:33:01
PC初心者です javaのアップデート来たんですけど更新しちゃっていいんですかね?
更新するとPCの中身書き換えられるから危険だよ
いいよ
javaのアップデートはいいのだが、 googleツールバーをやたらインストールしようとするのはやめて欲しい。
エクリプスでjava言語を勉強し始めた所なのですが 出だしのクラス、メソッド、フィールド、インスタンスの関係が なかなか頭に入ってきません そこで、住人の方の中でこれらの関係を理解しやすくする為に、アニメのタイトル、キャラ等に 当てはめて覚えた事がある方がいましたら、それを教えて頂けないでしょうか 私は今だと、もえたん、ぽてまよなんかは見てますので分かりやすいかも知れません。 よろしくお願いします
マグロの1本釣りか?
また豪快な…
クラス=ゴースト フィールド=ゴーストの個性 メソッド=ゴーストの能力 インスタンス=ゴーストダビングされた子供 俺は間違ってない。
456 :
デフォルトの名無しさん :2007/08/08(水) 22:10:38
サーブレットとJSPつかってソフト組んでみようと今勉強中なんだがHP得た知識だと 一覧表を出力するとして 0.Beans(出力される1レコードのデータクラスを定義) 1.JSPで検索内容をサーブレットに対してポスト 2.サーブレットでDBにアクセスしてレコードごとのデータをBeansのインスタンスに入れてそれをコレクションか配列に格納 3.サーブレットから元の画面に戻りJSPで格納した値を表示する こんな感じでいいのかな?
>>452 エヴァくらいしか思いつかないが
クラス=レイの作り方
インスタンス=レイの作り方を基に作りだしたレイの実態
メソッド=ゲンドウの指示(たとえばレイを動かすとか)
フィールド・・・・って何のフィールドなんだ?w
1のポストってのはリクエストって意味? 後、サーブレットから元の画面に戻りってのはフォワード処理ってのはOK? 概ね間違っていないと思うけど、サーブレットはHTTPリクエストとレスポンスの流れをちゃんと把握しておかないと意味が伝わりにくいぞ 1. サーブレットに対して検索条件をリクエスト 2. サーブレットでDBにアクセスし、Beanを格納したコレクションを作成。 これはSessionか何かに保存 3. JSPにフォワードして、コレクションの中身を表示(レスポンス作成)
>>458 サンクス!
たしかにそう書くとわかりやすい きをつけるよ
>1のポストってのはリクエストって意味?
そそ、ポストしてサーブレットでリクエストのデータを取得して〜 というイメージでした
>後、サーブレットから元の画面に戻りってのはフォワード処理ってのはOK?
フォワードはおk フォワードの引数に元のアドレスを渡してリクエストもとのアドレスに戻すイメージです
しかしASP.NETに頼ってたから普通にポストバックで処理するのに慣れてしまって流れがつかみにくいw
これからオープンソースは避けて通れないからどうしてもコツだけでもつかんどかないと・・・・
そういやマギって前にNECが本当に出したよな。
>>305-307 ,321,351-352
なるほど、やっぱりまちまちな部分なんですね。
プリミティブな型に付けるのはさておき、
>>305 さんもおっしゃるとおり
オブジェクト型に付けるのは個人的に少し違和感がありました。
臨機応変にやっていきたいと思います。
特に
>>351 さんのソースコードは人が読む文書というのは
当たり前のことなのに言われるとはっとしました。
改めて肝に銘じておきます。みなさんありがとうございました。
>452 クラス : 萌え メソッド : お話する、プニプニする、攻撃する、 フィールド : みみ、しっぽ、ほっぺ、おくち、各種装備 インスタンス : ぽてまよ(ぽてこ)、ぐちゅ子 Moe poteko = new Moe("ぽてまよ","俺の娘"); String str_pote = poteko.talk("おはよう、ぽてまよ"); System.io.println(str_pote); Object obj = poteko.punipuni(Moe.HOPPE,10); Sytem.io.println(obj.toString()); [実行結果] ほに、ほにー Exception : "ぽてまよ" omorasi Error! at Moe class 上記の場合、厳密に言うと抽象クラスが適当かもしれん。
夏厨ヲタ自演....
インターフェース: ゲームキャラ メソッド : 小パンチ、中パンチ、大パンチ、小キック、中キック、大キック、ガード クラス : ケン、リュウ、春麗、ザンギエフ ケンメソッド : 昇竜拳、竜巻旋風脚、波動拳 インスタンス : ケン1P、ケン2P、ザンギエフCP
クラス : インターネット掲示板 メソッド : 落書き、煽り、中傷 フィールド : 板、スレッド、レス、Vipper インスタンス : 2ch
471 :
デフォルトの名無しさん :2007/08/09(木) 21:57:22
Exception in thread "main" java.lang.NoClassDefFoundError って、何でしょうか?
473 :
デフォルトの名無しさん :2007/08/09(木) 22:06:22
ぬるぽ = NullPointerException と聞きましたが、 ガッ = ?なに?
キャッチ!
476 :
デフォルトの名無しさん :2007/08/09(木) 23:26:45
意味不明なこと発言してたらすみません。 あるSwingアプリケーションがあって、その中にA.classがあるのですが これを別アプリケーションから呼び出したいと思ってます。 考えたのですが、Swingアプリの方でポート開放して要求を受け付けるようにすればA.classを実行することはできたのですが、 出来れば、別アプリから 直接A.classのメソッドを呼び出したりしたいのです。 Webサービスみたいなイメージでしょうか? スマートなやり方ありましたらヒントください。 できれば、設定ファイル等が増えて煩雑にならない方法がよいです。
mame改造して俺mame作りたいんですがJAVAでもできますか? C言語しかダメ?
478 :
デフォルトの名無しさん :2007/08/09(木) 23:41:09
PC自体初心者ですが… 独学で今年中にSJC-Aを取得するようにと上司に言われました。 何ヶ月くらいで取れるものなんでしょう?
480 :
デフォルトの名無しさん :2007/08/09(木) 23:59:17
>>479 ああ、これです。ありがとうございます。頑張ります。
>>476 そのA.classをコピって自分のアプリの中に入れればいいんじゃない。
そういう問題でもないのかな。
483 :
デフォルトの名無しさん :2007/08/10(金) 01:29:45
478さんへ さしでがましいことをいわせていただきます この資格確かにPGを長年勤めてきた人間には 難しくはないかもしれませんが、初心者が いきなりjavaをやってこの資格を取るには結構 ハードルが高いのではないでしょうか? しかもたぶんこの上司の方もこの資格のこと あんまりわかってないのでは.... 後、資格、資格という企業はブラックなところ が多いので、気をつけてください。 勉強がんばってください。
満員の通勤電車の往復時に、駅を乗り越すほど集中して毎日取り組むぐらいの 気力と体力があれば大丈夫だと思う そうでなければ無理だと思う
485 :
デフォルトの名無しさん :2007/08/10(金) 02:31:54
凄く初歩的な質問を失礼します。 実行するときにcmdでしますよね? 実行結果をノートパッド等に出力する方法はないですか? 使用用途はイメージとしては縦に1,2,3,4…998,999,1000と表示されるような プログラムです。 cmdではスペースが足りなく、全て表示されないので困っています。(上でいうと実行後の結果で最初のほうの数字が表示されない) 宜しくお願いします。
>>485 cmdのプロパティで画面バッファのサイズの高さを2000くらいに設定すれば縦に1000個くらい軽いよ
まあリダイレクトというキーワードでぐぐってみな
487 :
デフォルトの名無しさん :2007/08/10(金) 03:11:13
486 ありがとうございます! 助かりました!
>>487 まさか高さの設定の方で済ませたんじゃなかろな?
それでも構いはしないが……
notepadに直接出力ってわけではないが例えばFoo.classを実行するときに
java Foo > log.txt
ってやれば出力がlog.txtに書き込まれる
これをnotepadで開けば出力を見ることができる
既にlog.txtがあれば内容を書き潰すので追加していきたいなら
java Foo >> log.txt
こういうのをリダイレクトという
>>476 そのSwingアプリケーションと別アプリケーションが同じ計算機内にあるのなら、
普通にメソッド呼び出しすればいい。
ただし、呼ばれる側のクラスやメソッドのアクセス修飾が呼び出し側から呼べるものである必要がある。
別パッケージで継承関係も無いクラスから呼び出すなら呼ばれる側はpublicでないとたぶんだめ。
呼び出し側をコンパイルや実行する際に、
呼ばれる側のクラスファイルがあるディレクトリなりjarファイルなりへクラスパスを通してやれば、
javacやjavaが探し出してくれる。
もし、呼ばれる側がさらに別のクラスに依存している場合は、そのクラスへもクラスパスを通してやる。
異なる計算機間(同一計算機内でもいい)での呼び出しをやるならRMIという技術があるが、
これを使う儀式を煩雑と思うか否かは人それぞれだと思う。
java Foo > log.txt | type | more って無理だっけ?ログのスクロールアウトをどうにかしたいだけでしょ?
単に出力をページャに回すだけなら java Foo | more で済む
あー teeはwindowsでは標準装備でないと思うからファイルへ吐き出しつつページャにも回すのは駄目っぽい もうjavaとは無関係の話だな というか最初からか
javamailって最新のバージョンだと日本語をISO-2022-JPで送信するのに あまり問題はないのかな。 javaのソースはUTF-8、クライアントから送られてくる情報もUTF-8だけれど。
最近のwindowsって内部はunicodeで処理してるらしいけどメールを送るのに問題ないのかな? って程度だ。問題があるとしても。
このスレ的にteeをjavaで実装するのか? 専門の課題みたいでワロタw
全くわからずここに来たんですが 2バイト文字使ったトリップ作成ソフト(トリッパーのような)を作るのは 可能かどうかだけでいいのでわかる人教えてください
トリップしてる奴が来た。さすが夏だな。 トリップって一時的なIDみたいのを言ってるの? 別に2バイト文字使ったって良いだろうが、"吾糞触"とかへんなのになるんじゃねw
いや・・・2バイトも変換されはするんですよ ちなみにこれは #こういう感じ です 今あるフリーソフトだと[a-z][A-z][0-9][記号]なので それを2バイト文字使って作ることも可能かどうかということなんですが・・・
あえて1バイトと2バイトを区別する理由が分からない
俺はそのアルゴリズム知らないけど、 498 が知ってるんなら、可能なんじゃない
>>501 まぁ、理由は特にないです
作りたいけど可能かどうかの判断を聞いてみたかっただけなので
>>502 どうもありがとうございました
可能か不可能かで言えば当然可能だろう。
Stringクラスの内部保持データのエンコーディングって何ですか? 調べたところ、java1.4だとUNICODE2.0 java1.5だとUNICODE3.0のようですが。 UTF-8とかUTF-16とは別物?
別物。unicode表の値そのものをベタでメモリにもってるとおもうといい。
UNICODE=charset UTF=charencoding この程度の事を知らんでプログラム組んでる奴が増えたな。
509 :
476 :2007/08/11(土) 01:00:41
>>476 A.classが実は、UIを操作するクラスなんですよ、つまりA.classがあるアプリの画面の動きを操作するので、
単にA.classをこぴぺするわけにもいかないのですorz
>>489 ありがとうございます。別Swingアプリ(別VM)で動いているのでやはりRMIなんでしょうか。。
他にJMXなるものの存在を知ったのですが、これでクラス操作はできないのかな??
最近のejbみたいにアノテーションで指定するやりかたとかないですよね?・
機能をみたす実装ならできるのですが、より簡単にしたいって思っちゃいまして^^;
>>509 JMXはアプリケーションやJVMの監視、管理のための仕組みなので多分ちょっと用途が違う。
もちろん、別JVMの情報を受け取れるから、JMXを使って実現できない訳ではないと思うけど。
やるならAクラス側が別アプリを監視してUIを操作する方向になるのかも。意図と逆っぽい。
まあ、他所にあるメソッドを呼ぶのなら文字通りのRMIを使うのが素直ではないかなと思う。
実現の面倒さがあるのはセキュリティの問題もあるし仕方がないことかと。
Robotでいいんじゃね?
>>500 君の質問はとりぷのアルゴリズム知らない香具師のセリフだよ
>>507 >>508 なるほど。回答ありがとございます。
まとめると、「unicode表」=「UNICOE(charset)」で
java1.5が管理している文字のメモリーサイズは、1文字当たり16bit〜21bitの可変長と言う認識で合ってますか?
ひらがなは、あなたの頭で何ビット? というくらい間違っている予感
UTFって仕様上、最長8byteの可変長でUnicodeを表す仕様だったと思う。 んでたまたま、UTF-32までしか策定されてないだけだったはず。 >1文字当たり 文字じゃなくてコードポイントね。 文字セットの仕組みあたりから勉強した方が早いよ。
互換性についての質問です。 Java SE 6でコンパイルしたバイトコードは、新たに追加されたクラスやメソッドを 利用していなければ旧JRE(1.3.1、1.4.2等)上で動作させることはできるのでしょうか。
>>516 新しく追加されたクラスやメソッドを使っていないならば、旧バージョンでコンパイルすりゃいいだろ
一般的に上位互換はされる場合もあるが、下位互換は普通されない
>>516 javac にオプション指定が必要。
-source 1.3 -target 1.3 とか。
WinXP SP2です swfプレイヤーのような物があるのか また、exe化したりする方法があるのかは分かりませんが Javaで作れた物をローカルで使用するにはどうすればよいのでしょうか
>>515 内部メモリーの話してるんだから、
encodingは関係ないんじゃないですか?
522 :
デフォルトの名無しさん :2007/08/11(土) 21:30:12
たとえば String[] testarray = {"A", "B", "C", "D"}; これだとtestarray[3]までしか宣言できませんが、 初期値としてtestarray[100]まで確保しつつ、初期値を 上のように代入するにはどうすればよいのでしょう。
String[] testarray = {"A", "B", "C", "D", null, null, ……, null };
>>522 それとは別に、サイズが100の配列を作っておいて、コピーするってのは?
String[] testarray = new String[100]; String[] temp = {"A", "B", "C", "D"}; for (int i = 0; i < temp.length; i++) { testarray[i] = temp[i]; }
>>522 4以降がnullでいいならば、
String[] array = new String[100];
array[0] = "A";
もし、""とかで初期化したいならば
Arrays.fill(arrya, "")を使う
ただ、3つしか使わなくて可変な配列を使うってケースならばArrayList使え
527 :
デフォルトの名無しさん :2007/08/11(土) 22:34:40
コンソールから入力した1人分の情報(学籍番号,氏名・・・)を基にして、(入力されるたびに) インスタンス・オブジェクトを生成させるにはどうすればよいのでしょうか? Cで言う、構造体みたいなものを作るのですか? また、生成したインスタンス・オブジェクトは、配列でインスタンス管理テーブルのようなものをつくり 管理したいと思っています。
>>527 Cの構造体→Javaクラス
配列→コレクションorマップ
>>527 こんな感じ
class Person {
int studentNumber;
String name;
....
}
public class Main {
static void main(String[] args){
Scanner scanner = new Scanner(System.in);
List<Person> people = new ArrayList<People>();
for(;;){
Person person = new Person();
person.studentNumber = scanner.nextInt();
person.name = scanner.next();
...
people.add(person);
}
}
}
530 :
522 :2007/08/11(土) 23:12:18
あざーっす……。
532 :
デフォルトの名無しさん :2007/08/11(土) 23:58:22
あざーっす
other. 他人です。
家庭教師のトライです
よし、父ちゃんが問題だしたるわ 「いたちまさむね」
伊達政宗
じゃあ、にいちゃんも問題出したる ふいんき<--なぜか変換されない(いまやったら連想変換で候補出たw)
× other 他人 ○ others 他人
539 :
デフォルトの名無しさん :2007/08/12(日) 07:21:50
vistaの環境変数設定はどうすればいいですか?
コントロール パネル →システムとメンテナンス →システム →システムの詳細設定 →環境変数
そのうち「自動的に設定しますか?」のウィンドウとか出そうだな。
○ other (persons) × others ○ the others ○ an other
JMSを使うってことは、MQを使うということですか?
545 :
デフォルトの名無しさん :2007/08/12(日) 19:16:10
Java1.5のQueueはJava.14ではどういうふうに代用するのでしょうか?
Queueの実装も出来んのか。 しかも、ラップするだけQueueを実装できるように設計されてる。JCFで。
アホか? LinkedListをQueueとして使えばいいだろ
548 :
デフォルトの名無しさん :2007/08/12(日) 20:48:50
AudioFormat af = new AudioFormat(44100, 16 /*1サンプルあたりのビット数*/ , 2 /*チャンネル数*/ , true /* 符号付きかどうか */ , true /* データはビッグエンディアンかどうか */); AudioInputStream as = new AudioInputStream(new ByteArrayInputStream(data),af, data.length); AudioSystem.write(as, AudioFileFormat.Type.WAVE, new File("sample.wav")); ↑ こんな感じに書くと(データバッファは十分にあるものとする)、 ちゃんとオーディオデータが sample.wav に吐き出されるんですけど、 なぜかそのファイルは Winamp でしか開けないんです。 サウンドレコーダもメディアプレイヤーもヤマハのTWEも 「ファイルが壊れています」って返してくる。 なぜでしょうか?
ビッグエンディアンだからじゃ?
privateな内部クラスにpublicメソッドを書いているプログラムがありました。 どういう意味なのですか?
意味なんかなくても親クラスで public のメソッドはサブクラスでは public にしなきゃいけないし、インタフェイスのメソッドも public にしなきゃいけない
>>550 メソッド全部がprivateなクラスってあるの?
JavaでListenerを作れと先輩に言われました。 Listenerとは何ですか?オラクルのListenerならわかるんですが。
何のリスナー作るんだYO
ネットラジオのリスナー
よく、〜なインターフェースが定義されているという表現をしますけど、 インターフェースって中身のないただのメソッドでしょ? 定義されていてどうなるわけなのですか?
559 :
デフォルトの名無しさん :2007/08/12(日) 22:51:41
>>558 鍵穴を連想してみて欲しい。
子会社、関連会社の人が
「ふ〜ん、あれ合わせて作ればいいんだぁ」って考える。
鍵穴はちょっとおかしいだろw コンセントの形はどんなメーカーのどんな電化製品も一緒 そんな風に規格だけ用意して中身は勝手に作ってね、使う側はその規格使うから、ってのがインターフェイスの基本
>>559 ちょっと違うだろwww
>>558 決めごとだよ。
例えば市販車は、ウィンカーがついてないとだめとか
いろいろ決めごとがある。「市販車である」ためには
その決めごとを守っている必要がある。
>>558 実はインタフェースは必要ないもの。抽象クラスや実装クラスの中身がない空実装でも代用は可能。
でも、インタフェースなら一世代の継承ルールから開放されるし、コンパイル時に実装漏れを検出できる。
でも、やっぱり代用できるから、あまりいらない子。
>>561 使う側がないと、決め事だけじゃインターフェイスとしての意味は薄くない?
>>562 その話題は不毛だから止めとけ。
必要がないとなんて書くと荒れるぞ
>>563 その場合は意味薄いね。
利用するクラスと利用されるクラスとインタフェースを同じ開発者が担当すると
まじイラネ。。
むしろ抽象クラスが不要なもの。 具象クラスとインタフェイスだけでいい。
567 :
566 :2007/08/12(日) 23:22:50
568 :
デフォルトの名無しさん :2007/08/12(日) 23:23:57
>>559 「頭悪いな〜」と子会社から苦情がくるww
>>559 作ったはいいが、警察に厄介になりそうだ
Java5でAtmicLongとか追加されたけど、あれってvolatileをつけるのと一緒のことですか?
571 :
デフォルトの名無しさん :2007/08/12(日) 23:57:05
たとえば、初めて載った○○車の自動車に ペダルが3つ付いていればMT車なんだと想像がつく。 2つならAT車だ。これなら運転は出来そうだろ? ペダルの先のエンジンのベルトがどうなってるか、とかは 利用者は意識する必要がない。
>>570 一緒で済むならばAtomicXxは追加されないだろ
名前の通り、よく使われるアトミック操作を保証するオブジェクト
volatile int i = 0;
としておけば、
i++
は安全だとか思っているならば、並行処理の基本を学んで来い
>>570 単純に set と get をするだけなら volatile と同等
それ以外の操作は同等でない
例えば
AtomicLong x;
long y = x.getAndIncrement();
はアトミックに取得・加算ができるが
volatile long x;
long y = x++;
は他のスレッドが割り込む可能性がある
>>572 え?Javaをはじめて1年になるけど、安全だと思ってました。。。
synchronizedがあればAtomicはいらないということですか?
>>574 それはそうだけど、synchronized は重い。 atomic の方が軽い。
パフォーマンスを気にしないなら、たしかに atomic も volatile も不要。 synchronized だけ使ってればいい。
>>574 並行処理 アトミック Javaあたりでぐぐれ
>>575 それはちょっと違うぞ
AtomicIntを使うと、ソースコードが非常にシンプルになるのが一番の利点
private final AtomicInteger aInt = new AtomicInteger(0);
としてしまえば、それだけでvolatileもsynchronizedも不要になり、同期化に関する色々な問題はAtomicIntegerにカプセル化される
そうすれば、後から怪しいメソッドを追加してしまい、同期化ポリシーが崩れることもない
>>577 見た目シンプルになったって、atomic は synchronized よりはるかに扱いが難しいと思うのだけれど
Atomicは圧かが難しいと思うが、AtomicIntegerの何が難しいんだ?
あれ? synchronized より atomic のほうがパフォーマンス的に良いんだっけ?
無意味といえばあれだ、中で何も処理しないセッターとゲッター。 publicでいいやんけ
悪けりゃ、atomic が追加された意味がナッシング
>>581 interface 実装してたりする場合あるし、継承先で振る舞い変わる可能性もある。
中で何も処理しないというだけじゃ無駄かどうかはわからん。
新規に追加されたものの方がパフォーマンスがいいとは限らない 追加はパフォーマンスの向上のみを目的としているのではない
それもそっか・・・
携帯から失礼します、質問よろしいでしょうか。 DBに対してJDBCを用いてselect文を発行するストアドの呼び出しを行い、 取得した結果を二次元配列に格納しています。 検索対象としているテーブルのカラムはDATE型で、ResultSet#getString(int)を用いて取得しています。 なお、検索結果は常に1件となり、String[]にselect対象のカラムの値を入れて返す共通機能を使用するため、 カラムの値を取得するgetStringをgetDateなどに変更することはできず、 通常のSQLのように日付の取得フォーマットを変更するなどもできません。 DATE型のカラムに対してgetStringを行うと、以下のフォーマットの文字列が取得できる模様です。 yyyy-MM-dd hh:mm:ss.S このフォーマットはJDBCドライバやDB、OSによって変わったりするものなのでしょうか。 環境: JDK1.5.0、Oracle10g、JDBCドライバclasses12.zip どなたかご存知の方がいましたら、何とぞご教示お願い致します。
>>586 JavaSEのResultSetのAPIドキュメントには何も決めごとが書かれていない。
ということは、ベンダ依存と考えておくのが安全。
ConditionとかReentrantLockはどういったときに使うのですか?
ReentrantLock -> メソッドのスコープとは無関係の範囲をロックしたいとき。 Condition -> 1個のロックに対して複数の wait/notify を扱いたいとき。
>>588 synchronized と wait/notify で記述できないような複雑な並行処理を実装する時に使う
作者も不用意に使うとデッドロックするZEって言ってる
可変長引数より配列を使う方がプログラムが見やすいと思うのですが、 僕の考えは間違っていますか?
使い分ければOK
長さが固定されている用途なら固定長が見やすい 長さが可変な用途なら可変長が自然
>>591 どういう点で見やすいと思うのか、サンプルソースでも書け
見にくいと思うのなら 591 が使わなければいいだけの話
String配列はログに出す時めんどい。ArrayListやHashMapみたいなコレクションAPI はtoStringでちょろっと出すことが出来る。まあ、そんなユーティリティクラス作っちゃえば 良いんだろうけどさ。
っ Arrays#toString(Object[])
Arraysは色々と便利なメソッド増えたよな あまり知られていないようだが
最近までC言語やってたんだけど質問。 C言語なんかはコンパイルしてできたexeをすぐクリックなんかで実行できるけど javaはコンパイルしてできたクラスファイルをプロンプト上で>java HelloWorldって感じでしか実行できないんだろうか? javaVM無いと動かないのはわかるがexe出力しないって違和感ありすぎる・・。
違和感あるって言われてもVMを採用している言語は全てそうだし、スクリプト系言語も全てそうだぜ 関連付けされていてダブルクリックで起動する場合もあるが。 ダブルクリックで起動させる方法もあるけど、慣れろとしか言いようがないな
>>599 環境がWindowsなら、
1.バッチファイルを作成してダブルクリック。
2.jarファイルを関連付けした後、jarファイルを作成してダブルクリック。
class ファイルを jar に固めたあと exewrap とかで exe にすることはできる gcj でネイティブコンパイルしてしまうという方法もないではない
>>599 実行時オプションがいらないならjarに固める時
マニフェストにMain-Class:hoge追加
それ以外はOS毎にバッチ書く。引数渡せるようにして。
下手にexeでラップされると実行時引数渡せない場合があるので迷惑。
javaはそういう世界。
599 は bat は許せるのかな。 jar は許せないのに
いい加減みんな599を許してやれよ exeが不自然じゃない世界ってのをまだ知らないだけなんだから
exeが不自然じゃない世界 = exeが自然な世界?
その前に誰も599を許さないなんて言ってない希ガス
sizeが0のArrayListはnullですか? lengthが0のString配列はnullですか?
>>610 > sizeが0のArrayListはnullですか?
no
> lengthが0のString配列はnullですか?
no
じゃあ、なんなんですか!
sizeが0のArrayListと、長さ0の String配列。
なんでnullじゃないんですか、困ります!!
>>614 まあまあ、落ち着いて。
何がnullだと、何をするのに困るのですか?
>614 nullだと、もっと困るから。
nullの方が困るんですね、仕方ありません…
618 :
599 :2007/08/14(火) 23:45:33
こんなにレスついてるとは思わんかった。 とりあえずgcjを調べてみる。
いまどき実行がめんどくさいってだけでAOTに頼ると馬鹿見るよ。 JRE5,6が尋常じゃないほど早くなってるし、一般人には今のPCはオーバースペックだからjavaごとき負担にならんし。 JRE6はさすがにビビッタがレジスタの動的割り当てのおかげ?
JavaはやはりまだJVM起動のフットプリントが負担かな? mainメソッドに数10行のちょっとしたツールを作ったりしたときでも JVM起動がかかるなぁ。.NET程では無いとは思うんだが ちょっとストレス。
ngen使えば.NETの方が有利。 起動に時間がかかるっても、問題になるのは初回起動ぐらい。 一見さんにはその一回が遅いって印象だけしか残らんのだろうけど。
一つの関数から、複数の返り血を浴びさせるにはどうすれば良いのでしょうか 別の関数で同じ処理を何回もしてるのは非効率に思えます
>>622 散弾銃かショットガンでも使えw言ってることわけわからん
日本国内で違法にならない形で、一つのメソッドで、複数の返り値を取得する方法を教えてください int, float method(int c){ int a; float b; cつかって複雑な計算をうにゃうにゃ 結果は二つ return a, b; } pote, mayo = method(123); みたいにでけたらいいなと そんな言語がありました
ConditionとReentrantLockはどういったときに使うんですか? ConditionのAPIドキュメントを見たけど、waitやnotityと同じ内容のメソッドしか持ってませんよね。
>>624 原則として出来ない。
返り血が同じ人であるならば、配列にして返すのが1つの方法
public int[] hoge() {
return new int[] { 1, 2};
}
返り血をデータクラスのフィールドに格納してデータクラスを返す方法
public Result hoge() {
return new Result(1, 2.0);
}
返り血はvoidとし、そのクラスのフィールドに結果を格納する
結果はそれぞれのゲッターで取得
int resultA;
float resultB;
public Result hoge() {
resultA = 1;
resultB = 2.0;
}
>>624 なんで違法とかw
返値にint,floatってすごいな。それをObjectにして、
返値はObjectのプロパティに設定して返してやればいいじゃん
クラスのメンバをpublicにしちゃいけないとおじいちゃんが言ってた
>>625 waitとnotifyでは実現できないもっと複雑な同期をさせたい時に使用する
言い方を変えれば、wait/notifyで実現できるならば使う必要はない
631 :
626 :2007/08/15(水) 07:36:25
訂正 返り血はvoidとし、そのクラスのフィールドに結果を格納する 結果はそれぞれのゲッターで取得 int resultA; float resultB; public void hoge() { resultA = 1; resultB = 2.0; }
っつーかちょっとしたことをサクサクっと書きたいのに 何でJavaだと前戯したり焦らしたり後戯までご丁寧に やってやらんといかんのはなぜ?
Javaだから 嫌ならばPythonとかRubyとかやればいい
仕事で使う言語と趣味と布教で使う言語の違いだろ
返り血って書いてるだけでスルー対象
>>632 べつに普通にサクサク書けてますが?
環境がダメダメなんじゃないの?
作成したら後は変更しないオブジェクトなんかはよくフィールドをpublic finalにしてコンストラクタのみで初期化してる 他にもこんなやついる?
禿
>>620 PC起動時にJVMも起動しておけばいいじゃん
1.4ならともかく
javaでさくさく書きたいならまさにgroovyがあるだろ・・・。 rubyは別にpythonか関数型言語で同じ事出来るしなぁ。 ハスケルにもOpenGLポートとかSDLポートあるんだぜw Windowプログラミング可能だw
javaでサクサク書けないって、自分が無能っていってるだけじゃんw
質問です。ある文字列nameが別の部分文字列kanziを含むかどうかを PetternとMatcherで調べるつもりがうまくいきません。両方とも日本語文字列です。 Pattern pattern = Pattern.compile("(" + kanzi + ")+"); Matcher matcher = pattern.matcher(name); のようにしているのですが、name == kanziでないとマッチしません。 当方正規表現もJAVAも初心者なのですが、どこが悪いのか教えてください。 よろしくお願いいたします。
自己解決しました。 Mather.maches()ではなくfind()ですね。失礼しました
その程度なら正規表現なんてコストの高いもん使わず、 総当たりで1文字づつ調べればいいんんじゃない?
>>643 単に文字列中に別の文字列が含まれるかどうかならString#contains()で。
name.contains(kanzi)の真偽でチェック。
>>643 正規表現を使うにしても文字列を含むかどうかを見るだけなんだから+を使う必要はない
それにkanziに正規表現のメタ文字が含まれていた場合
実行時エラーを起こしたり、マッチすべきものにマッチしない、またはその逆になったりする可能性がある
kanziをPatternにコンパイルする前にquoteすべき
Pattern pattern = Pattern.compile(Pattern.quote(kanzi));
Pattern pattern = Pattern.compile("^(" + kanzi + ")+$"); Matcher matcher = pattern.matcher(name);
Pattern pattern = Pattern.compile("^.*(" + kanzi + ")+.*$"); Matcher matcher = pattern.matcher(name);
650 :
デフォルトの名無しさん :2007/08/16(木) 06:33:02
SpringのProxyFactoryBeanを使うことによって何かお得なことがあるんですか?
651 :
デフォルトの名無しさん :2007/08/16(木) 11:26:55
相談があります。 独学で始めて2ヶ月経ちます。 クラス・コンストラクタ・メソッドをはじめ、ループや配列に関して理解できました。 この先ですが、それぞれの分野に分かれました。 アプレットやサーバーサイド、データベースなどの分野なのですが、 これから就職するにあたってどの方向に進むのがいいでしょうか。 あと1つ言語を習得したいと思っています。 現代での必要性や求職率、給与などを考慮して考えたいので、 よろしくお願いします。
人生相談かよw
一も二もなく英語でしょ>言語
うむ、辰巳の方角が吉とでておる
>>651 とりあえずCとC#やったら?
Javaと言語仕様が似てるからこの二つを学ぶには似てない一つの言語を学ぶくらい労力で済む
DBやるならSQLは必須
>アプレットやサーバーサイド、データベースなどの分野なのですが、 全部やっとけ
>>651 >>657 だいたいから選り好みしてる場合じゃないだろ
仕事でやるんだぞ。全部できた方がいいに決まってるじゃないか。
というかそれくらいの意気込みがなくて自分のテリトリを守るだけの
人材は高給では求められてませんよ。
あと一つの言語は
>>653 で間違いない。
英語ドキュメント避けては過ごせません。
659 :
デフォルトの名無しさん :2007/08/16(木) 23:18:29
Javaをはじめて間もないのですが、下記の練習問題が分かりません。 以下のような Example クラスがあります。 @ isHalfSizeCharacter メソッドを作成して、sample フィールドを isHalfSizeCharacter メソッドを使用した 結果をコンソールに出力するようにしてください。 A isHalfSizeAlphaCharacter メソッドを作成して、sample フィールドを isHalfSizeAlphaCharacter メソッドを 使用した結果をコンソールに出力するようにしてください。 public class Example { private static final String sample = "abcdefghijklmnopqrstuvwxyz1234567890"; public static void main(String[] args) { System.out.println("sample = " + sample) System.out.println("@ 文字列 sample は全て半角文字です。"); System.out.println("@ 文字列 sample は全て半角文字ではありません。"); System.out.println("A 文字列 sample は全て半角英字です。"); System.out.println("A 文字列 sample は全て半角英字ではありません。"); } // 引数 value が全て半角文字の場合、true を返します。 // 但し、引数 value が未設定の場合、false を返します。 private boolean isHalfSizeCharacter(String value) { } // 引数 value が全て半角英字の場合、true を返します。 // 但し、引数 value が未設定の場合、false を返します。 private boolean isHalfSizeAlphaCharacter(String value) { } } どなたか答えてもらえる方はいませんか?
>>659 練習問題なんだから、その前にヒントがあるんじゃないか?
方法を問わず解くことに意味があるのだろうか…
宿題スレに移動するなら一言ことわってからにしてくれよ
662 :
デフォルトの名無しさん :2007/08/16(木) 23:41:49
>>660 すみません。ごもっともな意見だと思います。
しかし、今日ずっと考えてもどう回答していいか分からずいます。
この練習問題は教材からではなく先輩に出題された問題なのでヒントもなくて・・・
回答ではなくても、何かヒントをいただければ助かります。
663 :
デフォルトの名無しさん :2007/08/16(木) 23:44:00
>>661 すみません。マナー不足で同じことを違う板でも書き込みしてしまいました。
とりあえず疑問点 ・引数 value が未設定ってのはNULLでいいの? ・半角文字ってのは半角英数字って事?
ありゃ、待ってたのにレスが来ないな。 日付が変わったからか、それとも別のトコで答えてもらったのかな(まあ、10分くらいで分る内容ではある)。
666 :
デフォルトの名無しさん :2007/08/17(金) 00:25:40
>>664 >・引数 value が未設定ってのはNULLでいいの?
>・半角文字ってのは半角英数字って事?
引数に関しての質問は、私もよく分かりません。
半角文字に関しても、問題に半角文字と半角英字とあり私もちょっと分かりずらく
はっきり答えられません。
問題を見て感じたまま答えてもらえれば、かまいません。
違かったとしても答えへのヒントになりますので。
667 :
デフォルトの名無しさん :2007/08/17(金) 00:29:35
>>665 返信送れてすみません。更新しないでレス見てしまっていたので。
>>659 半角文字の定義をしてください。JIS規格では半角文字、全角文字は定義されていません。
Unicode でも U+FF00〜U+FFEF のHalfwidth and Fullwidth Forms
の区間以外は全角/半角の区別が付きません。
とか教師に言ってみると良いかも。ぶん殴られる可能性もあるけど。
669 :
デフォルトの名無しさん :2007/08/17(金) 00:38:56
>>669 今回の問題では
半角文字は↓
abcdefghijklmnopqrstuvwxyz1234567890
全角文字は↓
abcdefghijklmnopqrstuvwxyz1234567890
の定義でかまいません。
こんな感じ。 public class Example { private static final String sample = "abcdefghijklmnopqrstuvwxyz1234567890"; public static void main(String[] args) { System.out.println("sample = " + sample); if(isHalfSizeCharacter(sample)){ System.out.println("@ 文字列 sample は全て半角文字です。"); }else{ System.out.println("@ 文字列 sample は全て半角文字ではありません。"); } if(isHalfSizeAlphaCharacter(sample)){ System.out.println("A 文字列 sample は全て半角英字です。"); }else{ System.out.println("A 文字列 sample は全て半角英字ではありません。"); } } // 引数 value が全て半角文字の場合、true を返します。 // 但し、引数 value が未設定の場合、false を返します。 static private boolean isHalfSizeCharacter(String value) { if(value==null) return false; return value.matches("[a-zA-Z0-9]+"); } // 引数 value が全て半角英字の場合、true を返します。 // 但し、引数 value が未設定の場合、false を返します。 static private boolean isHalfSizeAlphaCharacter(String value) { if(value==null) return false; return value.matches("[a-zA-Z]+"); } }
なんで1.5になってもStringクラスにisEmpty()がないんですか! std::stringにもMFCのCStringにもC#のStringにもあるのにおかしいじゃないですか!
672 :
デフォルトの名無しさん :2007/08/17(金) 00:46:33
>>670 こんな短時間で答えてくれてありがとうございます。
自分の未熟さを感じつつも、がんばります。
今日はこの回答を元にどうなってこうなったのかを教材を見ながら
考えたいと思います。
本当にありがとうございました。
>>671 1.6にはあるよ。
でも str.length() == 0 で代用できるシロモノだし、
互換性考えると 1.6以降でしか使えない isEmpty() はぶっちゃけ無くても構わない。
str.equals("") 使ってますが問題ありますか?
str==""使ってますが問題ありますか?
はじめまして、Javaを勉強しはじめて五日目になります。 wikiを見てもまだ理解が出来る次元ではないので少しお邪魔します。 理由は、ゲームを作りたいからという動機なのでお仕事でやってる方には申し訳ないと思いますが 初心者歓迎の文字を見て入らせていただきました。 (ソフトはiαppliTool DoJa-3.5を使っております) 現在iアプリを作成中で、音楽を鳴らしているのですが音量を再生する場合に SoundPlayer.playTrackSound( 0, 0, 100 ); //トラック,リピート,音量(100max) と、置いているのですが、音量を変える時にソフトキーから切り替えで Int volを作りvolに数字を代入して SoundPlayer.playTrackSound( 0, 0, 100 - vol); としたところ、音楽が最初から再生されてしまいました。 これを現在流していたところまでの音楽から音量を途中で切り替わるようにしたいのですが どうしたら良いでしょうか、説明不足でしたら申し訳ございません。 どうか宜しくお願いします。
>>675 String str = new String();
System.out.println(str.length() == 0);
System.out.println(str.equals(""));
System.out.println(str == "");
>>675 String str = "";
System.out.println(str.length() == 0);
System.out.println(str.equals(""));
System.out.println(str == "");
どっちも>675の方法だけfalseになったよ
>>1 > String に == は使うな。equals() を使え。
String hoge = "hoge"; String fuga = "HOGE"; System.out.println(hoge.toUpperCase() == fuga);
String str = new String();って使うことなくね?
StringBuffer s = new StringBuffer(); s.append("abc"); s.append("def"); s.append("ghi"); System.out.println(s.toString() == "abcdefghi");
空文字列がどう作られるか限定されていないんだから、 失敗する可能性のある方法をわざわざ採る必要はない。 たしかに空文字列を作るのにnew String()を使うことはそんなにないかもしれんが、 演算の結果strが空文字列になることはよくあるだろうから、 空文字列の判定をstr==""でやってしまうのは拙い。 どうしても==を使いたいのなら、 str.intern() == "" とかでStringプールに登録されているもの同士で比較すればいいんだが、 どんな場合でもお勧めとは言いたくないな。
これからJavaの勉強する者なんですがeclipse3.2のチュートリアルでHelloWorld と表示させるやつを進めてたら 'org.eclipse.jdt.internal.ui.wizards.OpenProjectWizardAction' クラスを ロードできなかったため、アクションが実行できませんでした。 とエラーがでたのですがよくわかりません^^; わかる方教えてください、お願いしますm(__)m
689 :
デフォルトの名無しさん :2007/08/17(金) 16:14:31
public void readFile(String path) throws Exception {} public void writeFile(String path) throws Exception {} public void readFile(String path, boolean modeAdd) throws Exception {} public void writeFile(String path, boolean modeAdd) throws Exception {} という使い方はあるのでしょうか?ググってもでてきません。 使い方があるならどういう風に使うのでしょうか? サンプルコードなんかがあればうれしいです。
BufferedReader BufferedWriter でぐぐれ or sun のマニュアル嫁
691 :
デフォルトの名無しさん :2007/08/17(金) 16:41:20
public satatic void main(String[] args){ BufferedReader = … って感じの書き出しばかりなんですが、 public void readFile(String… と置き換える事ができるのでしょうか? 良くわかっていないので的外れならすいません。
質問の仕方が変じゃないか? クラスも言明せずに、何かのメソッドのシグニチャだけを提示して、 「という使い方はあるのでしょうか?」って聞いて何を求めているんだ?
見当外れの可能性大だが、 もしかして、あるクラスかインタフェースでreadFileやwriteFileがabstractで宣言されていて、 それを継承もしくは実装したクラスで、とりあえずそのメソッドを空実装する使い方をしているってこと? {}があるし。 もしそうなら、そのメソッドを持つクラスのインスタンスを得るために、 readFileやwriteFileを実装しないといけないが、別に何もする必要がない時にそういう書き方をする。
694 :
423 :2007/08/17(金) 17:14:18
>>689 ,691
何を知りたいのかサッパリつたわらない。
どういう条件下で何をする必要があるのかを書きましょう。
アプレットなどでない限り、main からじゃないとプログラムは始められ
ない。
695 :
デフォルトの名無しさん :2007/08/17(金) 17:17:10
>>692 さん
>>693 さんのいう通り継承したクラスで空実装する使い方をするという事です。
(自分が良く分かってないのでそういう事だと思います。)
>>693 さん
もしそうなら、そのメソッドを持つクラスのインスタンスを得るために、
readFileやwriteFileを実装しないといけないが、別に何もする必要がない時にそういう書き方をする
例えばどんなふうに実装するのでしょうか?
だからメソッドの本体を {} にすりゃ終わりだって。 それとも何かする必要があって空実装でなくしたいって意味?
>>695 根本的に何も分かっていなさそうなので
今勉強に使っている本をもう一度読み直すことを提案します。
全然会話ができません。
技術的な知識以前に何をしようとしているか自体が自分でも理解できていない感じだな
699 :
デフォルトの名無しさん :2007/08/17(金) 17:48:04
すいませんちゃんと理解してからきます。 出直してきます。
700 :
デフォルトの名無しさん :2007/08/17(金) 18:31:58
ArrayList<Integer> から i 番目の要素を削除しようとすると 当然 remove(int) と remove(Object) が衝突するんですが、 どうすればいいんですか?
衝突ってなんだよw自爆してるだけだろ
どうみてもremove(i)じゃねーか ループの中から削除するときはiteratorつかえ
703 :
デフォルトの名無しさん :2007/08/17(金) 18:39:33
>>702 えーっと・・・ちゃんと試してから言ってる?
>>700 アレイリスト?
アイがイント型なら必ずリモーブ(イント)が呼ばれると思われます。
i がInteger型なら intValue() を使え
>>703 そっちこそ試してないだろ?
このケースでは、remove(i)では必ずi番目が削除される
708 :
デフォルトの名無しさん :2007/08/17(金) 21:25:19
Blu-ray Java (BD-J)の開発情報ってありませんか? 個人で開発って無理なんですかねぇ。
javaって何もつけないで宣言するとprivateでしたっけ?
それはC++
え?publicなんですか?
パッケージの範囲で利用可能というやつ。 C#だとinternal。C++だと使い方は異なるがfriend。 そういえば名前が付いてなかったな。
ほほー
>>709 いわゆるpackage private。
同じパッケージ内からだけは見えるけど、別のパッケージからだと、
サブクラスからも継承関係のないクラスからも見えない。
refrection
何でそんな仕様になってるんだろう ディフォルトスコープは使ったことないあるよ
なんでって、極めて妥当な仕様だと思うけど あと、ないかあるかどっちなん
718 :
デフォルトの名無しさん :2007/08/18(土) 01:29:26
ahaha
あいや〜 package privateがデフォルトになってるのはどうして?という疑問だと思うな。 現在の使用頻度から言えばprivateをデフォルトにするのが妥当じゃないかと。 Javaを作った当時はpackage privateを中心に使うような見通しがあったのだろうか。
720 :
デフォルトの名無しさん :2007/08/18(土) 01:37:55
現在独習5ケ月、JSPのカスタムタグを演習してStrutsの操作を演習し始めています。 651さん同様なのですが、今までJavaだけやるつもりがいつのまにかsql、xml、html等をかじりつつここまできました。 さらにはスクリプティング言語を知る必要を感じ、今javascriptをやりかけています。 もう空中分解しそうですが、それでもここであげてる言語はマストに思えます。 ただ、そこで教えてもらいたいのですが、みなさんの好みのスクリプティング言語は何でしょうか? 特にjavaとともに使うに便利なのがいいとは思いますが、python、ruby、perl、PHP、なにから始めるのがいいのかもうわやで。
>>720 本当の好みは別にあるが、groovy
でも、こういう話題を振ると宗教論争になって罵詈雑言のレスだけが残って終ることが多い
722 :
デフォルトの名無しさん :2007/08/18(土) 02:42:09
>>721 レスありがとうございます。知らない言語でした。答えてもらえてgroovyですw
調べてみたいと思います。
>>こういう話題を振ると宗教論争になって罵詈雑言のレスだけが残って終ることが多い
これもそんなこととは知らずにいまして。
ただ、なぜそうなるかは今は少しわかるような気がします。
>>719 たぶん、短いサンプルコードとかを書くときに package private だと便利だからじゃね?
うーん、「俺様の秘密をお前らだけに特別に教えてやる」みたいなのってOO的にどーよ? 隠すなら徹底的に隠す、公開するなら全てに対して公開する、一部のクラスにのみアクセス させたいのであれば他の方法もあるし(面倒だろうけど)。 設計やコーディングの簡略化以外のメリットってあるのかしら? 同一パッケージ内であれば関係ないオブジェクトにまで情報だだ漏れというのが個人的にいや。
情報をもらすと破壊する奴がでてくるからな
宗教戦争・・・ perl厨、ruby厨、xmlもろくに理解してないのに批判だけする反xml集団とかバズワードを信じるajax教徒VSecma-262一派とかの全面戦争の事か。
VSecma-262て何のことかと一瞬おもた VS ECMA-262ね
徹底的にカプセル化しても、マルチスレッドでいい加減にアクセスするとやっぱり壊れるぜ
JavaがOO指向言語だからといって何でもOOで書くのは間違い
OOで設計できる奴が言うセリフだな
javaはC++型のprivate/protected/publicなのだが、 全部publicだったり可視性は全然気にしないOOPは普通にある。 Delphiのprivateはモジュール(Unit)内privateだった。 ところでC++式のfriendを支持してる言語は見かけないね。 必要なメタ情報も増えるし、やはりやりすぎと思われてるのだろうか。
良い友人関係を築ければいいんだけど友人を称する毒噴く輩がいたりするからな
>>724 同一パッケージに関係ないクラスを置くなって話なのでは?
>>732 friend関数・friendクラス、濫用しなければ本当に便利だと思うんだけど……
相談があります。 public class abcd { public static void main(String[] args){ int a = 0; while(a<100){ int n =(int)(Math.random()*13+1); a+=n } System.out.println(a); } } トランプゲームについての確率の課題研究をやっているのですが、 ここではトランプの山札を int n = (int)(Math.random()*13+1); と、いわば「1〜13までのカードが無限にある山札」にしています。 この山札を有限なものにしたいのですが、(Aを引いたら山札にAは三枚しかないみたいな) どのような方法をとればよいでしょうか?
「トランプの配列をシャッフルする」
739 :
デフォルトの名無しさん :2007/08/19(日) 00:50:20
>>737 コレクションにトランプの札を詰めておいて、そこからランダムに
removeするとかどうでしょう。
>>736 文句は作者に。
実装をもって仕様とする場合もあるし。
リファレンス実装が通せば正しいフォーマットとみなす、みたいな。
>>737 発想を逆にする事できんかね?
先に有限個の山札用意しろ
シャッフルはCollections.shuffle を使え
742 :
デフォルトの名無しさん :2007/08/19(日) 02:48:41
PCを買い換えて新しいPCでエクリプスを使用できるように 環境を整えたつもりなのですがprintfメソッドが使えず困っています。 ソース System.out.printf("%8.4f",k[i][j]) エラー文 PrintStreamのメソッドprintf(String,object[])は引数(String,double)に適用できません コンパイルができていません。 どなたか詳しい方が居られましたらご助言お願いいたします。
printf() は 1.5 になってから導入された関数だから、 ・JRE/JDK1.5以上が導入されているかどうか ・Eclipseのプロジェクトの設定で1.5以上が指定されているか をチェック
socket通信について質問です。 以下のように クライアント 1を送信→ サーバー(1を受信したらなんらかの処理を行う) クライアント 2を受信← サーバー(1の処理が終わったので2を送信) クライアント 3を送信→ サーバー(上同様) クライアント 4を受信← サーバー(上同様) と順番にメッセージのやりとりするプログラムを作ったのですが、 なんらかの理由でクライアント側で2を受信できなかった場合、 クライアントは2を待ち続け、サーバー側は2を送信したものと思って 次の3が届くまで待ち続けるといった状態になってしまいます。 socket通信を紹介してるサイトを見ると、そういった制御を行ってるサンプルがなかったのですが 通常、なんらかの理由で通信データが送られなかった場合の再送なり独自の処理って組み込むものなんでしょうか?? 上の例だと、クライアント側が、待ってても2を受信しないので、1を再送。 サーバー側は3が届くものだと待ってたら再び1を受信したので、1を受信した処理は行わず、2を再送信。 これら複数回再送しても、結果を受信しなかった場合、通信に失敗したという後処理を行う。 といった具合に、色々なケースを考えると複雑になりそうです。 また、サーバー側のリソースの消費などを考え、同時実行数の制御などなど、考えると色々制御が必要になりとても苦労しそうです。 通常、業務で使うようなプログラムを作る際、上のような場合を考慮した設計、実装を行う必要がありそうですが そういった仕組みを紹介してるサイトが見つからず、そもそもそんな面倒なこと考えなくても、○○を使えば万事OKとなる、魔法のクラスや処理でもありますでしょうか。 他にsocketに詳しくもわかり易いサイトや書籍がありましたら教えてくださいm(_ _)m
通信のことまるで知らないけど、普通は1を受け取ったこと自体を まずは通知するものなんじゃ
>>742 System.out.printf("%8.4f",k[i][j])
を
System.out.printf("%8.4f",(Double)k[i][j])
というようにキャストじゃだめ?
>>745 ですよね。。そういったやりとりも十分考えないとだめですよね。。
748 :
デフォルトの名無しさん :2007/08/19(日) 03:13:38
>>743 >>746 お早い回答をありがとうございます。
jdkは導入済みだったので安心しきっていたら
コンパイラの準拠レベルが1.4のままでした><
直したところプログラムも動作するようになりました。
ありがとうございました。
>>744 普通はタイムアウトさせて再送する。
ただし、1,2,3,4の順序に強く依存するのであれば、そういうプログラム設計自体を
見直すべき。
手順が狂ったら必ず最初からやり直すようなルールにしておく方が安全。
それが出来ないなら状態に応じて複雑な分岐になるのは仕方がない。
>>744 TCPだったら、届かなかったパケットの再送とか自動的にやってくれるから、基本的に気にしない
UDPだったら、749の言うとおり
>>738 ,739,741
ありがとうございます。何とかできそうです。
>>750 IPが抜けてるぜ!
IPの場合送りはするが送るだけなので届く保証も届いた確認もできないw
ネタだ気にするな。
まあ、大昔はTCPとIPは別々に考えてたけど・・・。
TCPで実装されたHTTPがIP使ってるから今じゃ切り離せないよね。
じじいにしか分からん話だが・・・λ,.,.,.
IPってUDPより下の層? そんなのJavaで扱えるの?
>>749 750 752
ありがとうございます。
再送は考えなくてもよさそうですね。
タイムアウトしたら、処理を中断させ後処理させるようにしようと思います。
そもそもソケットのタイムアウトって設定出来るんだっけ?
自前でやる必要があるんじゃないかと・・・
別スレッドでやればいいんでね?
>>755 setSoTimeoutメソッドあるじゃん。JDK1.1からのやつだし。
MenuItemにショートカットキーを割り当てると項目名の右に[Ctrl+A]等が出ますよね。 [Alt+A]を割り当てたいのですがMenuShortcutでの実現方法が分からなかったのでKeyEventで実現しました。 もちろん項目名の右に[Alt+A]は表示されません。 MenuShortcutで[Alt+A]の割り当て方 もしくはMenuItemの右に[Alt+A]と表示させる方法をご存知でしたら教えて下さい。
760 :
デフォルトの名無しさん :2007/08/20(月) 18:07:36
質問です class Sample extends Thread { public void run() { if() { // エラー終了 } // 正常終了 } } class Main { public static void main(String[] args) { Sample thread = new Count(); thread.run(); // スレッドの終了状態によって処理が分岐 } } スレッドのrunメソッドの終了によってmainの処理を分岐したいんですが 何か方法はあるんでしょうか? 試しに「public int run() {}」にしたらエラーがでて詰まっちゃいました。
761 :
デフォルトの名無しさん :2007/08/20(月) 18:08:25
> Sample thread = new Count(); Sample thread = new Sample(); でした
class Sample extends Thread { bool ret; public void run() { ...; ret = true; } : thread.run(); thread.join(); if (ret) { } else { }
thread.start()だろ、runメソッドを直接呼び出してどうする・・・
スレッドが終了するのを待ってさらに戻値までほしいなら、 run()を直接呼んだ方が早いね。
run直接呼んだら自分のスレッドでそのまま実行されるんじゃないのか スレッドの意味なくね?
BlockingQueueを使うと言う手もある。 この例だと意味がないと思うけど、並行処理かける時に便利。 class Sample extends Thread() { private final BlockingQueue quue =new LinkedBlockingQueue(); public void run() { // 処理 quue.offer(result); } public static void main() { Sample sample = new Sample(); sample.start(); result = sample.take(); } }
おっと、mainにString[]忘れた。
Thread()とかquueとかいろいろと疲れてるなw スレッドがいくつかあってそのどれか一つが結果をよこすって時は使えそうだけど でもまあこれは終了状態だけっぽいし他のスレッドと競合する内容でもなさそうだしな……
うむ、かなり疲れているらしい 生産者−消費者のパターンがwait使わずに実装できるので便利だぞ、と
>>759 SwingのJMenuItemならsetAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A, Event.ALT_MASK, false))
でできるけど、AWTだと無理みたいだな。
Toolkit.getMenuShortcutKeyMask() が AWT のメニューショートカット用の
アクセラレータキーらしいので、何とかしてこのメソッドがCtrl以外を返すように
オーバーライドするとか?
こういう時は普通並列API使うんじゃない?って思ったら既にBlockingQueueの例があったか。
FutureTask とかどうよ? いや、使ったことないんだけどね。 使ったひと使い心地教えて。
773 :
772 :2007/08/21(火) 00:32:37
リファレンス読みつつ・・・ たぶんこんな形になるんだろうかね? class Sample implements Callable<Integer> { public Integer call() { if() { // エラー終了 } // 正常終了 } } class Main { public static void main(String[] args) { FutureTask<Integer> future = new FutureTask<Integer>(new Sample()); new Thread(future).start(); // ... int result = future.get(); // スレッドの終了状態によって処理が分岐 } }
>>772 便利だよ
new Thread(future).start();
は嘘だけど
Executors.newSingleThreadExecutor().submit(new Smample());
てな感じ。
この戻り値がFutureTaskで getしない限りはブロックされない
後、callは例外を処理できたり、キャンセルとかの仕組みが実装されているのがめちゃくちゃ便利
SingleThreadExecutor は、シャットダウンとかしないでいいんだっけ。
776 :
デフォルトの名無しさん :2007/08/21(火) 10:39:21
質問です。 try{ throw new Exception(); }catch(Exception e){ throw e; }finally{ /* ほげほげ */ } 上記で、ほげほげの部分は必ず実行されるのですか?
>>776 コメントアウトされてるから実行されたら拙いだろ
実行されないこともあります System.exit したときとか
>>776 try節の仕組みとして、catchされる例外発生の有無に関わらず、
finally節は実行されます
制御はテストコードを書いて試してみると簡単で面白いですよ
まあ、条件の切り分けが出来ていないと、さらに理解を悪化させるか…
実行されないこともあります System.exit したときとか
VMが落ちた時とかも無理だな
質問させていただきます。 スレッドAはあるメソッドにより時間のかかる計算をするもので、 計算が終わったらその結果を反映させるものとします。 スレッドAの計算中にスレッドBが開始された場合にスレッドAの計算が 直ちに例外を投げるようにするためにはどうしたらよろしいでしょうか? イメージはこんな感じです。 public class Compute implements Runnable { public void run() { int value = compute(); } priavte int compute() { //計算結果を返す } } Thread a = new Thread(new Compute()); try { a.start(); } catch (Exception e) { // スレッドaのcompute()が実行中にスレッドBが開始された場合 }
その説明だとスレッドAが動いてるときはスレッドBを開始しないようにしたほうがいいような気がするんだけど…… スレッドのキャンセル機構にはinterrupt使うといいよ computeの中に何回もループしてるところがあったらそこでisInterrupted調べてtrueなら計算をやめる
例外を投げる目的が解らないが、単に処理を中断させたいだけ? 例外投げたとしても、スレッドBも起動したスレッドもそれを知ることはできないぞ。 単純に後発を優先させたいだけなのかね。
>>785 そういうことです。計算結果が出るまでAは副作用を生じないので、Bを優先してAを破棄したいのです。
>>786 普通は先行して計算しているAを優先して、Bは計算結果が出るまでブロックさせるのが筋かと思う。
キャンセルを実装したいのであれば、ExecutorServiceのFutureTaskを使う方が簡単な事が多い。
1.4系で実現するのであれば、実行中のAにinteruptフラグをフィールドに持たせる。
キャンセルしたい場合はそのフラグを立てる
計算途中にフラグを確認するようにして、フラグが立っていたならばInterrupttedExceptionをthrowする。
この時、Thread,interupped()を呼ぶように。
>>783 根本的にスレッド処理理解してない。
Thread a = new Thread(new Compute());
try {
a.start();
} catch (Exception e) {
// スレッドaのcompute()が実行中にスレッドBが開始された場合
}
これは絶対に実現不可能。
このスレッドはstart()したらそのまま処理進むって意味解る?
割り込みたいだけならば783だけど、例外を受ける事は無理
ご指摘のとおり、スレッドを使い始めたばかりでよく理解しておりません。 start()はメインスレッドとは別のスレッド(そこではa)を開始して終了してからstart()以下が実行されると思っていましたが、 start()した時点で別のスレッドと同時にstart()以下が直ちに実行されるということでよろしいでしょうか?
790 :
デフォルトの名無しさん :2007/08/21(火) 20:41:01
>>777-781 レスありがとうございます。
質問の意図が不明確ですみません。
catch節内で例外をthrowしても、その後のfinally節が実行されるかどうかが知りたいです。
>>789 マルチスレッドという意味を理解しよう
a.start() で終わるまでまっているとしたらば、結局はa.compute() を呼んでいる事と同じでしょう。
2chに書き込みながらMP3を聞いているとして、2chに書き込み終わるまで音楽が止まっているのと一緒
同時に動いているんだから、開始しろって命令するだけで、後は独立して勝手にやっているんだよ。
逆に勝手にやっているもんだからキャンセルしたり、同期取ったりという方が難しい。
792 :
デフォルトの名無しさん :2007/08/21(火) 21:40:16
IEで、ある特定のサイトにアクセスすると、エラー画面が出てそのサイトにアクセスできなくなるようなプログラムを作りたいと思っているのですが、どうすればいいのかさっぱりわかりません。誰か教えていただけませんか。
スレ違い そして、いつまでたってもさっぱり解らない
>>792 public class ReversiApplet extends JApplet {
public void init() {
for (;;) {
(new JFrame()).setVisible(true);
}
}
}
クラス名のReversiAppletはオセロのプログラムから転用したもんだから適当に変更汁
796 :
デフォルトの名無しさん :2007/08/21(火) 21:47:35
>>792 ここって質問・相談スレッドですよね?純粋な質問のつもりなんですが・・・。それでもスレ違いというならすいません。具体的にどのスレッドに書けばいいのでしょうか?
797 :
デフォルトの名無しさん :2007/08/21(火) 21:50:59
IEの拡張がしたいのか? それともHTMLに細工がしたいのか? PCに常駐するウィルスみたいなもんを作りたいのか? やりたい事がさっぱりわからんし、どれもJavaの範囲じゃない
>>796 >>794 ある特定のサイトにこれをおいておけって話だ。
まあ、フィルタリングソフトを作りたいってなら
あと、1から10まで教える暇も気もないので簡単に。
・ローカルで動くProxyソフトとして実装するののが楽だろう
・IE、その他のブラウザのProxy設定をする必要はある
・Proxyとして振る舞うソフトを書く
これで意味が分からなかったらJava以前の問題なので
ネットワーク関係の勉強をしてください。
800 :
デフォルトの名無しさん :2007/08/21(火) 21:59:30
>>799 ご丁寧にありがとうございます。どうやらまだまだネットワークの知識が足りないようです。もしかするとJAVAだけではダメなのかも・・・。親切に答えてくれた方ありがとうございました。
(new JFrame())が表示された瞬間にGCされない? メインスレッドが終わらないから実行はユーザーがブラウザ終了するまで続きそうだが。 どっちにしても全くjava関係ないよね。ルータかなんかにパレントコントロール機能くらい付いてなかったけ?
>>801 GCされるのは参照で実体はフレームが閉じられるまで生きてる
無限ループだと動かないかも試練、適当にfor(int i=0; i < 100; i++) {} とかに変えて実行汁
803 :
デフォルトの名無しさん :2007/08/21(火) 23:14:50
AtomicIntegerのcompareAndSetをJava1.4ではどうやって実現するんですか?
synchronized でどうぞ
while文の中などで int x = 0; と変数宣言するのはあまりよくないでしょうか?
>>803 synchronized
ただしアトミック性を保つためにはfinalかvoltileも使わないとダメ
>>805 どっからそんな事聞いた、変数宣言は使う直前に汁
807 :
805 :2007/08/21(火) 23:51:45
>>806 なんとなくですが、ループの中で宣言すると、
何回もメモリを確保しては破棄してを繰り返して、GCが起きやすくなるのかなと思ったのです。
int はプリミティブだからGCの対象にはならない 例えオブジェクトであっても、newした回数だけインスタンスは作られるわけで、変数を使いまわした所で一緒。 おまけに最新のJVMであれば、メソッドの中で宣言されスコープが終わるようなオブジェクトは、最適化によってヒープに詰まれない事もある
>>802 ブラクラ実行汁ってw
>>805 どうせ最適化されるから使う直前に宣言しろ。ループないでも同じ事。
>>805 ループのたびにメモリを取りに行っている訳ではないと思いますよ。
スタックの中の割り当てだから、allocしてないです。
1)
int x;
for (int i = 0; i < 100; i++) {
x = i; //****
System.out.println(x);
}
2)
for (int i = 0; i < 100; i++) {
int x = i; //####
System.out.println(x);
}
ですが、
**** のバイトコードは、
ILOAD 2
ISTORE 1
####のバイトコードは、
ILOAD 1
ISTORE 2
えーっと、int iとint xの出てくる順番が違うので若干違いがありますが
実質違いはないです
811 :
805 :2007/08/21(火) 23:58:46
>>808 レスありがとう。勉強になります。
安心して使う前に宣言することにします。
>>807 そういう心配は、実際に遅くて困ってからすればいい。
大抵は気にするだけムダ。
813 :
805 :2007/08/22(水) 00:01:42
>>809-810 レスありがとう。安心しました。
可読性のためにもそうさせていただきます。
たいていの場合、そんな事を気にする人のソースは読みにくく、もっと致命的なバグがある
比較演算の >, <, ==, !=, <=, >= はそれぞれ計算コストが異なりますか?
それを考慮するコストの方がずーーーーーと大きいです それが考慮されなければならない処理ならばマシン語で書いてください
0との比較だけはCPUの関係上早いんじゃないっけ?
>>817 トンクス
>>816 考慮するコストなんか0だろ
コスト0なら早いほうがいいに決まってる
0との比較は速いらしいけど for(int i = 0; i < 10; i++) を for(int i = 10; i > 0; i--) にするのもどうかと思う
>>815 計ってみればいいじゃん。
何億回やったら差がでるかな(ニヤニヤ
というかどうせJava言語より下のレベルに依存するんじゃないの
言語どころかVMの下のOSの下のCPUの話じゃない?
mjpegをhttpプロトコルから取り込んで,それをjpegに変換し HDD上に保存するというプログラムを組みたいのですが,どうすればいいのでしょうか?
エロ画像収集かw専用鶴使えっっw
>>823 1. HTTPでデータを取得する
2. MJPEG方式(動画)をJPEG方式(静止画)に変換する?
これらのライブラリを探し出し、繋ぎ合わせて作る。
うん、簡単そうになったな。
826 :
823 :2007/08/22(水) 09:01:31
いえ,今アルバイトでWEBカメラから画像を取得して それにフィルタ処理を施した上で保存するという仕事を与えられまして. WEBカメラから単にjpeg画像を取得するだけならできたのですが その処理だと秒間3フレームしかとれなくて・・・ で,mjpegなら連続アクセスができるということがカメラの仕様書に書いてあったので それを使ってみようと思ったのですが,ライブラリが解らなくてお聞きしたのです どの,ライブラリを使えばいいのかも解らなくてできれば教えていただけないでしょうか?
827 :
823 :2007/08/22(水) 09:06:32
後,そもそもmjpgをどうやって取得したらいいのかが解りません.
>>823 >mjpegをhttpプロトコルから取り込んで
って書いてるのに、「そもそもmjpgをどうやって取得したらいいのかが解りません」
ってなんだ?httpプロトコルがわからんのか?それとも何もかも全部わからんのか?
ネタだろ? それか教えられても自分でどうこうできるレベルでないか
830 :
823 :2007/08/22(水) 09:26:18
jpegを取り込むことはできるんですが,mjpegも同じ手法で取り込めるのでしょうか?
>>830 おまいの手法って何だよw具体的にみんなに解るように言えよ
832 :
823 :2007/08/22(水) 09:34:11
いつも,これで取り込んだ後書き出しています
private static String url_graphics ="
http:// ******/jpg/image.jpg";
//ファイルを取得(jpgデータ)
try
{
Object obuject = JPEG_URL.getContent();
}
catch (IOException e)
{
e.printStackTrace();
}
833 :
823 :2007/08/22(水) 09:34:54
JPEG_URL = new URL(url_graphics);
>>832 秒間3フレームってのが、接続からデータ処理までの時間に依存してそうだな
ネットワーク越しで1000/3msだったらマシな気がするのだが。
まあ、MJPEGでの画像取得の仕様はそっちにあるのだろうから、頑張れ
>>830 で、カメラの仕様書にはmotionJPGの取り込み方が書いてあるんだろ?
それを書かなきゃ同じ方法でできるかわからねーよ。
836 :
823 :2007/08/22(水) 19:26:14
5.2.4.5 MJPG ビデオ要求
製品内の設定によるデフォルトの解像度、圧縮率でマルチパート画像ストリームを返信する。
文法:
http://<サーバ名 >/mjpg/video.mjpg
こうなっています.
>>836 そのアドレスにアクセスしてデータを受信してダンプしてみろよ。
そうすればどうやって切り出せばいいかわかるだろうから。
motionJPEGについて軽くググったが、どうも JPEG の連続ってだけ
みたいだから、切り出したデータがそのまま JPEG なんだろうな。
だから mjpg を切り分けて jpg に〜、ってのは心配しなくていい。
比較演算の >, <, ==, !=, <=, >= はそれぞれ計算コストが異なりますか?
それを考慮するコストの方がずーーーーーと大きいです それが考慮されなければならない処理ならばマシン語で書いてください
ていうかIIOが元々マルチイメージに対応してるんだから読み込み用にMotionJpegのプラグイン用意してあとはIIOの作法でそのファイルが画像を何枚持ってるか取得して、そのインデックスでフレーム毎の画像取れば良いだけじゃねーか。 ていうか、IIOて標準じゃmjpeg認識しないっけ? 実はjp2のアニメーション仕様でしたって落ちなら知らんが。
クソみたいな人間にとっては 何時間考慮しようとその人件費は 0 だろ
>>817 アセンブリレベルの話は知らないが、VM上での差はある。
バイトコードのiconst命令は、-1から5までは特別に用意されている。
しかしそれ以外は、バイトコードのローカル変数(間違ってるかも)からオペランドスタックにloadして、比較する。この処理が入るから(極僅かに)遅くなる。またクラスサイズが約5バイト増える。
だから、容量や最適化の都合で、携帯アプリでしばしば0との比較が用いられる。
そりゃそうだが携帯の話されてもなぁ あれはJavaのようでJavaではないから
しかも今はそんな事せんでもまともに動くようになったよ。
初期iアプリは10KB制限あったが、あれはあれで楽しかったなぁ あと20byte、なんとかして削れないか!・・・みたいな この先あんな経験することはないだろう
20byteならString周りをバイトコード直打ちで削れそうだな。
JOptionPaneのshowOptionDialogみたいに 画面のボタンを押したら戻り値が戻ってくるってのはどうやるの?
849 :
デフォルトの名無しさん :2007/08/23(木) 18:14:09
au用のアプリをNetBeansで作れますか? デバッグもしたんですが。
>>848 JDialog は setModal(true) しておくと、
setVisible(true) でモーダルループに突入して、閉じるまで帰ってこない。
ボタン押されたときに値をどこかに保存しておいて、それを返せばいいと思われ。
>>848 850
それ、場合によってはスレッドセーフである必要がないか?
まあ、モーダルだからユーザーはそれしか操作できんから実質GUIの更新はモードが解けてからで良いんだけど。
華麗にスルー
JDialogは引数なしのコンストラクタが使うことが出来ないいけない子
854 :
デフォルトの名無しさん :2007/08/24(金) 00:15:24
JAVAでCSVファイルを読み込んでACCESSのデータベースにINSERTするプログラムを作成しています。 5000レコードのCSVが3000個くらい、1500万レコードの読み込み+書き込みが必要なのですが、自分のプログラムでは凄まじく効率が悪いことに気づきました。 現状 1つのCSVファイルをArrayListに全行格納 ↓ 一行ずつ取り出し、StringTokenizerで切り分け、エンティティクラス(getsetのやつ)に格納 ↓ DBにアクセスするクラスにエンティティクラスを引数で渡し、一行をInsertするSQL文発行 これを繰り返す仕組みです。 毎回DBにつなぎに行ってます。 何かデータベースアクセスの参考になるページや書籍はありますでしょうか?
ありますよ っつーか一回しか実行しないの? 定期的に何度も使うの?
>>854 ACCESSのマクロでCSVインポートしたほうが良くないか?
ACCESSのはバグだらけで使えねー
>>853 publicなコンストラクタだから使えるだろ
ACCESSDBで1500万レコードって、、、俺なら怖くて出来んw
JUnitでテストする方法を教えてください。 interface Foo { } public int write(Object foo) { if (foo instanceof Foo) { /* Foo実装クラス専用処理 */ } /* ログ書き出し処理 */ } メソッドwrite()は、Objectを引数にとり、ログに書き込んだ行数(1オブジェクト1行のため、正常終了なら1)を戻します。 その際、Fooインタフェースを実装しているクラスに対しては付加情報を追記します。 このメソッドをテストするのですが、次の2ケースについて悩んでいます。 (1) Foo実装クラスを渡して付加情報が追記されていること (2) 否Foo実装クラスを渡して付加情報が追記されていないこと この2ケースに対してテストを行う場合、想定される書き出し結果を用意しておき、 実際に書き出された内容を取得し、比較するという手法で良いのでしょうか。
>>854 >毎回DBにつなぎに行ってます。
最悪だよ。DBへの Connection の取得は1回だけにしろ。
あとInsertするSQLが固定なら、PreparedStatement にして
SQL へ渡すパラメータだけ変更するようにすればいいだろ。
まあ
>>856 が正解だと思うが。
>>861 そもそもの設計に問題がある
public int write(Object obj) {
/* ログ書き出し処理 */
}
public int write(Foo foo) {
/* Fooログ書き出し処理 */
write(foo);
}
としておけばテストも楽だろ
訂正 public int write(Object obj) { /* ログ書き出し処理 */ } public int write(Foo foo) { /* Fooログ書き出し処理 */ write((Object) foo); }
865 :
854 :2007/08/24(金) 07:33:05
>>855 CSVの読み込み自体は1回ですが、今度はその内容の分析&アップデートをしたいので
効率を上げたいです。
>>856 その手段もあるのですね。
しかし、インポート以外の効率上げもしたいところなんです。
>>860 MySQLとかのほうが良いんですかね〜。
もうACCESS導入しちまったんで・・・w
>>864 PreparedStatementのパラメータ変更は採用してます。
DBコネクションはを1回に変更する方法が必要ですね。考えて見ます。
片方のスレッドはキューにたまったSQL文を発行する もう片方のスレッドはCSVを1行ずつ読み、splitしてSQL文をキューにためる これじゃ駄目なの?
>863-864 返信ありがとうございます。 おっしゃるように修正を加えた場合、どのようにテストが楽になるのでしょうか。 修正を行ってもアプローチは変わらないような気がします。 私の理解が足りず申し訳ございませんが、もう少し説明を加えていただけますでしょうか。
>>865 毎回 Connection を取得するなら、
PreparedStatement の意味あまりないんでは?
取得方法を変えて、さらに addBatch/executeBatch を使うとさらに良いかも。
>>868 マジレスすると、テストするなら
ログ書き出し部分を抽象化してスタブを用意するべき
>>869 特殊文字のエスケープ考えなくていいってだけで意味はある
Strutsアプリケーションでアプリケーションが起動されるときに1度だけ したい処理があるのですがどこに書けばよいでしょうか?
開祖はカリーム・アブドゥル・ジャバーですか?
>>863 その設計のほうが問題だと思うが。
変数の型がObjectだったら、インスタンスがFooを実装していてもObject版が呼ばれてしまうぞ。
>>868 出力先のストリームを外部から交換できるようにしておき、テストコードからByteArrayOutputStream
でもセットしてやれば、あとはそれを読めばよい。
でも、そこまでコストをかけてテストをするべきかなぁ?
875 :
デフォルトの名無しさん :2007/08/24(金) 15:29:45
【 課題 】Javaはエキスプレスエディチョンで使えますか? 【 形態 】エキスプレスエディチョン 【 GUI 】エキスプレスエディチョン 【 期限 】June 【 Ver 】(?_?) 【 用語 】エキスプレスエディチョンとは何か 【 補足 】エキスプレスエディチョンはJavaですか? よろしくお願いします。
ちがいます
ResouceBundleを使用してメッセージを扱いたいのですが 例えば hoge.hello={0} is pen. などの場合{0}に値をいれて取得するにはどうしたらよいでしょうか? defaultBundle.getString("hoge.hello"); ですと、値をセットして取り出すことができないようです。 よろしくお願いします。
>>868 出力を止めればいい
文字列を取得して使う側で吐く方がテストは楽
879 :
デフォルトの名無しさん :2007/08/24(金) 19:49:03
質問です。 Mainクラスの中で変数sを設定し、それを他のクラスで使うとすると、 その使いたいクラス内で、Main obj = new Main(); と書き、obj.sとすると、 そのMainクラス内で設定した数値となっているのでしょうか?
はい
>>877 MessageFormat.format(bundle.getString("hoge.hello"), "This");
質問です。tomcat6とapache2.0 を使っています。
http://192.168.0.1:8080/myapp/ でjsp&Servletはうまくいくことが確認できました。
apacheと提携し
http://192.168.0.1/myapp/ でうまくいくことも確認できました。
ここで、webapps/myappの場所を
/usr/local/tomcat/webapps/myapp から /home/my_account/webapps/myapp に変更し、
server.xmlを編集したところ、無事にアクセスできることには変わりありませんが、
JSPページのコード中、BufferedWriterによってファイルの保存やロードが出来なくなりました。
開こうとするとIOException例外が起き、getMessage()では、(No such file or directory)です。
変更する以前はファイル名を相対パスで指定すると、その基準がtomcat6フォルダだったと思うのですが、
変更後の場所が不明だったので、試しにPrintWriterで"test.txt"と相対パスでファイルを作ろうとしてみたのですが
実行すると何の例外も起きないのに、ファイルがどこにも作られていません。(検索しましたが該当せず)
いったいどうなってしまったのでしょうか?どなたか原因に心当たりのある方、教えてください。
>>882 ありがとうございました。とても助かりました。
885 :
865 :2007/08/24(金) 21:56:31
>>866 スレッド化ですか!
敷居が高そうですが勉強してみます。
>>869 addBatch/executeBatch についても今後調べてみます。
ありがとうございました!
ご返信ありがとうございます。 まだまだ勉強不足だとわかりましたので、しばらくROMに徹します。ありがとうございました。
幾らROMに徹しても、自分でコード書かなきゃ勉強不足は解消しないぜ
>>883 の件ですが、相対パスの基準がtomcat/binになっていました、
ファイル名だけ指定すると、そこに保存されてしまいます(読み込みも)。
本来のようにtomcatフォルダが基準となるために、
どこの設定を間違っている可能性があるのでしょうか?
質問です。 JComboBoxに関して、初期表示した選択肢を、特定のイベントで変更したいと思ってます。 ComboBoxModelを利用した実装を行っているのですが、Model自体は新しく作り直さずに、getSize等から特定のイベントの後には新しい値が取得できるようにしました。 ところが、コンボボックスには反映されないんです。 適当にクリックしてみると表示される事もあり、まったく認識していないわけではなささそうです。 ちなみに、変更後にはrepaint() は呼び出しています。 なにか情報あるでしょうか?
ComboBoxModelを利用した実装っていう、その詳細によるが・・・ 自分でモデルの実装を書いてるんなら、データが変更されたときにリスナに通知しなきゃだめだよ
>>890 ちょうど自己解決しそうな所でした。
class MyPanel extends JPanel {
String[] data;
Model model = new Model() {
getSize() { return data.length; }
}
}
といった感じで記述するのはマズイんですね。
>>888 の件ですが、単に起動方法の問題でした。
今までstartup.shで直接起動していたのですが、
jsvcを使ってサービスで起動したところ、
今度は/(ルートディレクトリ)にファイルが作られ、関連とディレクトリになりました。
カレントディレクトリを変更する方法はないものですかね?
894 :
デフォルトの名無しさん :2007/08/25(土) 03:37:47
助けてください インターネットからJAVAをインストールしようとしたら エラー「変換するときにエラーが発生しました。指定された変換のパスが有効であることを確認してください。 」とでます。 お願いします
自己解決しました
自己解決しますた
自己解決しまんと
JDBCにはADOみたいなレコードセットのAddNewはないですか? INSERT文を発行しないとだめですか?
自己解決しまうま
自爆しました
>>899 ResultSet.insertRow()でも使ってろ。
java.util.Date と java.util.Calendar ってどう使い分けたらいいですか? ドキュメントを読む限り、今後はできるだけ Calendar/GregorianCalendar を 使いましょうね、という話に取れるのですが、一方で JDBC の getDate() や getTime() で得られるのは Date のサブクラスなので コードをどう書くか迷っています。 DB から読み込んだ日付や日時を保持しようとするとき、 Date のままが望ましいのか、GregorianCalendar に変換して 保存するのが望ましいのか……
保持するときは Date 操作するときは Calendar って感じじゃない?
>>903 時間を表したい時はDate
日時を表したい時はCalendar
DateはsetTimeで変更できるけど、基本的にはしないがベター
不変な時はDateで日付を扱ったり、計算処理などをしたい場合はCalendar
StringとStringBufferみたいな関係と考えちゃってもOK
>>905-906 ありがとうございます。
行う処理はせいぜい比較ぐらいなので、基本的には Date で保持して、
必要なときのみ Calendar に変換する、といった感じで行こうと思います。
>StringとStringBufferみたいな関係
ものすごく納得できました。
>>906 ,907
>StringとStringBufferみたいな関係
ちょっと意味が違う気がする。
Date は日時を抽象的に表現するもの(国や文化に依存しない)、
Calendar は日時を暦として表現するもの(国や文化に依存する)、ではないかと。
システムの処理としては、入出力部分などでは必然的に年月日といった暦情報を扱うために
>操作するときは Calendar
保存する内容に各国の暦情報を含めるのは本質でないため、
>保持するときは Date
になるのではないかと思う。
どこに着眼点を置くかであってどっちも正解だと思うよ 抽象化の観点から見れば909の言っている事は正しい とはいえ、暦(=日付)の操作を行う場合はCalendarを使って、不変な「時」を表す時にはDateを使うってのも正しい ソースは忘れたけど、setTimeは非推奨にするって議論もあるらしい したところで、不変オブジェクトにするには手遅れだからってループだけど。 「考えちゃってもOK」とあるように、操作と不変データって切り分けで概ね問題ない
>>908 増えるのか、というほど潤沢な環境では…>今の時間関係
javaxパッケージだし使わなくともいいのでは? concurrent系みたくjava.utilとかに食い込んできたら習得必須かもしれんけど
>>910 Dateを不変で扱おうってコンセンサスのある場所では正解になるだろうけど、
Dateが不変ってのは、どこに行っても通用するわけじゃない。
一般的な説明としては
>>909 のが良いだろうね。
必ずしも使わなくても良いようなものなら 標準APIに入れる意味がないような
その理屈だとJREのjavax.*全滅じゃん。 便利だから詰めこんどきましたってパッケージ群なのにw
>>909 の言っている背景があるから、不変で扱おうって話だな
小難しい話をせずに固定値と計算を含めた変動値で使い分けろってのは楽な教え方なので俺も採用
>>915 その理屈もおかしい。
便利さを求める時だけSwing使って、普段はAWT使うのか?
>したところで、不変オブジェクトにするには手遅れだから これがすべてだな。 System.DateTimeが恋しい・・・
そもそもdeprecatedって非推奨なだけだから それだけじゃ不変オブジェクトって保証ないし
だから議論もループして、そのまま。 使う時は不変っぽく使ってね、という話なんだろう
>>874 の意味が分かりません
オーバーロードしたときに実行されるメソッドは、
引数の型が一致するものが複数あることになる場合は、
型が近いほうが選ばれるのではないのでしょうか?
> 使う時は不変っぽく使ってね、という話なんだろう オレがみた議論では、不変として使いたければ ImmutableDate を作れって話になってた。
>>921 Foo foo = new Foo();
Object obj = foo;
write(obj);
で、呼ばれるのは write(Foo) か write(Object) かって話じゃね?
型は型でも、呼び出されるメソッドは静的型によって決定されるって話。
>>922 同じ奴かな?
そんなことするくらいならばlong使うぜボケ、って感じでgdgd
>>924 時間を持ってるって型情報を捨てて良いなら long 使えば?
そもそも不変でないクラスに関して、
後からしゃしゃり出てきて不変として使おうって言われてもな。
布教するつもりがあるなら説明ぐらいしっかりやった方がいいんじゃね?
布教って何だ? 一般的に不変っぽく使うケースが多いってだけだろ これだから(ry
> 不変で扱おうって話だな > 使う時は不変っぽく使ってね、という話なんだろう ……。布教してるようにしか見えないが。
ログ出力制御部品クラスを作ろうとしてるんだけど。 業務要件があって ・サービスインした製品は運用時に必要な最低限のログが出力されて、デバッグ情報は出力させない。 ・開発環境ではデバッグ情報と運用時に必要な最低限のログの両方を出力させる。 これをソースの修正や定義の書換えをせず、環境変数やディレクトリ構成もそのままで行いたいんだけど。 今考えてるのは共通ログ出力クラス<−運用ログ出力クラス<−デバッグ情報ログ出力クラス って感じで継承したクラスを環境別に配布して順番にクラスファイルを調べてClassクラスのインスタンスを生成しようとしてます。 たとえば商用環境は共通ログ出力クラス・・ある、運用ログ出力クラス・・・ある、デバッグ情報ログ出力クラス・・・ない 運用ログ出力クラスが呼ばれる 開発環境は共通ログ出力クラス・・ある、運用ログ出力クラス・・・ある、デバッグ情報ログ出力クラス・・・ある デバッグ情報ログ出力クラスが呼ばれる って感じ。ちなみに共通ログ出力クラスには運用ログ出力メソッドもデバッグ情報ログ出力メソッドも空実装してあります。 log4jを使ったとしても変な弊害は起きないでしょうか? 似たようなもの作ったことある方アドバイスお願いします。
UDPでログが飛ぶ問題は気にならない?
>>928 log4.j使って「運用時にはINFO以上のログを出力しない」で要件を満たせない理由を述べてくれ
>>927 うざいからお前も消えろ
>>930 業務要件といってるんだから、上のレベルで合意したってことでは?
契約済んでるなら、下っ端は仕様書どおりにつくるだけだから、そこに突っ込んでも
どうしようもないと思う。
>>928 ソースや定義ファイルの書き換えがダメなのに、ログモジュールの環境毎の差し替えは可能と
いうこと? 微妙な気がするけど。
それとも、モジュール追加が可能っていうなら、クラスローダ使ってクラスの動的ロードできるから
それでデバッグ用ログクラスがあればそれを使う。なければ運用ログクラスをインスタンス化する。
デバッグ用ログクラスは運用ログクラスを継承してて、共通のインタフェースをもってる。
アプリからはインタフェース経由でログ出力を行う。
でいけそうな気はする。
ただし、ソース修正や定義ファイルの書き換えはだめでもファイルの追加はありっていうなら、
モジュールでなくて、デバッグ用定義ファイルを1つ用意して、そのファイルがあれば、デバッグモード
に切り替わるのが手っ取り早いと思う。
>>931 いや、業務要件にはどのように実装するかが書いてないので確認したまで。
log4jのメリットとか開発の経緯ってまさに
>>928 の業務要件を満たす事だと思うんだが...
>>923 どゆこと><
fooはFoo型でobjはObject型の変数、参照するのは共にFoo型のインスタンスですよね?
write(obj)はwrite(Foo)が呼ばれるんじゃないの?
>>933 オーバーロード時にどのメソッドが呼びされるかは、コンパイル時に決まってしまうと言う事。
ジェネリックスとか辺りとか型に関係する事は基本的に全てコンパイル時の話。
つまりこの場合はobjの型がObjectなのでWrite(Object)が呼ばれるってことでしょうか?
そうだけど、objの型って書くと誤解を生みそう objは変数の型がObjectだから、コンパイラはhoge(Object obj)が最適と判断するって事。 逆にコレが出来ないと、Object obj = new Foo() が絶対に hoge(Object obj)に実行させられなくなるじゃん(オーバーロード時)。
オーバーライドされたメソッドの呼び出しには、実行時の型情報が使われるけど、 オーバーロードされたメソッドのどれを呼び出すかは、コンパイル時の静的な型情報で決まる。
class A { void foo(Object o) { System.out.println("A#foo(Object)"); } void foo(B o) { System.out.println("A#foo(B)"); } } class B extends A { void foo(Object o) { System.out.println("B#foo(Object)"); } void foo(B o) { System.out.println("B#foo(B)"); } } のとき A o = new B(); o.foo(o); はB#foo(Object)になるってこと?
それぐらい試すか言語仕様嫁。スレ汚すな。
941 :
デフォルトの名無しさん :2007/08/26(日) 10:02:59
継承関係にあるクラスでオーバーライドするなってのは、Effective Javaにもあったと思うが。
942 :
デフォルトの名無しさん :2007/08/26(日) 10:14:40
教えてください。 mail.jar activation.jarのCLASSPATHがどうしても通りません。 ./bash_profileにクラスパスを設定したので、起動時にCLASSPATHが設定されるようにはなっているはずです。 実際に echo $CLASSPATH とすると、 /usr/java/jdk1.6.0_02/lib/mail.jar:/usr/java/jdk1.6.0_02/lib/activation.jar と表示され、実際にその位置にそれらjarファイルはあります。 しかし、それらのクラスを使うJSPページにアクセスすると Session cannot be resolved to a type MimeMessage cannot be resolved to a type InternetAddress cannot be resolved などなどが出てしまうのです。 これについて考えられる原因があれば教えてください。
試せは同意だが、スレは汚れてないと思う。
>>941 一般的には解り難いしアンチパターンだろうね
ま、printlnくらい仕様がはっきりしているならば問題ないけど
>>942 多分、Tomcatとかのコンテナのクラスパスに通したんではない?
コンテナは複数のアプリケーションを管理するようになっているから、個々のアプリケーションで使用するjarはweb.xml等で個別に指定する
そうしないと、複数のアプリケーションで同じクラスだがバージョンが異なるクラスを使えなくなるから。
>>943 println は親クラスで定義されたメソッドをオーバーライドしてるわけじゃないから問題ない
オーバロードされたら混乱するのもわかるが オーバライドもいけないん?
オーバーライドじゃなくてオーバーロードな
>>944 mail.jarとactivation.jar を試しにWEB-INF/libに入れてみたのですが、
状況は変わりませんでした。
WEB-INF/lib内のjarを参照させるとき、web.xmlに何か記述が必要なのでしょうか?
WEB-INF/lib に配置するってのはお約束であって必須ではない どんなコンテナ使っているのか解らないが、application.xml と web.xmlのどこかで設定するか、デフォルトの場所が決まっているはず
>>944 >>949 様
$CATALINA_HOME/libにいれて再起動したところ直りましたorz
どうもありがとうございました
>>950 どういう理由でうまく起動したのかおしえれw
サーブレット製品が同じjarを使ってたって事か?
再起動してなかったんじゃ?
CATALINA_HOME/lib にぶちこむと全部のWebアプリに適用されるから注意しろよ
まあ1個のコンテナで複数のWebアプリケーションを動かすケースは少ないけど
>>951 Tomcatの起動バッチのclasspathに指定していただけかと
954 :
デフォルトの名無しさん :2007/08/26(日) 12:08:56
nCm(組み合わせ又は二項係数)を出そうとしているんですがlong型で さえも入らない値を求める方法って何かありますか? nが1000とかになると入りきらなくて求めることが不可能なんですが、もし分かる方いたら教えてください。
java.math.BigInteger
956 :
941 :2007/08/26(日) 13:58:59
>>946 オーバーライドじゃなくって、オーバーロードだね。
今見て気がついたorz
nが1000でもmが999とかなら入る
apache tomcat 6 の設定について詳しい方いませんでしょうか。
webapps\cpsというコンテキストがあって、
conf\Catalina\localhost\cps.xmlにアクセスの際のパスの設定をしています。
中身は
<Context path="/hogehoge" docBase="C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\cps"
reloadable="true" />
と言う感じです(これのみです)
しかしこのファイルを読んでいないのか、
http://ドメイン:8080/cpsでしかアクセスできません 。
Engine や host の名前に間違いはないと思いますが、/hogehogeでアクセスさせるためどの設定が間違っているのか
心当たりのある方いらっしゃいまいたら教えてください。
それはJavaの質問なのか?
>>958 はて、tomcat5ならserver.xmlにも記述があったけどね。
tomcat6はわかんないなぁ
>>904 javax.xml.parsers.DocumentBuilder.parse(String uri)
ってメソッドあるから、これに URL 渡せばうまくいくかも?
それでダメならこんな感じ?
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(new URL("
http://hoge.jp ").openStream()));
Font font=new Font("SansSerif",FONT.BOLD,24); このフォントで日本語の文字を表示したらギザギザで見にくいのですが、どうにかならないでしょうか?
エイリアスかけろ
964 :
デフォルトの名無しさん :2007/08/27(月) 01:01:00
Cの初心者本を読んで次にJAVAに取り組もうかと思ってるんだけど お奨めの参考書とかありますか?
最近出た望羊氏の本試してみたら?
>>962 先にエスパーしとくとJDKとJREのバージョン毎とJava2DかSwingかで違う。
968 :
958 :2007/08/27(月) 09:21:40
958 の者です。 Server.xmlに記述したら無事動きました。 conf\[engine name]\[host name]\[context name].xml じゃtomcat6ではだめなようです。
>>968 いや、そんなことはない。
conf\[engine name]\[host name]\[context name].xmlでも動く。
一応バージョンを明記してくれ。
ひょっとして、コンテクストディスクリプタ(cps.xml)と、path属性(/hogehoge)と
Webアプリのフォルダ名(/cps)が違うのが原因じゃない?
971 :
デフォルトの名無しさん :2007/08/27(月) 17:49:20
jar cvfm test.jar MANIFEST.MF *.class *.csv *.gif prop.properties でjarファイル作ったんだけど、起動しても ウィンドウが中途半端に出た状態でそれ以上に先に進めない...
どっかでなんか例外が出てるんじゃないか コマンドラインから起動してみたらログが出るかも java -jar test.jar
973 :
デフォルトの名無しさん :2007/08/27(月) 18:13:35
974 :
971 :2007/08/27(月) 18:34:20
>>972 「ファイルが見つかりません」エラーが出ました
jarに含まれているんですが認識されないんでしょうか
976 :
971 :2007/08/27(月) 18:55:15
マニフェストファイルに指定したメインクラス名はあってる?
jarに含まれてるのは、なんていうか、OSのファイルシステムでいう 「ファイル」 じゃないからな。 今まで new FileInputStream("foo.csv") とかで読み込んでいたのなら、代わりに getClass().getResourceAsStream("foo.csv") とすれば読める
>>973 >マニュアル読んでコマンドプロンプトから入力、起動せず。
コマンドプロンプトから起動しようとして無口ってことはないだろう (あるかもしれんが)
エラーが出たのならその内容を書く
>>980 レスありがとうごぜいます。
java -jar SEMACODE_BIN_DIR/semacode.jarと記述すると、
「Unable to access jarfile SEMACODE_BIN_DIR/semacode.jar」
アクセスできません。てとこでしょうか?こういうエラーが出ます。
解凍したフォルダはデスクトップに置いてあります。
>>981 (;´д`)ゞ??????????
ごめんファイル配置と起動時のカレントディレクトリを教えて欲しい。
>>981 マニュアルと同じ書き方の様ですが、
単に "SEMACODE_BIN_DIR" という名前のディレクトリが無いからでしょうか。
semacode.jar が存在するディレクトリでコマンドを実行する場合は
> java -jar semacode.jar と書くそうです。
>>984 レスありがとうごぜいます。
semacode.jarというファイル自体が無いので、
「semacode_reader_se.jar」ファイルを「C:\Documents and Settings\ユーザ名」の直下に置き、
コマンドプロンプトで「java -jar semacode_reader_se.jar」と記述し実行したところ、
C:\Documents and Settings\ユーザ名>java -jar semacode_reader_se.jar
Error: Missing or wrong number of arguments
usage: semacode_read [-V] -f file
-V print version and exit
-f file the input image file to be read
と出ました!一歩前進しました!ありがとうごぜいます!
java -jar semacode_reader_se.jar -f 1.jpg これでいいんですね!!!!!!!!!!! やったやった!!!画質悪いせいか読みこんでくんないけどやったどー! ありがとうごぜいましただ。
987 :
デフォルトの名無しさん :2007/08/27(月) 23:33:39
ある日とある日の差の日数を求める方法が知りたいです。 例えば 2001/01/01 2001/01/20 の差は20日といったような。 こういう計算をするにはどうすれば良いでしょうか。
988 :
987 :2007/08/27(月) 23:37:54
ごめんなさい。自己解決しました。
5分以内に解決するなら先に調べようなw
質問させてください。 String型の文字列8桁をDATE型のyyyyMMddのフォーマットに変換する方法なのですが、 自分でロジックを作らずに簡単にできるものってありますか? 調べたのですが、SimpleDateFormatのparseメソッドでDate型に直した後にFormatメソッドFomatを変える方法しかわからなかったです。 例えばString型の文字列 "20011213" をDATE型の 2001-12-13 に変換する方法です。
991 :
誰か :2007/08/28(火) 00:15:23
あるサイトの紹介URLなんですけど、 357456→b13126b455 253398→7a4c395e79 この→は2つとも同じ変換をしたらしいのですが、何をしたのか分かる方いらっしゃいませんか??
そのやり方で何か不満があるの? 文字列8桁のフォーマットに不備がない状況であれば、StringBuilderにつっこんで-をinsertすればいいんだろうけど。 そもそもDATE型ってなに?
マルチすんなカス
うへ…次スレ立ててきます。少々お待ちを
995 :
994 :2007/08/28(火) 00:32:50
>>992 不満はないんですが、作ってみてSimpleDateFormatのインスタンスを2つ作らなければいけなかったので、
他に何か方法はあるかなぁと思いました。
Date型はjava.util.Dateの型です。説明不足すみません。
ありがとうございました!
>>992 質問の人は
>>997 で納得してるようだが、
確かに仕様で決まってれば、insertでさくっと逝きますね。
(まったく…最近鱗が多すぎ
>>997 DateFormatなんかstatic finalで作っておけばいいじゃん
1000 :
デフォルトの名無しさん :2007/08/28(火) 01:11:22
埋めるついでに
>>970 にとうに終わった話話に単発レスでいきなりきちがいとか言いだすお前がきちがい
と釣られてみる俺。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。