4 :
デフォルトの名無しさん :2011/06/26(日) 11:26:03.77
すいません。学校の課題を質問させてください。超初心者で、朝から5時間かけてもわからなかったので質問させてもらいます。 問題 ---------- 疑似乱数を生成する java.util.Random クラスを使って、占いを行う Fortune クラス を作りなさい。 fortune メソッドを作成し、そのメソッドに String クラスのインスタン スを渡せば名前占いを、 また整数 (int) を渡せば誕生日占いをするようにしなさい。 うらないと誕生日占いのアルゴリズムは適当に決めなさい。 ※ヒント:この占いでは、0 と 1.0 の間の double 型の乱数を 10 個生成します。 0.5 以上の 値が 10 回中7回以上あれば占いの結果を「絶好調!」とします。 0.5 以上の値が 10 回中 4 回以上7回未満あれば占いの結果を「まあまあ」とします。 0.5 以上の値 が 10 回中 4 回未満であれば占いの結果を「絶不調 orz」とします。 10 個の乱数値 と占いの結果をコンソールに出力します。 乱数のシードには、String クラスのイ ンスタンスを何とかして整数にした値やメソッドに渡された誕生日の整数そのもの を使えば良いでしょう。 ---------- 自分の方針としてはユーザーに名前であればひらがなで名前を入力してもらいその文字数に応じて占いをして 誕生日であればすべての数字を足した合計数に応じて占いをしようとしました。 しかし、具体的な方策ができずにググリ続けて5時間。もう無理です。助けてください。
誰かJava宿題スレ立ててくれよぉ
いやです
こんなもん占いじゃねーよ SHA-512とメルセンヌツイスタ使った課題に書き直すよう、講師に伝えてこい
8 :
デフォルトの名無しさん :2011/06/26(日) 11:50:26.11
>>7 ありがとうございます!そうなんですか(;´Д`)
とりあえず、この課題は片付けなければいけないんです。
今こんなプログラムをウェブで見つけて使えるかなとおもったんですが。。。
-----------
import java.util.Scanner;
import java.util.Random;
class Exercise05 {
public static void main(String[] args){
Scanner stdIn=new Scanner(System.in);
System.out.println("ゲームをする前に今日の運気を占いましょう");
System.out.println("");
System.out.println("あなたの名前をひらがなで入力してください:");
int x=stdIn.nextInt();
if(x==1){
Random rand=new Random();
int unnki=rand.nextInt(6);
if(unnki==0||unnki==4){
System.out.println("今日の運気は好調です。なんかクリアしそうな気がするぞ");
}else if(unnki==1||unnki==3){
System.out.println("今日の運気は不調です。ちょっと疲れ気味かな。ゲームをやって元気になろう");
}else if(unnki==2){
System.out.println("今日の運気は絶好調です。全部クリアしそうな気がするぞ");
}else{
System.out.println("今日の運気は絶不調です。落ち着いてやれば大丈夫だ");
}}}}
おまえじゃ無理もう諦めろ
10 :
デフォルトの名無しさん :2011/06/26(日) 12:02:10.70
GUI作れとか鯖立てろとかって言うんじゃなくてただ単純に占いをするだけのプログラムが書けないのか? 大丈夫か?
unnti
占いループと分岐のとこだけ書いておこう。 先生。正直、ループいらんのだが… Random rnd = new Random(); /* ここでシード設定 */ int hit = 0; for(int ct=1; ct<=10; ct++){ if(rnd.nextDouble() >= 0.5) hit++; } String msg; if (hit >= 7) msg = "絶好調"; else if(hit >= 4) msg = "まあまあ"; else msg = "絶不調"; Java宿題スレ立ててくれたら、残りの回答してやってもいい
14 :
デフォルトの名無しさん :2011/06/26(日) 12:39:44.40
>>13 レベルが足りなくて建てられませんでした。
もう無理か。。。
15 :
デフォルトの名無しさん :2011/06/26(日) 12:54:48.14
すいません。お願いです。本当に半日かかってもできないんです(^_^;)
誰か助けてください
>>4
顔文字も sage ないのもムカつくんだが
ニートのくせに黙れ
いつも丁寧な回答ありがとうございます。 お手数おかけしますが質問させてください。 処理の前後で引数の値を変化させるメソッドを作っており、 変化後の引数の値を取得したいと考えているのですが、 戻り値取得以外の方法で取得する方法はありますでしょうか。 具体的には以下のような実装を考えています。 **************************************************** int num = 0; boolean changeResult = false; // change() は引数を 1 に変更するメソッド changeResult = sample.change(num); // 1 と表示させたい System.out.println(num); **************************************************** このようなコードを書いたところ、最後の命令で 0 と表示されてしまいました。 何かアドバイスいただけると嬉しいです。よろしくお願いします
num は int で基本型なのでコピー渡しなので numの値が変更されることはないしだいです。 numの値をreturnで引っ張るのはダメなのかな
>>18 >>20 にもあるけど。
・numをローカル変数でなくフィールドにする
・changeResutlの型をbooelanでなくint型とboolean型のフィールドを持つChangeResult型にする
・numをint配列にする
どれでも好きなのを。
> 戻り値取得以外の方法で取得する方法はありますでしょうか。
と考えること自体間違ってる可能性もあるけどね。
>>21 おおー! ChangeResult型いいですね! やってみます!
だから前スレ
>>904 の人はセッターゲッターロボとか言ってたのか……
25 :
デフォルトの名無しさん :2011/06/26(日) 17:26:55.91
以下のような処理を行おうと思っております。 ********aaa.txt******* abc def 123 456 このaaa.txtから全角スペースを排除し、排除した場合のみ前の行に統合、新たにbbb.txtに出力 *******bbb.txt****** abcdef 123456 実際に扱うテキストは1000行程度です。 BufferReaderクラスやPushBackReaderクラスなどいろいろ試してみたもののうまく処理できません・・・。 よろしくお願いしますm(__)m
>>25 「行頭に」全角スペースがあったらその行を前の行と統合するの?
123 の行は行頭に全角スペースがないから統合しないんだよね?
>>26 そうです。
行頭に全角スペースがあったときのみ前の行と統合という処理です。
その他の場合にはなんの処理も行いません。
説明不足ですみません><
28 :
24 :2011/06/26(日) 18:18:36.09
ChangeResult クラスを作って出来ました。 でもこれあまりやらない方がいいですね……。 setter や getter をたくさん使わなくちゃいけなくて、かなり見づらいコードになってしまった
Javaに未来はありますか?
>>25 Pattern クラスや Matcher クラス使えばできるんじゃね?
>>30 正規表現で処理した場合、Patterm.matcher()にテキストデータの内容を全て渡すことになるのでしょうか?
readLine()を用いて取得すると一行ずつの処理になってしまうためにうまく処理できないので困っております・・・。
32 :
25 :2011/06/26(日) 21:57:12.07
とりあえずコードを改めて書いてみたましたが思惑通りに動いてくれません・・・。 PushbackReader pReader = null; try{ FileInputStream fin = new FileInputStream("C://testJava//tmp.txt"); InputStreamReader iReader = new InputStreamReader(fin, "JISAutoDetect"); pReader = new PushbackReader(iReader); StringBuffer readBuffer = new StringBuffer(); int readSt, nextReadSt; for(int i=0; i < 40; i++){ readSt = pReader.read(); nextReadSt = pReader.read(); System.out.print("------------------------------\n" + (char)readSt + ":" + (char)nextReadSt); System.out.println(Character.getNumericValue(nextReadSt)); if(readSt == '\n'){ if(nextReadSt == '\u3000'){ System.out.println("1"); readBuffer.append((char)pReader.read()); }else{ System.out.println("2"); readBuffer.append((char)readSt); pReader.unread(nextReadSt); } }else{ System.out.println("3"); readBuffer.append((char)readSt); pReader.unread(nextReadSt); } } System.out.println(readBuffer.toString());
33 :
25 :2011/06/26(日) 22:03:39.55
あまりに見にくかったので多少修正しました。 なんで改行されないのでしょう・・・。 try{ FileInputStream fin = new FileInputStream("C://testJava//tmp.txt"); InputStreamReader iReader = new InputStreamReader(fin, "JISAutoDetect"); pReader = new PushbackReader(iReader); StringBuffer readBuffer = new StringBuffer(); int readSt, nextReadSt; for(int i=0; i < 40; i++){ readSt = pReader.read(); nextReadSt = pReader.read(); System.out.println(Character.getNumericValue(nextReadSt)); if(readSt == '\n'){ if(nextReadSt == '\u3000'){ //改行+スペースだったら readBuffer.append((char)pReader.read()); //スペースの次の文字の読み込み }else{ //改行のみ readBuffer.append((char)readSt); pReader.unread(nextReadSt); } }else{ //その他 readBuffer.append((char)readSt); pReader.unread(nextReadSt); } } } 実行結果 abc def 123 456
普通にreadLine()でやれば簡単だろ
>>25 Rubyとか使えば5行で書ける処理をわざわざJavaでやるかねー…。
ま、チラ裏だけど。
>>34 readLine()でやったけどできなくてread()使い始めたのに・・・(´;ω;`)ブワッ
>>35 チラ裏過ぎて泣きたい
>>33 Windowsだと普通は改行は\r\nだから\nだけ削っても\r残ってるんじゃね?
出力したファイルをバイナリエディタとか \r\n と \r の見分けがつくエディタで見てみたら?
正規表現使うなら、
String text = "abc\r\n" + " def\r\n" + "123\r\n" + " 456\r\n";
System.out.println(text.replaceAll("(\\r\\n|\\r|\\n)\u3000", ""));
ファイル全部読み込んでStringに変換する処理と
Stringの内容全部ファイルに書き込む処理は割愛。
>>37 うわああぁぁぁぁぁああ、まさにそれでした!
\rで場合分けしたらあっさり・・・w
キャリッジリターンですか・・・、いい勉強になりました。
正規表現使った処理のほうがやっぱりスマートですね。まだちゃんと使えてないのでこの後
一度書き換えていじくってみます!
解決感謝m(__)mありがとうございました。
>>33 バッファを使って一行ずつ処理する。
BufferedReader br = new BufferedReader(new FileReader(new File("aaa.txt")));
String s2;
String buf = null;
while ((String s = br.readLine()) != null) {
if (s.charAt(0) == " ") {
s2 = buf + s.substring(1) ;
//s2をファイル出力
}
buf = s;
}
42 :
デフォルトの名無しさん :2011/06/27(月) 11:55:23.92
43 :
デフォルトの名無しさん :2011/06/27(月) 20:59:19.72
昨日の
>>25 ですが、さっそく正規表現の勉強を兼ねていろいろ処理してみようと試行錯誤
していたのですが、新たにうまく処理できない壁に当たってしまいました。
現在次のような構造のテキストを処理していまして、それをうまく行うことができません・・・。
半角数字任意配列(要素数は7)(部分Aとします)+
文字列(半角全角英数漢字ひらがなカタカナ記号からなる)(部分Bとします)+
終了を示す任意文字列(フラグのようなもの)(部分Cとします)で構成されています。以下が例です。
**************************************
123,432,2,234,321,12,2 abc123あいう <終了>
2,234,13,54,222,1,566 ^q^あ うあうあー <終了>
**************************************
ですが実際の処理では部分Bの中に複数個の改行(/r/n)が入っております。
**************************************
123,432,2,234,321,12,2 ab
c123
あい
う <終了>
2,234,13,54,222,1,566 ^q^あ
うあう
あー
<終了>
**************************************
ただし、部分AとCの中に改行が入ることは絶対にありません。
この下の状態から上の状態への処理を行おうとregexを記述しているのですが
String regex = "\\d*,\\d*,\\d*,\\d*,\\d*,\\d*,\\d*" + "(.*\\r\\n)*" + "\\<終了\\>"
Pattern pattern = Pattern.compile(regex);
としてもうまく処理できません・・・。どのように記述すればうまく処理できるでしょうか?
お助けお願いしますm(__)m
メソッドにインスタンスを渡すってどんなんだっけ、 てっきりコンストラクタの引数で処理を切り替えるのかと
OpenJDK(IcedTea)についての質問ってここで良いのでしょうか?
LinuxでOpenJDKに自分好みのフォントを使わせたいと思っています。
/usr/lib/jvm/java-6-openjdk/jre/lib/fontconfig.properties.src
に、インストール元のファイルがあり、これを弄ればいいらしいのですが、
これに変更を加えず、別の設定ファイルで上書きできないかを知りたいのです。
ディストリビューション毎に設定ファイルの置き場所が異なるかもしれませんが、
どのディストリか教えていただければ自分でも応用できると思うので、誰かご存知の方いらっしゃったら教えて下さい。
SunのJDKでフォントの設定など国際化についての資料は、すぐ
ttp://java.sun.com/javase/technologies/core/basic/intl/faq_ja.jsp など見つかるのですが、OpenJDKについては、どのファイルでどのように設定すればいいのかというものが分かりません。
48 :
デフォルトの名無しさん :2011/06/28(火) 01:04:38.36
>>46 フォントマッピングの設定ファイルがfontconfig.properties.srcなんだから他の設定ファイルで変更できるわけ無いでしょ。
IcedTeaだろうがoracleのjavaだろうが方法は変わらんよ。
>>42 どっかで見覚えあるなと思ったら
俺が去年取ってた講義と課題内容一緒wwわろた
某スーファミキャンパスのオブジェクト指向プログラミングって授業
sfcでも馬鹿は居るのねえ。諭吉が泣いてるよw
そもそもsfcはそういうのばっかです
SFC は慶應じゃないから。SFC 大学。 SFC は優秀かダメかの二択なイメージがある
54 :
デフォルトの名無しさん :2011/06/28(火) 07:33:08.59
マルチスレッド環境において、synchronized で同期する必要があるのは、 どのようなメソッドですか? 自分が調べた限りでは、複数のスレッドで同じ変数を書き換える場合、 すなわちクラス変数が関わってくる場合という認識ですが、あっていますか?
クラス変数だけじゃなくて、同じインスタンスを複数のスレッドで使う場合も
SFCとIT専門卒は実質何が違うんですか?
synchronizedって重いの?
>>49 オブジェクト指向プログラミングの講座が3ヶ月経ってまだこんなとこやってんのかよ。
MITの学部生ならロボット制御への応用課題に取り組んでる時期だぞ。
課題使い回しかよいっそ先輩に聞きに行けよどのへんがオブジェクト指向なのよまさかオーバーロードの練習?
バカって言うとバカって言う
日本から見るとMITの学部生がロボット制御の課題に取り組むのは凄いことなんですか?
占いもロボット制御と同じぐらい凄いと思うから安心しろ。 実学志向のMITがロボット実習に力を入れてるのは昔から有名だからなー。 日本のロボットコンテストのほとんどはMIT講座のパクリ。 導入教育のSICPの評判が悪すぎてPythonに切り替えたって噂は本当?
馬鹿乙
>>63 占いって…!
>4のはあらかじめ与えられたアルゴリズム使って乱数発生させて、数えるだけ、
小学生が最初に作るサイコロゲームみたいなもんだろ。
自慢出来るのが唯一学歴だけなんだろ 相手にするな
JavaでMidiファイル再生時にMidiのみの音量を調整したいのですが 何か方法はないでしょうか?できれば再生中のものの音量を変更できればうれしいです。
socketchannel connect ブロッキングモードでタイムアウト設定する方法はないのでしょうか?
69 :
デフォルトの名無しさん :2011/06/28(火) 20:05:07.71
メソッドをオーバーライドしたり、抽象メソッドを実装する際、 アクセス制限を緩くすることは出来ても厳しくすることは出来ませんよね? 例) 元メソッド: abstract void method(); 実装NG: private void method(); 実装OK: public void method(); これは何故でしょうか? 緩く出来てしまうと、アクセスして欲しくない外部からもアクセス出来てしまうような実装になった際、マズイと思うのですが。
>>69 オブジェクト指向言語のアクセサはセキュリティのために用意された物ではありません。
それを説明したC++の本があったと思うけど、書名が思い出せないorz
>>55 ありがとうございます。
つまり、複数のスレッドで変更する変数(インスタンス含む)がある場合ですね。
留意して実装します。
>>69 親が出来ることは子も出来なくてはならないから。
>>69 >>72 レスありがとうございます。
>>69 C++ですか。そっち方面の情報も調べてみます。
>>72 ポリモーフィズム等を考慮して、という事ですよね。
その場合ですとアクセス制限を厳しく出来ないようにするという事の理由は通るんですが、
アクセス制限を緩くしても良い理由がいまいち分かりません。。
緩くしちゃいけない理由がないから C#だとバージョン管理上の理由で逆に厳しくできて緩くはできなかったりするけどね 厳しくしてもスーパークラスの型にキャストすれば呼べるからポリモーフィズムが使えなくなったりはしない
75 :
74 :2011/06/28(火) 23:32:28.19
スレチだけどC#で厳しくできるのはインターフェイスメンバを実装する場合だけだったので訂正 緩くするのは、たとえばオーバーライドするんじゃなくて public void method1() { method(); } のようにしても、 外部からアクセスできるようになってしまうのは同じなわけで、そこはサブクラスを作った人の責任。 C#で緩く出来ないのもスーパークラスに仮想メソッドが追加されたときの誤動作を防ぐとかそこらへんのポリシーがJavaより厳しいからで アクセス制限の話とはあまり関係ない。
クラスの継承を行って子クラスのインスタンス化を行うときの話なんですが、 親クラス型の変数にそのインスタンスを代入する場合と子クラス型の変数にそのインスタンスを代入する場合、何か違いがあるのでしょうか?
>>76 言ってることがよく分からないけど、
1人の親に子供が2人いる場合を考えてみるとどうだろう。
>>73 「リスコフの置換原則」でググると理解が深まるかも。
> アクセス制限を緩くしても良い理由がいまいち分かりません。
親ができないことを子供ができることについては問題ない…というか
それこそがextendsという言葉が表している機能の"拡張"そのものでは。
確かに頻繁にやるようなことではないと思うけど。
>>76 親子関係にあるクラスのメソッドとフィールドを親子共通のものと、子で追加したものに分けて、列挙して考えてみると良い
(図で表現してみるとなお良い)
>>48 なんでそう思ったの?知らないならレスしなければいいのに。
>>46 ちょっと調べてみて、根本的な解決方法じゃないけど、
-Dsun.awt.fontconfig=/path/to/font.propertiesで自分の設定を読みこめる。
このプロパティをどんなときでも起動時に読みこむファイルに記述すれば、全環境でこの設定が有効になる。
ただ、そんなファイルがあるかはもっと調べないといけない。俺は力尽きた。
>>76 Oya obj = new Ko();
Ko obj = new Ko();
この2つの違いについて、って事?
実体はどちらもKoオブジェクトだけど。
上についてはOyaクラスのオブジェクトとして振舞える(Koクラスのみに定義してあるメソッド・メンバは使えない)。
下についてはKoクラスのオブジェクトとして振舞える。
82 :
69 :2011/06/29(水) 02:15:04.39
>>74 >>78 レスありがとうございます。
"拡張"という考えなわけだから制限を緩くすることにそもそも問題無い、ということですね。
>>78 類似の質問かも知れんけど、
セッターやゲッターを使うことは
開放/閉鎖原則に反するような気がするんだが、
そうなん?
なんでそう思ったの?知らないならレスしなければいいのに。
勘違いしてる人も多いみたいなので(
>>85 がどうなのかはわからんが)書いとくけど
OCPの「閉鎖」と、オブジェクト指向の「隠蔽化」って全然意味違うから。
それを踏まえた上で
>>85 の疑問に答えると、
OCPの「閉鎖」は既存のクラス(今の文脈では親クラス)について言及してるのであって
新しく追加したクラス(子クラス)については何も言っていない、と思うんだけど(むしろ開放されてるという意味では原則通り?)
どうだろう。
>>89 セッター&ゲッターで、オブジェクトに直接書き加えることができるから
クローズドではないと思うけど。
C言語はVisulStudioみたいな開発環境があるんだが Javaではなんてソフト使うといいんだ? Boland入れてテキストエディタでソース書いてbccコンパイル みたいな感じしかJavaには無いのか? スレチだったらスマソ
eclipse
95 :
デフォルトの名無しさん :2011/06/29(水) 15:26:36.01
なんかjavadoc見れないんだけどこれ俺だけ?
sunはなくなりました。
sun.comは100万ドルで売りに出されてたはず
>>103 またそんな嘘をさらっと…
日本だけみたいよ、つながらないの。
>>80 それはフォント構成ファイルを指定する方法であってそのフォント構成ファイルがfontconfig.properties.srcだ。
フォント構成ファイルにはフォーマットが2種類。ファイルが3つあってVMが最低限持ってるfontconfig.bfcと
環境が読み込むfontconfig.properties.srcがデフォルトでロードされる。
もう一つユーザー定義用にfontconfig.propertiesがあるが
>>46 の聞き方ではこれらのフォント構成ファイル以外に設定ファイルがあるかと聞いていることになる。
つまりそんな設定ファイルはない。あと、上書きできるかについてもフォント構成ファイルをどう使うかはVMの実装依存なんで上書きできる保証はない。
6.0以上ならAPIからフォントマッピングをいじれるが先に言ったとおり実装依存。
javaは環境依存になるから原則的にフォントマッピングはいじらせない。
フォント構成ファイルがあるのは環境依存の問題を自ら解決させるためで好きなフォントを割り当てるためじゃない。
好きなフォントを使いたいなら1.5以上でプログラムコードから物理フォント割り当てるしかない。
フォントマッピングと物理フォントの割り当ては別の問題でAPIが違うし方針も違う。
もうひとつ、デフォルトフォントそのものを書き換える方法があるがそもそもデフォルトフォントは一部の国しか用意されてない。
日本語のデフォルトフォントはない。javaのフォント周りは環境依存の対策と歴史由来の理由で色々な解法があるが結局は実装依存だ。
わかったら無知は黙ってろ。
業務でなんでDL版をっ確保しないのかっ!
ドイツやオーストラリアでも困ってるらしいぞ、java.sun.com ソースはtwitter オンラインドキュメントなんかどうでもいいんだが、 XML文書のDTDとかスキーマとか大事な情報一杯抱えてなかったっけjava.sun.com...
>>106 >フォント構成ファイルにはフォーマットが2種類。ファイルが3つあってVMが最低限持ってるfontconfig.bfcと
>環境が読み込むfontconfig.properties.srcがデフォルトでロードされる。
マジでソースも読めないのな。fontconfig.properties.srcは誰も読みこまない。fontconfig.bfcをリネームしてみろ。
>もう一つユーザー定義用にfontconfig.propertiesがあるが
どこに?~/fontconfig.propertiesとか?それともsun.awt.fontconfigで指定するファイルのこと?
>あと、上書きできるかについてもフォント構成ファイルをどう使うかはVMの実装依存なんで上書きできる保証はない。
いつの間にかOpenJDKとIcedTeaの話を脱線させているあたり、コミュ障の匂いがするな。
VMの実装依存とか言ってるくせに
>>48 みたいな言い切りもするし。どこに依存するのか一度でも確かめてみたことあるの?
fontconfig.propertiesを読み込むランタイムでは、VMで読んでいるのか標準ライブラリで読んでいるのか本当にご存知?
能無しというよりコミュ障だな。自分で勝手に論点を広げたり狭めたり。それともそれが処世術?
BufferedReaderの入力を使って打ち込んだファイル名と同じファイル(テキストデータ)を読み込んでそれを表示するっていうプログラムなんですけど、もしファイルが見つからないときの例外処理はどうやったらできますかね?
>>111 その記事に書かれてる参照先の公式ブログに行ってみそ
「間違っちった。恥ずかしいから妻には言わないで///」
みたいなことが書いてあるお
>>111 リンク先で「嘘。java.sun.comは今後もHTTPリダイレクトで運用していきます」、
とOracleが嫁の反対を押し切って謝罪しているな
java.sun.com関連のトラブルの質問を先取りしてエスパー回答しておくが、
XML関連の外部リソースをローカルファイルやJAR内のリソースに自前で
リダイレクトするのは org.w3c.dom.ls.LSResourceResolver や
org.xml.sax.EntityResolver の役目だ。
わかりました。
>>98 あたりからのレスでOracleサイトがおかしいのは分かりましたが、
”現状”で、Javaの日本語ドキュメント一式をDLする方法って分かりませんか?
117 :
デフォルトの名無しさん :2011/06/30(木) 11:18:30.31
ByteBufferに書き込まれたバッファをクリアするにはByteBuffer allocateで初期化するしかないのでしょうか?
>>117 ・「書き込んだからさあ読め」な場合はflip()
・「読んだからさあ続きを書け」な場合はcompact()
・「全部消したんで最初からまた書け」な場合はclear()
バッファの内容をクリアしたいなら、 Arrays.fill(byteBuffer.array(), byteBuffer.arrayOffset(), byteBuffer.arrayOffset() + byteBuffer.capacity(), 0); とか、put で上書きするか。
120 :
117 :2011/06/30(木) 11:44:53.47
>>121 ,122
たすかります。有難うございました
124 :
デフォルトの名無しさん :2011/06/30(木) 16:45:56.74
とりあえず今のところGoogleのキャッシュで事足りてるが
125 :
デフォルトの名無しさん :2011/06/30(木) 17:22:19.91
String s1 = "abc"; String s2 = "abc"; s1 == s2 はなぜ真になるのでしょうか? equalsとかで真になるのは分かるのですが。
new String("abc") == new String("abc") は偽になる new String("abc").intern() == new String("abc").intern() は真になる 定数式の値がString型の場合(文字列リテラルとか)は言語仕様に則って、intern()されなければならない。
Tomcat 7.0 + ServletでIEでのファイルのダウンロードの処理なのですが while ((contents = inBuffer.read()) != -1) { outBuffer.write(contents); } の.write()の行で下記のエラーが発生します。 ClientAbortException: java.io.IOException at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:369) at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:327) 何か予想できる原因がありましたら教えてください。
JBuilderってまだあんの?
なんで、Javaってダブルクリックイベントがないの?
トリプルクリックイベントとか、クアドラプルクリックイベントとか、クインティプルイベントとか とりあえず、10個くらい用意しておけばOK?
>>130 OK!!ついでに、JBuilderも用意しといてあげて!
よしちょっと作ってくる
>>127 ダウンロードダイアログのキャンセルボタンでも押しちゃったんじゃね
同じぐらいの位置のクリックを好きなだけ好きな間隔でカウントしとけ
void inputCellByYou(int[][] board) { while (true) { int x = getInput("行", board); int y = getInput("列", board); if (canPut(board, x - 1, y - 1)) { board[x -1][y - 1] = 0; break; } JOptionPane.showMessageDialog(null, "(" + x + " " + y + ")には置けません"); } } これを実行すると入力した行と列が反転されて入力されてしまうのはなぜでしょうか? getInputは入力された値を返すだけのメソッドです。
わかりません 何を見て「反転されて入力されている」と思ったのか教えてください
137 :
135 :2011/07/01(金) 02:00:29.84
分かりにくくて申し訳ない ○×ゲームを作っているのですが、どうも入力した行と列が反転して表示されてしまいます 2次元配列の行と列のつけ方は数学の行列と反対なのですか?
>>137 君が行と列を逆に考えているんでしょう。
行が増えればどちら方向に増える↓ or →
列が増えればどちら方向に増える↓ or →
>>137 何かベクトル計算とかするっていう問題じゃないから、数学の行列との違いを考える必要はないんじゃないか。
自分のプログラム全体で、どっちが行でどっちが列なのかが統一されていないのが原因だと思う。
boardの表示用の関数と、入力用の関数とでおそらく行と列が違うのでは。
個人的には盤面を直接二次元配列で表現すると、こういった頭に入れなきゃいけない決まりごとが増えて混乱するから、
Boardクラスを作ってput(row,col,value)とget(row,col)メソッドを用意してデータの隠蔽をしちゃいたくなる。
「配列の配列」以上の何者でもないんだからどう使おうが勝手 そりゃboard[x][y]で入れたら出すときもboard[x][y]で出さないと逆になるわな 普通はアクセスの効率を考えて連続アクセスする方を後ろのインデックスに持ってくるんだが この場合はどっちでもいい
>>138 >>139 ご回答ありがとうございます
配列を文字列に変換する部分で列と行が逆になってました
>>133 ありがとうございます。
ブラウザのキャンセルボタンを押したときはSocketExceptionが
発生してくれるので微妙に違うようです。
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
javaのヘルプの見方を教えてください 例えばファイルに書き込み・読み込みをする場合、どのページからどのようにたどっていけばいいのでしょうか?
クマー
unnti
何故javaにはvarがないんですか?
そういう話はあるけど、コミュニティ主導になってからというもの、言語を拡張したくても全く議論がまとまらなくなってしまった 次期バージョンではdiamond operatorとかいうカスみたいなのが入るとか入らないとか
javaアプレットでCGやフォンシェーディングについて言及された初心者向けの本はありませんか? importが多くあることや最初のextendsという所も分からない状態です。 今の自分のレベルとしてはjavaの入門書を終えたレベルだと思います。
importもextendsも説明しない入門書・・・
web.xml について質問です。 @のように <servlet-mapping> のタグがある意味がわかりません。 なぜAのような構造になっていないのでしょうか。@は冗長に感じられます @一般的な web.xml(一部) <servlet> <servlet-name>HelloServlet</servlet-name> <servlet-class>minicar.HelloServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>HelloServlet</servlet-name> <url-pattern>/hello</url-pattern> </servlet-mapping> A無駄を省いた(?)web.xml(一部) <servlet> <url-pattern>/hello</url-pattern> <servlet-name>HelloServlet</servlet-name> <servlet-class>minicar.HelloServlet</servlet-class> </servlet> 以上、よろしくお願いします
お断りします
>>149 importもextendsも入門書に書いてますので、入門書読み終えたレベルですらありませんね
無礼な!ワシはまだ80ぢゃ!
だめじゃん。 俺は永遠の25歳だwww
ゆとりってさ、就職難とかなんだとか言われてどこにも就職できなくてそのうちニートになっちゃうんでしょ?
俺は就職できるかどうかは外見と話術と時の運で決まるものだと思ってるので ゆとりと就職難はあまり関係ない気がするんだ
ゆとりろは関係あるだろ
特定の誰かに名指しで聞いてるようにも見えないが 答えが欲しい相手に何か条件があるのならそれは明記した方がよい
>>163 「お前には聞いてない」
大事なことなのでもう一度書き込みさせて貰いました
じゃあ俺に聞いてくれ
反抗期とか懐かしいわ
>>168 あるクラスからメソッドを呼び出すときと同じ使い方
Mathクラスのabs(int a)メソッドを呼び出すって考えるといい
>>152 1つのサーブレットで複数のURLパターンを割り当てたい場合にも対応できるから。
>>172 ありがとうございます。そんな場合もあるんですか……。
もしできれば、例などをいただけると嬉しいのですが……
どっちみち*.doで指定するし
175 :
172 :2011/07/02(土) 21:17:29.74
すまん、質問の回答になってなかった。 servletはアプリの定義に関する要素。 言ってみればWebコンテナの内側の世界。 URLはWebコンテナの外側の世界。 内と外をどうマッピングすればいいかWebコンテナに教えるのが servlet-mapping。 仕様を考えた人は、コンテナの内と外のパラメタを一つの要素の 中に混在たくなかったのだろうと解釈してる。
>>173 同じサーブレットを動かす場合でも、URLによって適用するフィルタを変えたいとか
認証する/しないを変えたいとか。
オレはWebアプリ屋ではないので、実際どう使ってるかは知らない。
voidを意味するClassオブジェクトを取得する簡単な方法は無いでしょうか? またClassオブジェクトがvoidを意味しているかをチェックするには clazz.getName().equals("void")以外に何か無いでしょうか. よろしくお願いします
void.class if (clazz == void.class)
clazz == java.lang.Void.TYPE とか
>>179 初めて知りました!!
ありがとうございますー!
>>180 こんなところに定数が・・・ありがとうございました
>>173 余談だけど。
APサーバによっては、固有の定義ファイルでURLごとにスレッド数を割り当てることもできる。
(URLを一般会員用とプレミアム会員用に分けるとか)
そんな場合にもマッピングの複数指定は有用かと。
Webアプリケーションのviewを作るときにヘッダ、メニュー、フッタ等 それぞれパーツごとに作るためには何を使えばおk?JSPじゃ無理だよね。 たまたまTilesとかいうのを見つけたけど、日本語情報無いからハードル高くて。
jspインクルードでいんじゃね。
Java印刷API
188 :
デフォルトの名無しさん :2011/07/03(日) 14:17:13.91
Javaの例外(エラー)を簡単なテキストファイルに残しておきたいんですが、 自分で例外の出力を整形して、テキストファイルに残すのが一般的なのか Log4jというのを使うのが一般的なのか・・・ 自分、Javaの実務経験がないのでこまっております。どっちがいいんでしょうか?
log4j はオワコン slf4j + Logback を使え
190 :
188 :2011/07/03(日) 14:30:02.78
>>189 どうもありがとうございます。
それを使ってみます。ありがとう。助かりました。
正直オワコンとか95割とか使ってみたかっただけだろ ってカキコが最近多すぎてうんざりするよね
ググって調べれば分かるのに 挑発して詳細を聞き出そうとするカキコが 最近多すぎてうんざりするよね
汚水でも飲んでろ??????????????????????????????????????????????? 死ねゴミ
2011年になっても未だにJAVA使い続けてる奴ってさ 仕事で仕方なくならわかるけど 家でもJAVAやってるなら本当にバカだよね。哀れ ゴミなんだから早く死んだほうがいいと思う
200 :
デフォルトの名無しさん :2011/07/05(火) 16:33:28.27
会社から休業命令が出ている俺の唯一の楽しみは、このJavaスレを2時間に一度くらい ROMることなんですけど。 ここ2,3日、一方的に建設的なレスが進みません。 みなさん、もっとがんばってください。
201 :
デフォルトの名無しさん :2011/07/05(火) 16:35:17.67
サーブレットはおもしろいけど、めんどうなこともたくさんあるんだな〜。
どうして休業命令なんか出たんですか?
仕事がないというか、私の行く先が全然ないからです。平たく言うと、 自宅待機です。
>>205 え?web.xmlとか、Ajaxとかフレームワーク回りが自分はめんどくさいです。
まあ、慣れの問題なんでしょうけど。
リフレクション機能はオブジェクト指向言語ではご法度的なことをよく本とかで言われますが、 実際のところ開発ではばんばんリフレクション使っていたりするんですか
>>207 業務アプリでは使うことほとんどないんじゃない?
アプリが利用しているフレームワークやAPサーバではガシガシ使われてるだろうけど。
あと、セキュリティとかさあっ! 文字列照合して、正規表現とマッチかけるとかさあっ! めんどくさいことだらけだもんっ!
212 :
デフォルトの名無しさん :2011/07/05(火) 20:20:42.03
Failed to create ASP object For:RScheck.asp というエラーメッセージが出て特定のページが表示されないのですが、改善方法はありますでしょうか? 窓7でIEです。
それはサーブレット云々というより、Webアプリの宿命では?
214 :
213 :2011/07/05(火) 20:24:21.30
>>207 リフレクションのおかげでプロジェクトがポシャッたケースなら社内の別の課であった。
コーディング規約で実装におけるリフレクションの禁止令が発令された。
>>215 なにやらかしたー。privateメンバへ強引にアクセスしてカプセル化がパーになったとか?
HashMapクラスのputメソッドでキーが異なる多数の要素を追加したとき、 衝突が発生した場合はどうなりますか? 単純に上書きされてしまいますか? それとも、再計算して別の領域に格納されますか? 自分で試していますが、なかなか衝突しないので、答えを知りたいです。
キーが異なったら衝突しないのでは? ここで言う「衝突」ってなんだろ?
ハートはもう気ままに・・・
>>219 要するに、値が上書きされてしまうことです。
もし異なるキーで発生するとなると使い勝手が難しいです。
>>221 キー(要素を区別するためのインスタンス)が異なるんだろ?
223 :
221 :2011/07/05(火) 22:42:46.62
例えば、"hoge"というキーで値を追加したところが、 別の"hoge2"というキーで値を追加したことで上書きされたら困る訳ですよ。 値が失われますからね。
>>218 一般的にハッシュ法と呼ばれてるものと同じ。
つまり検索速度が落ちる。
>>222 はい、キーは異なります。
キーが異なれば大丈夫と言う認識でよいのでしょうか?
それとも稀でも上書きされるのでしょうか?
それがとても気になっています。
ぶつかってかつキーが違うなら、別の場所を使うだけだ
>>219 シノニムが発生した場合の事いってるんじゃね?
>>225 >キーが異なれば大丈夫と言う認識でよいのでしょうか?
そのための「キー」だ。
>>218 新旧キー同士のequals()が真にならない限り、上書きは絶対にありえないから安心しろ。
※ただしnullキー同士は上書きになる。
うそ、大ボケこいた。
HaspMap.javaを覗いてみた。 新旧のハッシュ値が同じで同じインスタンスを指すか、新旧のequals()がtrueの場合に書き換えられるようだ。
たくさんのレスありがとうございます。
>>224 速度を重視したい場合、マップの初期容量を大きくすればある程度マシになりますよね。
>>226 それなら安心です。
データの消失が最も恐ろしいので。
>>227 ハッシュの場合、コリジョンではなくシノニムというのですね。
すみません、言葉を知らなかったです。
>>228 キーをハッシュした値が被ったときの動作が気になっていました。
>>229 難しい言葉が出てますね・・・;
すでにあったら順繰りにってことでしょうか。
>>230 データ消失がなければ安心して使えますね。
>>233 equals による比較が行われているのであれば、
異なる文字列をキーにしている限り安心ですね。
とても勉強になりました。
ありがとうございました。
後学のため、シノニムについて調べてみます。
あと、HashMap.java を分かる範囲で覗いてみます。
>>234 最初からソース見て回答してればここまで伸びることは無かったのにと
反省してます。
HashMapのソース初めて見たけどシノニムは普通のリンクリストで教科書的な実装なんだな メモリアクセスの効率を考えるとエントリはオブジェクトにしないでガバッと配列にメモリ取って インデックスで管理した方が速そうだけど
237 :
デフォルトの名無しさん :2011/07/06(水) 09:29:47.80
Stringについて質問です。 なぜ、Stringでは同じ領域の値が変更出来ないのでしょうか? APIに、値が変更出来ない、と書いてあるのでそれ自体はいいのですが、理屈を知りたいです。
>>238 単なる設計上のテクニックだよ。
「immutable」や「不変オブジェクト」でググればいろいろと解説はあるはず。
何この糞っぷり?w
リフレクションについての質問です。 以下のような実装を行った場合、これはリフレクション機能を使用したことになるのでしょうか? MyContainer+ <T> void put(Class<T> type, T value) MyContainer+ <T> T get(Class<T> type); -------------------- String s = "str"; Integer i = 10; MyContainer container = new ...; container.put(String.class, s); container.put(Integer.class, i); ... String ss = container.get(String.class); Integer ii = container.get(Integer.class); どの機能がリフレクションを利用しているかがいまいちわかりません。
リフレクションっつーかgenericsじゃね? java.lang.Class自体はリフレクションの一部っちゃ一部だけど。
リフレクションはこういうのだ public static void show(Object obj){ System.out.println(obj.getClass() + ", " + obj.toString()); Method[] methods = obj.getClass().getMethods(); for (Method m : methods) { String name = m.getName(); if(m.getParameterTypes().length==0 && name.matches("^(get|is|can|length).*$"){ System.out.printf(" %-20s : %s\n", name, m.invoke(obj, new Object[]{})); }}}
いやobjcだろ。これからは。
246 :
242 :2011/07/06(水) 22:46:22.68
返信ありがとう御座います。
>>243 さん
Classクラスの実装を読んでみましたがやっぱりリフレクション使ってるみたいですね。
>>244 さん
String.classとか使用するのはリフレクションの一部だという認識は間違っているのでしょうか?
上のコンテナと普通のString,Objectペアのコンテナを作って速度を比較したところ上のコンテナが3倍遅い結果になってしまいました。
クラスリテラルはString.classのときClass.forName("java.lang.String")の結果と等価らしいのでリフレクションみたいです プリミティブ型のラッパーのInteger.classはInteger.TYPEへのフィールドのアクセスと同じなんで遅くならないっぽいです
Classや.classを使ったからと言ってそれをわざわざ「リフレクションを使ってる」とは言わんと思うぞ。
sql = "SELECT * FROM テーブル名 WHERE "+s[1]+s[2]+……+s[i]+""; sの配列の要素数に応じて↑のような感じで打ちたいんですがどういうふうに書けばいいですかね?
ありがとうございます試してみます
252 :
251 :2011/07/07(木) 09:43:59.06
すいませんfor文で回そうとしてもどうやるのかわかりません教えてもらえませんか?
>>252 こんな感じ
sql = "SELECT * FROM テーブル名";
int youso = 0;
for(i=0; i<s.length; i++) { youso++; }
if(0 < youso) sql += " WHERE ";
if(youso == 1) sql += s[0];
if(youso == 2) sql += s[0] + s[1];
if(youso == 3) sql += s[0] + s[1] + s[2];
………
↑以下必要な分だけ適当に増やす
youso == 100ぐらいまであれば安心
なるほど!結構力技なんですね!ありがとうございます!
ごめんごめん ちょっと訂正 × for(i=0; i<s.length; i++) { youso++; } ◎ for(int i=0; i<s.length; i++) { youso++; }
for (String a : s) { sql += a; } だろJK
>>253 お前様の
>>249 に対する”意図”ってのは分かったけど、
もう少しうまい組み方ってあると思うぞ
なんか、お前様の方が無様に見えるぜ
258 :
251 :2011/07/07(木) 10:09:19.35
sql += "SELECT * FROM wh_table WHERE "; for(int i=1;i<s.length;i++){ sql+=s[i]; } お二方の共試したんですが、だめでした。↑のも試してみたんですがだめでした。java.sql.SQLException: near "nullSELECT": syntax errorとでてるんですがどこがおかしいのかわかりません・・・
どんだけ考える気がないんだよw さては、ゆとりか
260 :
251 :2011/07/07(木) 10:17:24.30
かいけつしました・・・
>>258 の1行目の+=の+を削ったら出来ました。みなさんありがとうございます
>>257 お前
>>249 だろw
ググれば3秒で分かる質問してっから遊ばれてんだよ
ってかJava無関係なアルゴリズムの質問はスレチ
ふざけた回答ながらもfor文のヒントを提示してもらってる事にも気付けないなんて、無様だぞ
スレチうんうんはともかく、
結局修正レスまでした
>>253 がスルーされた件について
無様
なしさま・・・??
じゃぁ、おれも!
269 :
242 :2011/07/07(木) 15:30:48.79
>>247 さん
貴重な助言ありがとう御座います。すっきりしました。
>>248 さん
確かにその程度の利用だとリフレクションと言い難いかもしれませんね。
遅くなりましたが返信してくれた方々ありがとう御座いました。
俺もw
いや。おれおれも
どうぞどうぞ
273 :
デフォルトの名無しさん :2011/07/07(木) 17:54:03.71
JFileChooserでファイルを保存するダイアログとか開くと カレントディレクトリ(Windowsの場合だとMyDocument/Linuxの場合ユーザのホームディレクトリ) がデフォルトで開くみたいですが、そのカレントディレクトリのパスを取得するには、どうしたらいいんですか?
"." ファイルでオブジェクト作ってパス取りだすとか。 ルートでも行けるのかは試してないが
System.getProperty("user.home") たぶん。
System.getProperty("user.dir")
277 :
273 :2011/07/07(木) 18:05:37.86
どうもありがとうございました。 import java.io.*; public class Sample1J { public static void main(String[] args) { System.out.println(System.getProperty("user.home")); String sPath = (new File(".")) .getAbsoluteFile().getParentFile().toString(); System.out.println(sPath); } } 試してみたところ、 C:\Documents and Settings\hogehoge C:\Program1\java となりました。 どうも、System.getProperty("user.home"); で、いけるみたいです。 みなさん、どうもありがとうございました。できるんですね、こんなこと・・ OSを取得してJNIとかつかおうとおもっていました。。
学習はじめて半年ですが クラスライブラリのコードを読むのって 勉強にいいでしょうか? たくさん読めと言われていますが
>>277 ごめん、正解はたぶんこっち。
javax.swing.filechooser.FileSystemView.getFileSystemView().getDefaultDirectory()
読むならクラスライブラリよりアプリケーションのソースの方が勉強になると思う クラスライブラリって特定目的の細かい実装コードの寄せ集めみたいなのが多いから その特定目的についての勉強でないならお勧めしない
>>278 たくさん読めって言われてんだからクラスライブラリもフレームワークもアプリケーションも読め。
質問してる暇があったら読め。
>>281 ありがとうございます。
その中でオススメとかありましたらご教授
お願いします。
別に読まなくていいのに
284 :
277 :2011/07/07(木) 18:33:23.15
>>279 へぇ・・こんなものもあるんですね。
それにしても、
>>279 さん、よく知ってますね(;^_^
>>282 JDKに入ってるsrc.zipの中身。
それこそ>特定目的の細かい実装コードの寄せ集め
いや、java.lang, java.util, java.io あたりは基礎だろ。 英語だけどコメント豊富なのと、細かいコードを切り分けて読めれば 一つ一つのコードは短いので初心者向きだし。
標準ライブラリに入ってるのは世界中の全てのアプリケーションが使うため パフォーマンスの名目でごにょごにょするのが、相対的に、より正当化される。 通常はアンチパターンと呼ばれるような、 無条件でマネしてはいけない痛いことをしているかもしれない。
290 :
デフォルトの名無しさん :2011/07/07(木) 23:38:23.21
Windowsで作成したプログラムはLinuxなどで文字化けが起こりますか?
起こるかもしれないし、起こらないかもしれない。
>>292 言い直し。
デフォルトのエンコーデイングと異なるエンコーデイングのデータを扱うなら、意識した実装しないと化ける。
で、どういったデータを扱おうとしてるの?
クラスのシリアライズ・デシリアライズで質問です。
AというクラスとBというクラスのフィールドが全く
同じだった場合にAをシリアライズしたものをBに
デシリアライズする方法が必要で、こちらについては
デシリアライズの際のObjectInputStreamの
readClassDescriptorをオーバーライドしてクラスを変換
することで実装することができました。
http://ideone.com/qquLQ しかしArrayList<A>をシリアライズしたものをArrayList<B>
にデシリアライズする方法で詰まっております。
何か方法をご存知でしたらご教授下さい。
Windowsでgitをインストールしている環境なのですが、 JFileChooserをインスタンス化した際に、 fatal: Not a git repository (or any of the parent directories): .git というメッセージがコンソールに出ることに気づきました. 実際にJFileChooserで表示されるダイアログでディレクトリを移動したりすると、 さらに上記のメッセージが一回ずつ表示されます. 実害は無いのですが、どうしてこうなるのでしょうか?
>>294 同じObjectInputStreamのサブクラスを使えばいいんじゃね?
>>296 同様の方法ですと
desc.getName()の箇所がjava.util.ArrayListまでしか取れず
ArrayListの中に保持している型までは取れないのです。
ArrayListのデシリアライズ時に内部処理で各要素に使う
ObjectInputStreamが設定出来ればとも思うのですが、方法が
わかりません。
298 :
295 :2011/07/08(金) 13:57:29.09
自己解決しました。 readClassDescriptorはArrayListそのものと 内部メンバの型情報取得時両方について呼ばれる みたいなので、同じやり方でいけました。
swingで、プログレスバーを右から左に伸びるようにしたいのですが、 どのようにすればできるでしょうか。
301 :
デフォルトの名無しさん :2011/07/09(土) 10:13:57.61
皆さんJAVA歴 何年ですか? そして、プログラムを好きでやっていますか? 給料が良いからですか? 参考にさせてください! よろしくお願いします!
今のクロージャーの仕様って Scala や Ruby みたいにブロックは書けるの?
プログラム歴は25年でJava歴は10年で給料は年収700万で プログラムは好きで土日もフリーソフトをつくってます。
304 :
デフォルトの名無しさん :2011/07/09(土) 10:37:50.71
>>303 ありがとうございます。
休みなくやってる感じですね!
好きじぁないとやれない世界ですか?
それか働いていくうちにやりがいを見つける世界ですか?
ブロックに何を期待してるのかによる
StringBuffer の charAt ってなんて読むの? キャラアット? キャラエーティー? キャラット?
AH(IPsec) : あー C++ : しーぷらすぷらす IEEE : あいとりぷるいー ext2 : えくすてんど に DoS Attack :どすこうげき まあ、読み方なんてどーでもいい
310 :
デフォルトの名無しさん :2011/07/09(土) 12:52:03.36
>>301 プログラム歴10年。Java歴10年。Javaから入り、他の言語やコンピュータの構造なども勉強しました。
最初は仕事でやっていましたが、その頃は苦痛でした。
しかし、やめたあとも趣味というか暇つぶしでやっていて、最近おもしろくなりました。
すっごいくだらいことですが、 ArrayListにtrimToSize()ってのがあるってことは、remove()してもサイズが変わっていなかったりするってことでしょうか?
>>311 ArrayList#size() の戻り値は呼び出しの前後で変化するが、
内部で使用している配列はそのままだったりする。
>>309 reportの一覧性のために使う…とか?
>>312 どうもありがとうございます。
trimToSizeはメモリの節約のために使うってことで良いんでしょうか?
ブロック・レズナー! Here comes the pain!!
>>313 レスありがとうございます。
すみません。reportの一覧性とはどのような意味でしょうか
hostsを編集せずにvm上での通信のホストを、任意のipに向かわせる方法ってない?
>>317 たとえば、コマンドラインで、
java Hoge -ip 192.168.0.29
とかでもいいの?
proxy設定しろ、 という話ではなくて?
>>317 java.net.Socket#setSocketImplFactory()
でオリジナルのソケット実装使わせることができるぞ。
URLアクセスに特化した話なら
java.net.URLConnection#setContentHandlerFactory
でも十分だと思うが。
GZIPInputStreamみたいなGzipのオープンソース実装ってないでしょうか? AppEngineでGZIPInputStreamを使った実装で解凍を行うと、 PC上の環境とAppEngine上で違う動きをするので、 (PC上だと正常に解凍できるが、サーバ上だとエラーになる) GZIPInputStreamの別実装を探しています 具体的には、Gzipされたものを解凍したいだけです。 よろしくお願いします。
DOMってもう使われなくなるの?
>>322 なんで? JAXBやStaxと違って他の言語と共通の仕組みであることが利点だよ。
僕の質問:
EJBコンテナ(セッションビーン)を何に使うのかわからないんですけど、
Apache+Tomcatがhttpリクエストの分散に対して
EJBはWeb(http)とは関係ないRMI(ロジック部分の分散)ということで
あってますか?
EJB鯖がロードバランサになり、他のEJB鯖がロジックを振り分けられる
ノード鯖になる、と。
>>323 ・インスタンスプール
・メソッドごとに権限設定、トランザクション制御
・属性指定によるトランザクション制御
・負荷分散
かな。これらを利用しないのであれば、面倒なだけの代物。
javaをEclipse使って書いているのですが、 バグ検索を使用してみると、同期化が考慮されていません。といった項目が出てきます。 80%がロックされている間ウンヌン これって特に気にせず無視してもいいのでしょうか? 無視しなかった場合、どういった処理を追加すべきでしょうか? ググっても何いってんだこいつ状態で、全く分からない
synchronizedをすべて削除 もしマルチスレッド使ってるならやめる その意味がわかんないならそのほうがいいよ
>>326 とほほを流し読みにして何となく思ったのが
1Hまでに、ここまで勉強するぞ!って頑張るけど
途中アニメが始まってチラチラ見ながら進めてたら、目標時間までに全部終わらなかった的なイメージが湧いた
ThreadはThread.sleep(xx)位しか使ってないし、マルチスレッドもシンクロも使ってないから
放置してみる。thx
328 :
デフォルトの名無しさん :2011/07/11(月) 16:16:30.10
自分専用のSwingの合計400行くらいの小さいプログラムですが、 通常はひとつのクラスにまとめちゃいますか? また、クラスファイルをいくつも作るのはやりませんよね?
通常は一つのjarにまとめるな
>328 自分が書きやすい、読みやすいように書いたら良い けど普通は400行あると、2,3にはわかれそう
>323 あってるよ けどEJBのコードの書きにくさ、設定の難解さで最近は使われないけど。
>>328 そもそも、なんだけど、
クラスってのは分けなきゃならないんじゃなくて、
必要に迫られて分かれるもんだ。
BufferStrategyでフレームを全描画させつつ パネルにボタンとかを設置して使用したいのですが どうにもパネルの上に描画されてしまうのですが パネルを前面に出す方法はないでしょうか orz
OCJPと基本情報ってどっちが難しいの?
335 :
デフォルトの名無しさん :2011/07/12(火) 11:59:29.18
皆さん残業はどれくらいしてますか?
>>334 > OCJPと基本情報ってどっちが難しいの?
どちらも簡単過ぎて比べられない
javaでネットワークのプログラミングするときの質問なんですが、 プライベートIPのPC---ルータ---グローバルIPのPC ↑の構成の時、プライベート側からTCP,UDP通信は成功するんだが、 グローバルIPのPC側からプライベートIPのPCにUDP通信をすると失敗するのだけれど、解決方法はないでしょうか? グローバルIPのPC側から通信するときはルータが持っているグローバルIPに対して通信を試みています
>>337 Javaの質問じゃなくて、ネットワークの質問だねこれ。
ルーターのポートフォワーディングの設定がどうなっているか、どこまでできるか次第だね。
>>337 Javaに関係ないけど無理
だからプライベート側からグローバルのPCにコネクションを確立した後にそのコネクションを介してやり取りさせるしかない
UDPホールパンチングという方法もあるけど、第三者がいないと無理だし
あとはuPnPとか
ポート開放すればいいんですねとかいうレベルの話じゃないよね
>>338 スレ違いみたいで、すいません
ポートの開放については確認済みで、念押しにDNS用の53ポートでも試してみたけど、だめでした
>>339 つまり、グローバル側からアクセスするにはプライベートからのTCP確立
もしくは、中継を担うものがないとできないということでしょうか?
スレ違いのような質問にお答えいただきありがとうございます。
OCJPなのかOJCPなのかどっちだよ名前変えるなよ
Oracleのページでは Sun認定Javaプログラマ(SJC-P) Oracle認定Javaプログラマ(OCJ-P) ってなってるな でもOJCPって言ってる奴が余りにも多い
>334 資格は、その資格を持ってる人しかその資格の優位性がわからない (資格を否定する人は、資格を持ってない人がほとんど) だから、どっちが良いかは状況による
どっちが難しいの?って聞かれてるのに
>>344 みたいな回答しちゃう奴ってやっぱり低学歴?
>>346 パッと見 pixels に0-255の計算値突っ込んでるようにしか見えないけど
何か外から画像取り込んだりするプログラムなの?
もともとこのプラグインはrun()の引数がImageProcessor ip になってるのが普通みたいだな。
>>334 求められてることが違うのだから比較できるものではないだろ。
どっちも同じに見えるなら、基本情報取っとけ。
勉強時間の目安で比較するならSJCPの方が若干難しいよ
基本情報なんて高2のときに趣味で取った。
paintComponentのなかで画像を描画したいです このなかで画像を描画するにはどうしたらいいのでしょうか? getDocumentBaseで画像を選択しているのですが game.java:38: シンボルを見つけられません。 シンボル: メソッド getDocumentBase() 場所 : sh の クラス sound = getAudioClip(getDocumentBase(), "test.jpg"); と出てしまいます… メインメソッドがあるのはclass gameでJFrameを使用しています class shはJComponentを継承しています その中にpublic void paintComponent(Graphics g)を記述しているのですが シンボルが見つけられませんと出てしまいます…
getDocumentBase()はアプレットのメソッドだけど、アプレットを作りたいの? それならJFrameじゃなくてAppletかJAppletを継承しないと 画面の描画はpublic void paint(Graphics g)をオーバーライドして記述すればいいよ?
>>354 すみません あまり理解していませんでした…
色々やっていったところ
JLabelを使ったら画像を表示することができました!
ありがとうございます
作戦は「いろいろやろうぜ」だな
JFrameで音を再生させたいのですがどうすればいいのでしょうか? Appletを継承させた新しいクラスを作って戻り値?で返せばいいのですかね?
すみません 自己解決です JFrameに拘らずHTMLファイルもつかうことにしました
JFrameで音が流れるんですか ふっしぎ〜♪
JFrameってバンドじゃないだろーか?ww
馬鹿ばっか
すみません 色々やっていったところ インターネッツを使ったらエッチな画像を表示することができました! ありがとうございます
fm
364 :
328 :2011/07/13(水) 16:39:46.99
>>329 ども。自分もひとつの.jarにまとめるつもりです。
>>330 ども。クラスが、2、3個になることもあるんですね。自分のやりたいようにやると
たしかに、2,3個に分けたほうがなんとなくいいような気がしました。自分もそっちの方が
やりやすいので、そうします。とても参考になりました。
お二人様、どうもありがとうございました。自分はアマチュアなので、とても参考になります。
ぢあぇw;おうえあ3
標準的な日立のJavaコード規約では1クラス200行が目安だったな。
クラスで200ってきつそうだな ついつい400はかいちゃったりするが・・・ 社員さんは大変だねぇ
>>366 >>367 可読性から着てるんだろうけど、
そういう基準があるから、
クラス設計を勘違いする輩が多く出てくるんだよ。
多人数でやってるから、とか変な理由付けがあるんだろうけど、
だからこそ、クラス設計が重要であって行数なんか重要で無いわけで。
もちろん、行数制限が無いと、めいっぱいコードを書きなぐる(優秀と、馬鹿な)奴が出てくるから制限しているんだろうけど。
struts1.1経験者の方いらっしゃいますか? タグライブラリにて、コレクションのiterate要素となりえるinput系タグ (html:textなど)にindexed属性がまだ無かった時、JSPからどのように コレクションをActionFormに回収していらっしゃいましたか?
RuntimeExceptionとかの非チェック例外の存在意義が良くわからん。 なんのためにあるの?
なかったら実行時に発生するかもしれない例外を投げれないのだが
Java7はよ
Sun Java JRE Insecure Executable Loading Vulnerability
ttp://secunia.com/advisories/45173 The vulnerability is confirmed in version 6 update 26 (build 1.6.0_26-b03).
Other versions may also be affected.
java7にpropertyだけはいれてほしかった
Date d2 = new Date(0L); DateFormat df2 = DateFormat.getDateInstance(DateFormat.LONG); String s = "January 12, 1952"; try{ d2 = df2.parse(s); System.out.println(d2); }catch(ParseException e){ System.out.println(e); } これなんで例外投げるの? java.text.ParseException: Unparseable date: "January 12, 1952"
コピペしたが例外は飛んでこなかったぞ。 ParseExceptionはパースが失敗した位置も記録しているからそれを調べてみたら?
>>374 DateFormat df2 = DateFormat.getDateInstance(DateFormat.LONG, Locale.US);
【1】 Hoge hoge = null; ArrayList<Hoge> hogeList = new ArrayList<Hoge>(); for(int i = 0; i < 10000; i++) { hoge = new Hoge(); hoge.setA(i); hoge.setB(i * 5); hogeList.add(hoge); } 【2】 ArrayList<Hoge> hogeList = new ArrayList<Hoge>(); for(int i = 0; i < 10000; i++) { Hoge hoge = new Hoge(); hoge.setA(i); hoge.setB(i * 5); hogeList.add(hoge); } ※Hogeは自分で定義したクラスだと思ってください。 上記のソースの場合、性能に差はあるのでしょうか?
>>379 最適化されて同じバイトコードになるから差はないよ
最適化されなくても Hoge hoge = null 以外同じバイトコードになると思うが。
差は有るよ。あるけどお風呂にピペットで1滴水を加える程度だよ。
383 :
379 :2011/07/14(木) 21:01:48.09
ありがとうございます。 最適化されるのですね。でもソースレビューの事などを考えると1のコードの方がいいですね。
>>383 無駄に名前空間汚す癖のある奴だな、と思われたいなら 1の方がいい。
>>379 どこで性能に差が出る可能性があると思ってるの?
>>385 1行目じゃないの?
無駄にnullで初期化してるとこ。
387 :
379 :2011/07/14(木) 21:53:23.88
ループ内で変数宣言すると良くないと、学校で言われたのですが違うのでしょうか?
ループ内で変数宣言したほうが良い というより、変数の参照範囲が最小限になる場所に宣言するのが基本
>>387 そのときには、ループ内で無駄にインスタンス生成してなかった?
390 :
379 :2011/07/14(木) 22:00:36.95
>>388 そうなんですか。
違ってたらすいませんが、ループ内で変数宣言するとループ毎にインスタンスが生成されてしまうのではないのですか?
ループ内でnewするなの間違いじゃないの?
オブジェクトを使いまわせる場合はループの外でnewして使い回したほうがよい場合はある
でも
>>379 のケースはどっちみちループ内でnewするんだから当てはまらない
>>390 が言いたいのは、Hogeのインスタンスを指す変数hogeのことか。
一見ループする度に作られるように見えるけど、実際にはコンパイラが最適化してるんじゃなかったっけ?
393 :
379 :2011/07/14(木) 22:08:08.22
>>391 そういうことですか。
今回のような場合はループ内でnewするのは仕方ないのDeathね。
学校か 年寄り先生だったとか
年寄りなら尚更そんな勘違いしちゃダメだろ スタックの仕組みを学校の授業程度に理解してればわかって当たり前のこと
ガベージコレクタ的なことも性能に入るなら後者がいいんじゃね
スコープ抜けるときに自動的に使われなくなった参照を外してくれたりしたっけ? 後者でもメソッド抜けるまでは参照残るんじゃないの
リストに突っ込んでるから結局使われなくなった参照は無くて 今回の例ではあんま意味なかった・・・ >ガベージコレクタ ループ内だけでインスタンス使うなら後者の書き方がベターだよねという話
ところでSE7がOpenJDKベースだけど今までのSUN JDKはこれからどうなるんだろうか?
普通にOracleが出すよ あくまでOracleがコミュニティに対してOpenJDKをGPLの下で恵んでやってるだけで Oracle自身はライセンスには縛られない
エム・エス・マンゴーが普及しようとしているこのご時世で、いつまでもジャヴァ+ドロイドなんかをマンセーしてるのは乞食かニートしかいないからな
外部プロセスとしてJavaコマンドを実行して、タイムアウト監視をしつつその出力を取得したいのですが、うまくいきません。 使用しているのは 1.外部プロセスとして起動されるクラス class hoge{ public static void main(String[] args){ System.out.print("hogehoge-Std"); System.err.print("hogehoge-Err"); } }
403 :
続き :2011/07/15(金) 02:04:53.00
2.外部プロセスを起動するクラス
-----前略-----------
Process child = Runtime.getRuntime.exec("java hogehoge");
InputStreamThread stdout = new InputStreamThread(child.getInputStream());
InputStreamThread stderr = new InputStreamThread(child.getErrorStream());
stdout.start();
stderr.start();
--------後略-------
その他、
ttp://www.ne.jp/asahi/hishidama/home/tech/java/process.htmlを参考にしてInputStreamThreadを作成し 、exitValue()を利用したタイムアウト監視をしています。
結果を確認すると、標準エラーも標準出力もまとめてstdoutに出力されているようなんです。
外部プロセスからSystem.errを取得することはできないのでしょうか?
Runtime.getRuntime.exec じゃなくて ProcessBuilder を使え。
405 :
385 :2011/07/15(金) 13:02:02.58
最後にアクセスされた順序を保持できるコレクションって LinkedHashMap以外に何がある?
LinkedHashMapって挿入順じゃなかったか?
>>404 execって中でProcessBuilder呼んでるから差はないな。
とはいえ、ProcessBuilderのほうが勉強している感じがするw
409 :
379 :2011/07/15(金) 21:28:26.80
皆さんありがとうございました。 またまた質問があるのでよろしくお願いします。 【1】 private void methodA(boolean bool, Map<String, Integer> map, Hoge hoge) { if(bool) { map.put("str1", hoge.getA()); map.put("str2", hoge.getB()); } else { map.put("str1", hoge.getC()); map.put("str2", hoge.getD()); } } 【2】 private void methodA(boolean bool, Map<String, Integer> map, Hoge hoge) { final String str1 = "str1"; final String str2 = "str2"; if(bool) { map.put(str1, hoge.getA()); map.put(str2, hoge.getB()); } else { map.put(str1, hoge.getC()); map.put(str2, hoge.getD()); } } 上記のソースの場合は修正やメンテを考ると、 Mapのkey値は【2】のように定数宣言した方がいいのでしょうか?
>>409 メソッド外で static final すんならともかく、メソッド内で定数は普通はしないな。
methodA とは別に map.get("str1") する必要があるメソッド内でも
final String str1 = "str1" とかやるんじゃ定数にする意味ないし。
オーナーが持ってるチャイルドがオーナーの参照もってたら 循環参照でメモリリークします? class Owner { ....List<Child> childList; } class Child { ....Owner owner; }
java(jvmでも可)でメモリリークを発生させるにはどうやればいいんでしょうか?
>>411 しない
ルート(スタックか静的フィールド)から辿れないオブジェクトはGCの対象になる
>>412 static ArrayList refholder = new ArrayList();
refholder.add(new Object());
>>413 ,414
gcが優秀なplatfはjvmかdotnetしかないから、webだなんだとappleやadobeやjsがどんなに騒いでも実質選択肢もこのどちらかしかないですよね。
そういえばfirefox(最近対策がこうじられたそうですけど)のmallocしたまま滅多にfreeしない実質的メモリーリークに幻滅して、ブラウザはubuntu mozilla(1.7)のままなんですよ。 NN3, NN4, NN4.5(のバイナリー)とかも入手しにくくなってきてるんでいずれはmozillaもそういう運命なのかなって思います。
タイプルーズで動的言語のgcと強い型付け言語のgc同列で語るとか頭悪そうだな。 それにfirefoxのgcはjavaとおなじ並列マーク&スリープだぞ。
スイープ、な。
gcが速いか遅いか高性能かどうかなどで影響あるようなplatfはplatfとして既に終わってると思うよ。 オラクルのjava7ではgcで差別化をしてgcで商売するようだけど、gcはpgではまったく制御できないからオラクル独断とみなされて見捨てられるんじゃないか。
>>416 じゃあ、IEはメモリリークしまくりだなwww
今はコンカレントGCだから組み込み、携帯やゲームでも固まりにくいんじゃないの? 昔のだと負荷が集中する理由でハードウェア強化しても改善しにくかったけど、 全体として重くても負荷が分散しているならハードウェア強化で改善しやすい
>>419 TCKをオープンに使えるようにしたのがoracleの唯一の良心だな。
>>420 旧verだと実際にメモリリークしてたぞ。
サーバからデータを取得するclass群をまとめたjarと、 そのjarが更新されていればサーバからダウンロードするjarを作りたいのですが、 ネットワーク接続やログ出力などは共通処理にしたいと考えています。 皆さんなら共通処理のclassのみを別のjarにしますか? それともjar毎に共通処理のclassを含めますか? また、jarを環境変数のclasspathに通すと、jarファイルがロックされて(?) 更新できないのですが、何か良い方法はないでしょうか? OS:Windows XP SP3 Java:1.6 update 26
いっそのことnovell+monoもoracleが買っちゃえばよかったのかなって思う。 今だとmonoはappleが引き取るのがいいかなって思う。 appleはllvm+objcなんかに投資しないで素直にms+mono路線というのもありえた。
monoは死んだ…
とすると残るはadobeがmonoを引き取ることになるんだろうか なかなかイメージしにくいが
monoはもう新しい企業として独立してるよ
javaや噂のjavafxなんですが、c#やsilverrigthがあるから出る前からもうダメだjavaなんかもう終わってるってよく聞くんですけど、 今後のjavaはやっぱりもう何も期待できないんですか?(ウェブ・ネットワークとデスクトップ開発的に)
モバイル界ならきっと・・・
JavaFXはモバイル切ったよ。 ってAndroidのこと?
MSは個人開発者にマーケチィングを展開してIT系記者に金バラまきながら必死にアピールしてますけど、オラクルは旧サンに比べて金持なのに何もしてませんよね。 オラクルはopenoffice,opensolarisの件もあるしjava,javafxのアピールはさっぱりだしやる気ないというよりやっぱり終わってるんですよね。 それとjavaをどこのplatfの開発者をメーンターゲットにしてjava,javafxを売り込もうとしてるんですか。
自社のサーバーとDBが売れりゃいいんだよ
2006年ごろの当時のJAVA PLATFORMはもう既にLINUXなどと同じくGPLライセンスでリリースされていた
>>428 javaはandroidとサーバサイドあるから、まだ行ける
javafxは手を出すだけ時間の無駄
c#はwindows向けなら、c#が有利
ランタイムのうpデートの面でも有利
(珍しくwinうpデートを褒められる所w)
ていうか定期的に沸く初心者装ったアンチの相手すんなよ
javafxやsilverlightはともかく、windows phoneが流行ることはないと思いますよ。 流行る可能性があったとしてもIT業界全体が商売相手としてのMSを毛嫌いしていてMSを締め出しているので。 デスクトップosもx86全盛の今ならまだまだMS独占でしょうけどx86には開かれた未来はもうないのでいずれは・・・
>>435 それは出来ないな
私もjavaは一定の評価しつつもc#支持者なんでね
デフォルトでGUIデザイナ付いてるのは大きい
コンパイラもIDEもGUIデザイナもバラバラのjavaとは違うのだよ
(その分winに偏ってるのは認める)
このようなデリケートな話題についてセミナーの中での前後関係を無視して140文字でつぶやくことは、あまりにも無責任という事です。
特にTwitterは、非常に気軽に書く事ができます。おまけに前後関係がまったく無視された一部が次々と拡散されていく性質を持っています。
震災の時なども数多くの「デマ」が飛び交っていましたが、そのような危険性のあるメディアであるということです。
また、ITやウェブになれていない人であればともかく、ITの勉強会に出席するような有識者が行う行為ではないと思います。
さらに、このようなTweetをされ、問題となってしまうと、講師の人も下手な事を言えない状況となります。
札幌のWebエンジニアの綴る日常と開発の日々。
http://d.hatena.ne.jp/shuji_w6e/20110715/1310708151
>>438 元々SunにいたSwing関連の強力なプログラマ、スターエンジニア達は、JavaFXやりますよ、といった途端に一斉に退職して、今はGoogleにいてAndroidを作ってると。なるほどw #sjc11
2011-07-09 17:51:42 via Twitter for Mac
まず、このツイートのなにが問題であるかという点ですが、「(Oracleによる)JavaFX(2.0)の方針がSwing関係のエンジニアの流出の原因」としている点です。
>>436 結局
iOS=Objective C
Android = java
Windows Phone/xbox360 = C#
と、それぞれ囲い込んでる訳だし、それぞれ覚えるしかない訳だが。。。
何が言いたいんだ?
androidでしか開発しません宣言か?
>>437 いわゆるジャバラーという人種のうちでwindowsのようなちゃんとしたGUIを設計してそれを作れる人は一人もいませんよ。
なので勉強会に忙しいジャバラーにはswingとかjavafxなんか実際まったく眼中ないです。
>>437 EclipseならindigoからWindowBuilderがあるし前からプラグインで優秀なGUIビルダはあったしnetbeansはもとからまともなGUIビルダあったし
コンパイラは最適化の方針の違いでしか無いし実質、sun javacかejcの二択でしかないしeclipse搭載のejcはsun javacと違いなんて無い様なもんだし
いまどきjavaのIDEがどうだのGUIビルダがどうだのとかただの情弱でしか無いだろ。
monoは評価できるが.netとかJ++引きずって囲い込みしたいだけじゃん。
>>441 いや、流石に元ジャヴァラーで現在C#メインの自分でもGUIはマトモに書けるw
ただ、C#使った後だとjavaが面倒臭くなっただけだw
>>442 情弱上等
楽にプログラミングしたいだけなのに、あれこれ探して疲れるのはごめんだ
ググるのはコードだけにさせてくれよ
C#は何がしたいのかよくわからんから相手にしない IIS、SQLServer、C# で.netに揃えればMSサポートが効いて 業務システムとしては安心かもしれないところぐらいかな、利点は。
結局のところ何使ったらいいの?
用途で選ぶ
>>437 エクリプスでとことん苦労したんですね
お察しします・・・
>>442 現在は2011年7月でもうすぐジャバ7がリリースされるころなのですが、いつまでも過去のサンの栄光にすがってばかりの典型的な「情弱」はあなたの方だと思いますよ。
Eclipseが糞重いからAnt+プレーンなテキストエディタつかってるが やぱーりctrl+spaceでメソッド名でてくるのがほしいっす。 いらねー機能満載の変なIDEじゃなくて 軽快でバランス良くて使いやすいIDE誰も作らないの?
おまえが作れ
getCountry() ロケールの国/地域コードを返します。 getDisplayCountry(Locale inLocale) ユーザーへの表示に適した、ロケールの国の名前を返します。 Localeクラスだけどこの違いは何?
>>453 getCountry()はドキュメント読めば ISO 3166の2文字のコードって書いてあるぞ。
System.out.println(Locale.JAPAN.getCountry()); //JP
System.out.println(Locale.US.getCountry()); //US
getDisplayCountry(Locale inLonale) は inLocaleで指定した言語で一般的な表記に翻訳する。
System.out.println(Locale.US.getDisplayCountry(Locale.JAPANESE)); //アメリカ合衆国
System.out.println(Locale.US.getDisplayCountry(Locale.ENGLISH)); //United States
456 :
デフォルトの名無しさん :2011/07/17(日) 10:57:08.19
>>442 >>EclipseならindigoからWindowBuilderがあるし
どこにあるの?
素朴な疑問なのですが、 Sample sample = null; とした時、変数 sample は型の情報だけ持っているという解釈で合っていますでしょうか
「型の情報だけ持っている」じゃどんな解釈なのかわからん。 持っているものと持っていないもの列挙してみ?
461 :
459 :2011/07/17(日) 16:28:34.51
>>460 レスありがとうございます。
■持っているもの
・変数としての名前
・型
■持っていないもの
・メモリ上のアドレス
くらいしかわからなくて……
>>459 ローカル変数の話だよね?
VM的にはどこかのスロットにnullオブジェクト参照が入っているだけ。
nullオブジェクトはnull型にしかなれない。
instanceof演算子にsampleを渡しても、必ず偽が返る。
>>462-463 ありがとうございます。
ネットの解説サイトにも書いてありましたが、null は null 型なんですね。
勉強になりました
コンパイル時の型情報じゃね? 実行時には変数名だって削られるわけで。
コンパイル時の情報は、何が代入されるかで変わったりしないと思うから、 = null; とした時だけを特に語るのはやっぱり変じゃね
「変数としての名前」だって何が代入されるかで変わったりしないでしょ。
JpanelからAppletにするにはどうしたらいいのでしょうか?
JAppletをJFrameだと思って普通にJPanelを突っ込めばいいよ
ListのtoArray(T [])の使い方についてですが いつもListのsize()とジャストサイズのT[]の配列を取得する目的で使用しています. そのために例えばList<Integer>のlistに対して Integer[] array = list.toArray(new Integer[]{}); というふうに使っているのですが,こういう使い方は一般的でしょうか?
そのためのメソッドですがなにか
システムの現在時刻を取得する方法について質問させてください。 方法としては以下の 2 つがあると思いますが、 この 2 つのうちのどちらを用いるのがベターなのかがいまいちわかりません。 @ System.out.println(new Date()); A System.out.println(Calendar.getInstance().getTime()); もし、システムの現在時刻を取得する「メソッド」を作成するとしたら static メソッドを使用しているAの方が良いのかな? となんとなく思っています。 考えがまとまっていなくて申し訳ございません。 コメントいただけると嬉しいです。よろしくお願いします
連投申し訳ないです。 「static メソッドを使用しているAの方が良いのかな?」ってのは変ですね。 システムの現在時刻を取得する「メソッド」を作成するだけが目的だったら どちらを使っても違いはないのでしょうか
CalendarはDateの入れ物みたいなものなので結局のところ内部でnew Date()みたいなことをしている. 後者の方法だと内部で作ったDateのオブジェクトを取り出してるだけだから 前者で事足りるなら前者の方がいいと思います staticメソッドを使っているように見えても単にstaticの中でCalendarのオブジェクトを作っているだけ
>>474 丁寧なご説明ありがとうございます。
一応 Calendar の getInstance メソッドの処理の流れを追っかけてみましたが
結構複雑ですね……。
Calendar オブジェクトは特に使う必要がないので、new Date() を使おうと思います。
ありがとうございました
度々申し訳ないのですが、 今度はデザインパターンのシングルトンパターンについて疑問が出てしまいました。 シングルトンパターンは、インスタンス生成を一度だけにしたいという制約から 考え出されたデザインパターンだと思いますが、 そもそもインスタンス生成などさせなくても、メソッドを全て public static にすれば良いのではないのでしょうか。 それとも、 「メソッドを全て public static にする方法でもいいけど、シングルトンパターンの方がベターだよ」 ということなのでしょうか。 何度も申し訳ないですがよろしくお願いします
シングルトンだとDIできる public staticだとできない
>>476 引数やらセッターでシングルトンなインスタンス渡せるから取り回しがしやすい場合、
例えばデフォルト設定をシングルトンで、ユーザ設定は新しいインスタンス生成、
引数で切り替えるとかやりやすくなるケースは結構多い。
他にも環境依存のオブジェクトなんかは public static なメソッドで環境毎に if で分岐するよりいい場合
例えばUnixのファイル属性扱うオブジェクトとWindowsのファイル属性扱うオブジェクト、
別々の実装にしておいてシングルトンなインスタンスを環境毎に切り替えるってのも結構多い。
>>477 DI ですかー。DI については以前少し勉強したものの理解が浅いので
勉強してきます。ありがとうございました!
おまえさ、いい加減うざい 死ねよ
>>478 レスありがとうございます。
> 例えばデフォルト設定をシングルトンで、ユーザ設定は新しいインスタンス生成、
> 引数で切り替えるとかやりやすくなるケースは結構多い。
コンストラクタを引数別に複数作って、
デフォルト設定のコンストラクタは private、ユーザ設定のコンストラクタは public にするという感じでしょうか。
なるほど。
> 他にも環境依存のオブジェクトなんかは public static なメソッドで環境毎に if で分岐するよりいい場合
> 例えばUnixのファイル属性扱うオブジェクトとWindowsのファイル属性扱うオブジェクト、
> 別々の実装にしておいてシングルトンなインスタンスを環境毎に切り替えるってのも結構多い。
呼び出し側に環境依存をあまり意識しなくて済むようにすることで
より良い実装につながりますよね(ポリモルフィズムだったかな)。
シングルトンパターンを採用することで色々なメリットがあるんですね。
勉強してきます。ありがとうございました
>>480 不快な思いをさせて申し訳ないです。
java の初歩がわかるようになるまでこのスレに書き込むのはやめます
どうでもいいけどコテ付けてくれない? あぼーんするから
FAQとかぐぐれべば十分なものをうだうだ書くの止めてくれる? どうせ君は人に聞いてばかりで自分で何もしないゆとりなんだろうけ、この世界では問題は最終的には一人で解決をしていく孤独の世界だから、人と何か関わりながらでないとモチベが続かないなら君はこの世界に向いてないよ
情報収集とかみんなの動向調査などと意気込んでバカの一つ覚えのように勉強会とそのプレゼンにすがってばかりいる奴に聞かせてやりたいな
というか流れをみてると、得意気になって答えてる奴の方がよっぽどのマヌケ者なんだろうw
488 :
788 :2011/07/18(月) 12:35:45.69
コテつけろとか騒いでるカスの方こそコテつけてくれ あぼーんするから
なんで突然夏が来たの? しかもこいつ某所で死ね死ね言ってる携帯厨と同じなんだが。
うんこと基地外は素手で触るべからず
492 :
デフォルトの名無しさん :2011/07/18(月) 22:32:32.29
ゆとりの夏、金鳥の夏
nullは「何も指さない」ことを表す特殊な参照の値だよ 便宜上null型と呼ぶこともあるというだけのことで、どこかにnullオブジェクトがあるわけじゃない 扱い自体はC++のnullポインタと別に違わない
ゆとりってカスだなw
497 :
デフォルトの名無しさん :2011/07/19(火) 00:58:26.74
DQNPG「ちょwwwこいつDateクラス使ってるよwww」 俺「は?何でDateクラス使っちゃいけないの?」 DQNPG「業務じゃDateクラスは使っちゃいけねえんだよw」 俺「だから、その理由は?」 こんな理由もまともに答えられないDQNPGがいる職場では働き炊くない。
IT専門学校だといくら資格やスキルを付けたところで大体はそういうブラック系職場にしか就職できませんよ(本人にコネがない限り)
むしろコネがあってもPGにはならん。
カスPG「ちょwwwこいつDateクラス使ってるよwww」 ゆとり「は?何でDateクラス使っちゃいけないの?」 カスPG「業務じゃDateクラスは使っちゃいけねえんだよw」 ゆとり「だから、その理由は?」 これが日本ジャヴァラーの現実なのです
このスレの住人ってすごいよな。 自分なんて学生時代から 2 時間悩んでわからなかった問題は人に聞くことにしてるよ。 だから現役では慶應と上智しか受からなかったんだと思う。 このスレの住人なら数学や物理、化学の難問も人に訊かずに解いて 東大なんか楽勝なんだろうな
なんだこいつ突然w
東大なんか楽勝とか言ってる時点で、おまえは大した能力もなく学歴以外に自慢できるものを何も持ってないのに高望みしすぎ。素直に諦めろ。
>>497 でも働かざるを得ないのがお前の力量を示している、と。
コネさえあれば日本ではバカでもチョンでも独立行政法人ジャヴァ研究所(仮称)みたいな所にでも拾ってもらって将来安泰なんだけどな・・・
>>495 class Sample{};
int main(){
Sample *sample = NULL;
std::cout << (typeid(*sample) == typeid(Sample)) << "\n";
std::cout << typeid(*sample).name() << "\n";
}
典型的なゆとり野郎だな
>>508 それnullも実行時の型も全く関係ないよ
class Sample{};class Sample2{};
int main(){ Sample *sample = new Sample();
std::cout << typeid(*(Sample2*)(void*)sample).name() << "\n"; }
試してみ
RTTIを使うならclass Sample{public:virtual void hoge(){}};とでもしとけば
typeidに*(Sample)NULLが渡った時点でbad_typeid例外が出る
IT専門学校はマジでスキルもクソもないぞ 上位5%が基本情報とSJCP持ってますキリッなレベル
512 :
デフォルトの名無しさん :2011/07/19(火) 17:29:43.37
WebProg板の方が適当かもしれませんが Javaサーブレットに関するスレがなかったのでこちらで質問です。 ApacheのhtaccessのSetEnvIf Refererみたいな リファラによるアクセス制限を Tomcatのweb.xmlでする方法はありますか?
filter書けばいいんじゃない?
514 :
512 :2011/07/19(火) 18:11:20.82
ありがとうございます この手の要求は一般的だと思うので既存のフィルタがありそうな気がしますが Apacheのcommonsとかにないんでしょうかね
>>510 > それnullも実行時の型も全く関係ないよ
>>493 の説明を
>>459 のコードに合わせて書いたわけなので
正にその理解で正しいのだが。
それがどうC++と違うことの説明になっているのか理解できない C++のローカル変数には型情報があるがJavaには無いってこと? typeid(*sample)は実行時に変数の情報を参照してるんじゃなくて コンパイル時に結果(対象の型)が決まってるんで、 そりゃコンパイル時にコンパイラが型を認識してるのはJavaでもC++でも当たり前じゃないの 実行時の話でしょ?勘違いしてたらごめん
518 :
512 :2011/07/19(火) 19:36:19.89
>>515 ありがとうございます
パフォーマンスや柔軟性が考慮された既製品があればそれを使いたいところですが
ないのなら自分で作るしかないですね
>>517 > それがどうC++と違うことの説明になっているのか理解できない
Javaで同じコード書いてみりゃいいじゃん
いやJavaにはローカル変数の型情報を直接取得する方法が無いのはわかってるよ。 でもそれって単にコンパイル時の問題でしょ。 Java言語に同じ機能を追加するのにJVMの変更はいらない。 もともとのnullがどうのっていうのは実行時の型情報の話じゃないの?
バイトコードベリファイアはローカル変数の型を追跡できるんだっけ? プリミティブ型だけ? ベリファイヤが実行時の話に含まれるのかどうかは別として
524 :
デフォルトの名無しさん :2011/07/20(水) 11:09:27.46
皆さん年齢は幾つですか?? リアルに教えてください!
>>524 そういう時は、まずは自分から言わないか?
19歳です。
528 :
デフォルトの名無しさん :2011/07/20(水) 12:52:45.48
なんか、病的な人がいるね・・
>>525 糞ゆとりが夏休みに入ったんだろ
相手にするな
struts2-blank.warについて教えてください。 とりあえずインポートしました。 で、HelloWorldのexecute()メソッドに System.out.println("test"); を入れてみたんですが、コンソールに表示されません。 なぜでしょうか?execute()が呼び出されていないのでしょうか?
>>523 どっちかっつーと、プリミティブ型の int short char byte あたりは区別されなかった記憶が。
LocalVariableTable_attribute がついてりゃ一発だけど、ついてる保証ないし。
>>532 /example/HelloWorld.action
です。
わかりました。warをインポートした状態ですと javaファイルをいくら変更してもtomcatに反映されませんでしたが javaファイルをsrcフォルダの下に移動させたら反映されました。
537 :
デフォルトの名無しさん :2011/07/20(水) 17:12:49.47
年齢は、25っす!
30歳とかオワコン
年金生活です
死んだ母親の年金で生活しています。
>>541 まあ、母親は死んだが、ちゃんと働いてるぞ
数値計算スレが過疎ってるのでこちらに書かせてもらいます. 何らかの微分方程式を4次のルンゲクッタを使ってt→0方向に解きたい場合, どのようなことをすれば良いでしょうか? 抽象的すぎるかもしれません.コメントをください.
C言語の数値計算の本を探します。ルンゲクッタなんてどの本にも載っています。 Javaとほとんど変わらないのでJavaに読み替えましょう。 アルゴリズム自体についてはスレ違いです。
このスレは高卒か専門卒のドカタコーダーしかいないからそういう質問は答えられませんよ
!ninja
そうですか.コメントしてくださった方ありがとうございます.
548 :
デフォルトの名無しさん :2011/07/21(木) 01:42:33.48
Javaで以下のようなものが有るか教えてください。 Androidの Activity.runOnUiThread Toast 上記2つと同じ様な物を探しています。 御存知の方よろしくお願いします。
SEにはrunOnUiThreadはないけどAsyncTaskがまんまjava.util.concurrent。 ちなみにMEにはある。
どうしてstatic初期化ブロックはコンストラクタより後に実行されるのですか?
>>551 staticイニシャライザの方が先に実行されるが。
そもそもコンストラクトしなくてもstatic initializerは実行されるよ
仮にインスタンス生成してないのにstatic initializer呼ばれた場合でもコンストラクタより後って事はない。
try の中で return して強制的に finally に飛ばすのは邪道ですか?
言語仕様で明記されてるしtry-catch-finallyが使える(知る限り)すべての 言語は同じような実装だから邪ではないと思う、
>>552-557 あれ?だよね?
オレもそう思ってたんだけど
あれ?試しにSunJVM上で簡単に書いてみたらstaticの方が先だった。
そのつもりでいてAndroidライブラリプロジェクト中のクラスを実行したら
コンストラクタの方が先だったんでパニクった。
単純なクラスを書いて同じように実行したらstaticが先になった。
そうか、バグなのか。
詳しく調べてみる。
ありがトン
finally で unlock() とか close() するなら邪道でもなんでもないが。
562 :
551 :2011/07/21(木) 20:58:35.80
わかったorz シングルトンにしてるんだが staticなインスタンスの生成がstaticイニシャライザより上に書いてあった・・ 当然だよなorz
staticの順序って完全に保証されてたっけ?
されてるけどあんまりそれに依存したコードもどうかと 少なくともそのクラスを使う前には呼び出されている、くらいの前提で作ったほうが分かりやすいと思う
bashのシェルについて聞いてもいいでしょうか
>>551 あるクラスCCCのstaticメソッドを呼ぼうとしたら、
派生元BBBのstaticイニシャライザが起動し、
そのイニシャライザからCCCのコンストラクタが呼ばれたとか。
こーゆーばあいCCCのstaticイニシャライザはまだ呼ばれていないと思う。
こーゆーばかな設計はたぶんFindBugsとかで検出してくれるはず。
同じクラスなのにassertオンオフの設定が違うとか、昔あったよ…
(staticイニシャライザが終わるまでそのクラスのassertはオン)
間違い。 「staticイニシャライザが始まるまでそのクラスのassertはオン」 だ。
Javaは変数名などに漢字など使えますが、 実際のところそういうアルファベット以外を使うことってあるんでしょうか? 基本はアルファベットのみだと思いますが, 例えば仕事によっては色々な固有名称があってそういう単語をいちいち英語やローマ字に直して クラスやメソッド名にしたりするのは,数が大量になってくると煩雑になって可読性も低くなると思います するともうその漢字などをそのまま使ったほうが楽なんじゃないかと思えるんですが・・・
Eclipseが表示してくれるから漢字で書く必要ないよ
>>565 はじめてJavaの噂を聞いたときは、
「これでSolarisのbashやgrepとかが全部Javaで書き直されるんだなぁ」
と期待したものだが…
Jash UnJash
>>570 まぁ、やってみたらいいよ。
実際のソース書いてみたらわかるから。
VBで似たような拷問を受けた事がある。
キーに対して、値を複数持つためのクラスはありませんか? イメージとしては、DBのテーブルみたいな感じです。 Table t = new Table(); t.addColumn("EmpNo", Integer); t.addColumn("Name", String); t.addColumn("Age", Integer); t.addRow(1, "sasaki", 20); t.addRow(2, "tanaka", 31); TableRow tr = t.get("EmpNo", 1); System.out.println(tr.get("Name")) ■結果 sasaki
お前のイメージするDBのテーブルがよくわからない
クラス作ってHashtableに突っ込め
578 :
デフォルトの名無しさん :2011/07/22(金) 22:51:00.66
Class#isInstance(Object) と Class#isAssignableFrom(Class) には何か違いがあるのですか?
まず名前が違う
580 :
578 :2011/07/22(金) 23:07:04.94
そうですね名前が違いますね。引数も違います。それ以外には?
Class#isInstance(Object) は型を調べたい対象のオブジェクトが実際に存在していなければ使えない 例えばインタフェイス型同士の関係を調べることはできない しかしinstanceof演算子同様にnullを渡しても平気
isAssignableFromはプリミティブ型の恒等変換までならカバーしてる。 ただしプリミティブ型の拡大変換に対応してないので看板に偽りアリな感じ。
583 :
578 :2011/07/23(土) 01:46:47.73
>>581 なるほど。オブジェクトを渡す分少し制限がありますね。
>>582 とりあえず、プリミティブ型が判定できる分isInstanceより高機能ですね。
ありがとうございます。
>>572 実際にマークアンドリーセンがNCをjavaで書きなおしたけどあとブラウザのGUIのみって段階になってプロジェクト破棄されたよ。
その生き残りがmozilla Rhinoだよ。
むかしはJava Mail使ったメールコンポーネントもあったけどmozillaがインターネットスイートからブラウザ単体に方向転換したときに消えた。
Rhinoが未だにメンテされてていくつも採用実績(ほとんどは海外の社内ツールのスクリプト)があること考えるとjavaへの置き換えも一部分野ではありなんじゃない?
改訂版 Java言語プログラミングレッスン下 P170にあるプログラムから質問です。 stopRunningとrunはそれぞれ別のスレッドから呼ばれることを想定しているようです。 このプログラムではロックもvolatileも使っていないのに runningは可視になるのですか? class Runner extends Thread { private boolean running = true; public void stopRunning() { running = false; } public void run() { while (running) { doCommand(); } } } 宜しくお願いします。
>>585 「必ず不可視になる」わけじゃないから。
たぶんテストした時は意図通りに(もしくはstopRunning()してから
doCommand()の停止までの時間が許容範囲内で)動いちゃったんじゃね?
なりません
>>585 どういう意味で可視という用語を使っているのか分からないけど、
確かにvolatile使うべき状況だよね。
doCommandがインライン展開されたりしなければ大丈夫じゃね 保証はまったく無いけど
590 :
デフォルトの名無しさん :2011/07/23(土) 14:00:36.01
if (object.getClass().isArray()) { Object[] array = (Object[]) object; } こういう処理がしたいのですが、プリミティブ型の配列だと Object[] にキャストできません。 型を判定してint[], char[], boolean[]などにキャストしてやればいいのですが、 型を気にせずプリミティブ型の配列をひとまとめに扱う方法はないでしょうか?
キャストしないで java.lang.reflect.Array クラスのメソッド使ってゴリゴリアクセスしる。
592 :
590 :2011/07/23(土) 14:08:53.90
>>591 これは便利。プリミティブでも使えました。
ありがとうございます。
593 :
585 :2011/07/23(土) 14:27:43.06
みなさん、ありがとうございました。 大変参考になりました。 ちなみに、可視とは、あるスレッドがrunningを変更した際に、 別のスレッドがその変更を把握することができるかどうかという意味で使いました。
doCommand() メソッド内で、piggybacking が起こってれば可視が保証されるかもしれない
それは保証とは言わない。
で、結局volatileつけないとなにがやばいの?
自演乙
無限ループするんじゃないの
stopRunning()した後doCommand()は一回は実行されるかもしれないけど 次のループでは確実に抜けるんじゃないのか?
>>599 よし、volatileについてググるんだ。
599だけど、まさに上みたいなテキストのコードを鵜呑みにしてたから疑問を抱いていなかったよ volatileなんて組み込みぐらいでしか使わないと思ってた
整数同士の割り算をしたとき、割り切れれば整数で、割り切れなければ小数で画面表示したいです 9 / 3 の結果を、3.0ではなく3と表示したい どのようにフォーマットすればいいでしょうか
>>602 String form = (9 % 3 == 0) ? "%.0f" : "%f";
System.out.printf(form, 9d / 3);
604 :
デフォルトの名無しさん :2011/07/24(日) 03:36:16.48
+=ってどおゆう意味?例えば、a+=bとか。
605 :
デフォルトの名無しさん :2011/07/24(日) 04:24:42.24
>>604 a += b; ← a = a + b;
public static main(String[] args){
System.out.print("Enterかその他のキーを入力せよ>");
というプログラムで2通りの処理をさせたいです。
どこかのサイトを参考に、
class KeyInput extends KeyAdapter {
public void keyPressed(KeyEvent e) {
if(e.getKeyCode() == KeyEvent.VK_ENTER) {
処理1;
} else {
処理2;
みたいなクラスを作ってみましたが、使い方がわかってません。
よろしくお願いします。
>>605 拾いたいコンポーネントのaddKeyListenerを呼んで作ったリスナーを追加しておく。
frame.addKeyListener(new KeyInput());
けど単にSystem.in.read()の結果で判定したいだけのような気もする。
607 :
デフォルトの名無しさん :2011/07/24(日) 16:18:00.48
jsファイルにてIEを外部操作し単調な作業をマクロ化しようとしています。 <select name="substatus[]" multiple size="17" id="select_substatus" class=""> <option value="" selected>指定しない</option> <option value="-2">バナナ</option> <option value="-1">リンゴ</option> <option value="0">ゴリラ</option> <option value="1">ラッシー</option> </select> jsファイル側 ie.document.getElementById("select_substatus").value="11"、"12"; この方法でHTML側のチェックボックスに値を送ると、12の値のみ送られてしまい11は上書きされてしまいました。 チェックボックスを複数選択するようにする為にはどのような手法を取ればよいのでしょうか。 よろしくお願いします。
11と12に何の関係があるのかわからん、selectのoptions[n]をselected=trueにすれば複数選択できる
実際はvalue100ぐらいまであるので見本は途中で切りました。 js側の記述はそのまま転載しちゃったんで分かりづらかったですね。 HTML側のソースをいじらないで達成する事は出来そうにないでしょうか。 HTML側は社内システムのソースなので、可能であればjs側のみで対処したいのですが…。
select_substatusの子要素のoptionを拾ってきてひとつひとつvalueを調べながら
>>608 のいうようにselected=true設定すればいけるだろう。
今朝から思い立って勉強しはじめたので要領が悪くすみません。
>>608 さんの方法で無事動作を確認しました。
>>610 さんの補足があったおかげで意味が分かりました。
お二人様ともありがとうございます。
転載するようなレベルのものではないかもしれませんが
var subs = ie.document.getElementById("select_substatus").options;
subs[10].selected=true;
subs[11].selected=true;
上記の方法で動作確認しました。ありがとうございました。
614 :
605 :2011/07/24(日) 18:58:41.77
>>606 ありがとうございます。
System.in.read()で考えてみましたが、
int c = System.in.read(); if ( c == 10 ) {処理
の場合、エンターキー(10)が読み取られないのと、他のキーを押した場合も、決定にエンターを待ってしまいます。
JCurses使うとか
なんでjavaのBooleanって1bitじゃないの? 1bitずつのデータが欲しい時は、ちまちまビット演算しろってこと?
省サイズなbooleanの配列の代用品ならjava.util.BitSet
>>617 なるほど。ありがとうございます。
ついでなんですが、高速な入出力方法ってどうすればいいんでしょうか?
数字とかが欲しい場合、scannerとかを使うより1byteずつ読み込んでいって自分でパースしたほうがいいんですかね?
あのさ、ファイルからある長さの文字列を読み込むのにかかる時間と、 その文字列を解析して数字に変換するのにかかる時間の比ってどれくらいか想像できる? 解析の方をどれだけ高速化したところではっきり言って全く変わらん
620 :
619 :2011/07/25(月) 10:19:02.37
でも状況によるか 自分で文字列を区切ってInteger.parseIntとかすればだいぶ速くなると思う 自分で解析しても部分文字列を作る手間が省けるくらいでそれほど変わらないはず
>>620 その方法とか、いろいろと試して早い方法を取ろうと思います。
ありがとうございました。
623 :
616 :2011/07/25(月) 13:32:23.03
>>622 普段よく使うのがC++なのですが、そちらの処理系(g++,vc++)だと
boolが1bitになってます。
まぁ、配列として確保しないと、メモリ上では区切りのいいブロック単位でサイズ確保されちゃうのかもしれないですけど。
wikipediaを見ると、1bitで確保すると名言している言語はあまりない雰囲気ですね。
そこらへんが多少疑問なところです
Eclipse使って public static void main(String[] args) throws Exception 内で Font font = Font.createFont(Font.TRUETYPE_FONT, new File(P("C:\\Users\\koide\\Desktop", "msgothic.ttc"))); と書くと Exception in thread "main" java.io.IOException: Can't read msgothic.ttc at java.awt.Font.createFont(Unknown Source) at hoge.hoge.com.TEST.main(TEST.java:34) と言われてしまいます何が問題なのかご教授願えないでしょうか?
つーかC++の最小単位はsizeof(char)っしょ。如何にboolでもこれより小さくなることは有り得ん。
>>625 EnumSetは(Setとは)別の話、みたいなもん?
>>624 やあ小出っち。
うちでは問題なく動いたけど?msgothic.ttcのパスをもう一度確認してみては。
P(String)ってのは自作メソッド?
どの言語だろうと結局8bit単位で収められてるともうんだがC系でboolが1bitはないだろ。ネイティブな言語だとCPUに合わせて吐くんだから。
ドラッグアンドドロップでテキス トデータかなんかを 実行ファイル形式のjarファイルに 読み込ませることはできますか? コマンドラインでファイルを指定 して読み込ませるclassはできてい ます。 それを普通にjarして作ってもPythonみたいにはできないのかな? まったく検討違いなこと聞いてたらすみません。
630 :
デフォルトの名無しさん :2011/07/26(火) 00:42:45.33
標準入力で↓のようにしましたが、 入力すると変数に文字化けした文字が入っています。 開発環境win、eclipse デフォルト文字コードはUTF-8のようです BufferedReader r = new BufferedReader(new InputStreamReader(System.in), 1); System.out.println("まずあなたの名前を入力してください"); System.out.flush(); String myName = r.readLine();
631 :
デフォルトの名無しさん :2011/07/26(火) 01:00:46.72
↑の者ですが自己解決しました。 スレ消費してスマン
632 :
デフォルトの名無しさん :2011/07/26(火) 11:59:34.30
アプレットでボタンの上にマウスカーソルがのったときに ボタンの表示を変える方法を教えて下さい。 mouseEnteredメソッドを使用して書いてみたのですが、ボタンに乗った時ではなく アプレット上に乗ったときに変わってしまいます・・
633 :
デフォルトの名無しさん :2011/07/26(火) 12:00:35.48
質問です 初心者の勉強用のお勧め本を教えてください
独習Java
635 :
632 :2011/07/26(火) 12:15:32.92
632ですが自己解決しました
すいません。 Swingの勉強をしているのですが、JFrameの枠だけを非表示にする方法はありますか?つまり、画像だけ表示したい訳です。
636ですが、調べ方が悪かったみたいです。 setUndecorated(true); でできました。ほんとすいません。
638 :
デフォルトの名無しさん :2011/07/26(火) 16:54:01.57
今自分がどのクラスにいるかは、 getClass().getName(); でわかりますが、 自分がどのメソッド名にいるかを知る方法はありますか? リフレクションで、自分が今いるメソッド名 + "Exec" というメソッドを呼びたい、ということをしたいのですが・・・
確実性ないけど、Thread#getStackTrace() あたりとか。
640 :
638 :2011/07/26(火) 17:40:33.52
>>639 レスどうもありがとうございます。
なるほど、StackTrace を見れば、得られそうですね。
ただ、今フレームワークもどきを作っているのですが、
この 「自分が今いるメソッド名 + "Exec"というメソッドを呼び出す」処理は
頻繁に呼ばれます。
そのたびに StackTrace を得るのはコスト的に問題ないでしょうか。
getStackTrace() は重い、とどこかで聞いたような・・・・
>>640 頻繁とか重いとかじゃわかんねえよハゲ
なんなの?文系なの?
クリアしたい数字があんだろ?それを出せよゴミクズ
>>642 仮想関数のポインタをgetするにはどうすればいいんですか?
>>643 1.7から追加されるMethodHandle
どうやってつかうんですか? オラクルにチュートリアルがないですよね
一番最初に独習Javaやって勉強してたけど その後他のオブジェクト指向導入の英語のJava本読まされたとき独習の糞さを知った
ジャバラーは英語が出来る人が比較的に多い
というか和訳が糞なことが多くていやでも原書を買い直すハメになる 鍛えられてくると翻訳本は最初からスルーするけどな
>>645 javadocみりゃ使い方わかるでしょ
>>648 javadocの訳からしてあまりにも酷いくらいだからなw
javaで誤訳とか糞翻訳はよくある。
javascriptなら言語仕様とサイ本読んどけって言えるんだけどjavaだとそういう本少ないよね。
入門書として一冊「よくわかるJava」を読み終えたのですが、入門書の次に読むべき本にはどの様なものがあるでしょうか? 一応技術を身に付けてゲームでも作りたいなと考えているのですが
Java言語仕様 第3版 Java仮想マシン仕様 第2版 Effective Java 第2版
eclipseの使い方が載ってる雑誌やムックがいんじゃね。
>>654 usage examples のところ見てもわからんならチュートリアル見ても無理だろ。
656 :
デフォルトの名無しさん :2011/07/27(水) 07:49:49.07
質問お願いします。 プログラムのアンインストールまたは変更からjavaが消せなくなってしまって 新たにjavaをインストールすることもできなくなってしまいました。 「選択した機能は現在使用できないネットワークリソースにあります。」 「OKをクリックして再実行するか、インストールパッケージ jre1.6.0 20msiを含むフォルダーに対する代替えパスを以下のボックスに入力します。」 と表示されます。 知っていましたら教えてくださいm(_ _)m
>640 インターフェースと実装クラスを分けて、間に噛ました動的プロキシでメソッド名をスレッドローカルに保持。 全てのケースにうまく適用できる訳ではないが。
英語が出来ない人はジャバラーとはいえない
ジャバーじゃないのか、、、 ジャバ様でどうだ
蛇腹のどこが英語か
ジェイバーでどうだ
プログラマー戦隊、ジャバン!
素直に考えれば ジャヴァニーズ
JAVANESE WOMEN: THE LAST STAND
ジェイヴィストで許してもう
パールの人をパーラーとか言うと、なんだか日本ローカルのさびれたパチンコ屋みたいw
>>668 javadoc見て何がわからんかったん?
2つの行列の積を計算するメソッドがあるMatrixクラスがあります class Matrix { int[][] d; Matrix(int[][] d) { this.d = d; } Matrix product(Matrix m) { int[][] d = new int[this.d.length][m.d[0].length]; for(int i=0; i<this.d.length; i++) { for(int j=0; j<m.d[0].length; j++) { int sum = 0; for(int k=0; k<this.d[0].length; k++) { sum += this.d[i][k]*m.d[k][j]; } d[i][j] = sum; } } return new Matrix(d); } } 1.コンストラクタの中がよく分からないです。this.d=dはなにを意味しているのでしょうか? d自身にdを代入しているのでしょうか? 2.productメソッドのdの宣言でdの大きさにthis.d.lengthとm.d[0].lengthがあるのですが dの大きさを決めるのにd.lengthを使うのはどういうことでしょうか? 初歩的な質問ですいません。
Matrix(int[][] d) {this.d = d;} コンストラクタの引数にdってついてるから,クラスのメンバのint[][] d;と名前が重複している状態で だからクラスのメンバのdに,コンストラクタで渡されたdを代入するために そのオブジェクト自身を指すthisをつけて区別してる. Matrix(int[][] arg) {d = arg;} これと意味は同じ.だけど前者の書き方が一般的 2は行列の乗算なんだから,今内部の保持している行列に対して 引数に指定した行列をかけるんだから 結果として得られる行列は縦が内部の行列の縦長さで, 横がかける行列の横の長さになるからだと思うけど productメソッド内のint[][] dとthis.dは別物だと分かればいいよ
数値の時系列データが並んでいるCSVファイルを読み込んで、それを配列 list1 に入れました。 そして、その15個分の移動平均を順番に取って配列 list2 に入れようとしています。 double[] list2 = new double[list1 - 14]; double sumVar; for(int i=0; i < list1.length-14; i++){ sumVar=0; for(int j=i ;j<i+15; j++){ sumVar +=list1[j]; } list2[i++]=sumVar/15; //確認1 System.out.println(list2[i-1]); } //確認2 for (int k=0 ; k<list2.length; k++){ System.out.println(list2[k]); } 上のようなプログラムを書いたんですが、確認1の分ではちゃんと全部の値が正しく表示されたのですが、 確認2の部分では、なぜか奇数番目の配列の数値が0になってしまいます。どうしてかわかりますでしょうか。
すいません、自己解決しました。。。書きこむまで小一時間悩んでたんだけど、質問すると答えが わかるって… list2[i++]=sumVar/15; のインクリメントが余計でした…
679 :
デフォルトの名無しさん :2011/07/28(木) 00:49:38.25
>>678 「質問すると答えがわかる」のはよくある事。
問題解決法のパターンの一つ。
680 :
デフォルトの名無しさん :2011/07/28(木) 01:48:31.07
もう7/28なんだけど、Java 7リリースまだぁ?
時差も知らんのか
同じパッケージにある、クラスAのvoidのメソッドをクラスBで使うにはどうしたらいいでしょうか?因みにメソッドはデータベースに接続するものです。
エスパー以前にイミフ
ゴメス
クラスA.メソッド()でいいんじゃね
あーなるほど。ありがとうございます
ImageJの質問で申し訳ないのですが・・・
http://www.optinav.com/download/Iterative_Deconvolution.java このプラグインで、
java.awt.image.ColorModel cmY = ipY.getColorModel();
と、ありますが、これはRGBやCMYK等のカラーモデルを取得しているだけで、画素を取得している訳ではありませんよね?
以下はImageJのライブラリに依存した命令なのですが、
ImageProcessor ipXtemp = new FloatProcessor(iN,iN);
FHT ipX = new FHT(ipXtemp);
ipX.setColorModel(cmY);
(中略)
float[] X = (float[])ipX.getPixels();;
と、カラーモデルをセットしているだけで画素を取得しているようにしか見えません
cmYと言う名前から(最初は黄色を指定していると勘違いしましたが)CMYKをターゲットにしていると思うのですが、
これで画素を取得することが出来るのでしょうか?
多少スレ違いで申し訳無いのですが、よろしくお願いします。
ダメなら画像処理スレ辺りに行ってみます。
FHTってjpegとかに使われるFFTの親戚みたいなもんだから 不可逆圧縮に適したデータに変換してるのかも? 違ったらごめんね。
689 :
673 :2011/07/28(木) 11:46:18.83
>>674 ということはproductメソッドで宣言する配列の名前はdでなくてもいいのでしょうか?
690 :
デフォルトの名無しさん :2011/07/28(木) 11:53:53.84
なんでもいいよ ていうか一貫してなくていろいろ突っ込みたくなる設計だな Matrixを値として扱うならコンストラクタは this.d = d;じゃなくてコピーするべきだし できるだけインスタンスを使い回す方針なんだったらproductは新しくインスタンス作るより 自身のdを変更するべきだと思うが
ああでも結果の行列の型が変わるからnewでいいのか コンストラクタもpublicじゃないからアリかな
692 :
687 :2011/07/28(木) 13:31:34.62
>>688 FHTはハートレー変換で、FFTを実数だけで計算する物ですね。
質問時(
>>687 )では言葉足らずだったのですが、
if(operation == CONVOLVE){がtrueの時は
ImageProcessor ipX = convolve(ipYCopy,fhtA);
と、やっているのでipYの画素値が取得出来るのはわかるのですが、
falseの時は画素値をどこから取得しているのかわからなくって・・・
693 :
687 :2011/07/28(木) 14:16:15.58
694 :
673 :2011/07/28(木) 17:32:51.24
>>690 わかりました。
ありがとうございました。
成分情報なら持ってるけど画素そのものはもってないだろ。 カラーモデルが情報をもつのと実体から情報を取るのは別。 ちなみにおもいっきりgetPixels()と書いてあるがきいてることが 前半と後半で矛盾してて画素を取得している所がどこか聞きたいのか カラーモデルが何してるか聞きたいのかハッキリせんな。
696 :
687 :2011/07/28(木) 18:10:38.99
>>695 ありゃ、やっぱり画素そのものはありませんでしたか。
聞きたいのは、if(operation == CONVOLVE){がfalseの時、
画素をどこから持って来て計算しているかです。
ImageProcessorサブクラスのコンストラクタで配列としてピクセルデータ渡してるじゃないか。
ああ違うな。コンストラクタはint,intか。その下のImagePlus作る手前でやってる
悪い。手前じゃなくて後だわ。字間違えた。
Javaにプリプロセッサがない理由とは? 調べた限りでは「#ifdefやマクロとかを展開して起きる文法その他のエラーが嫌」とか、「条件コンパイルはいらない」とかいう話があったが
HttpServleteRequest.getRemoteAddr()で リモートIPアドレスを取得したいんだけど ホスト名が取得されちゃう どういうことなの
702 :
687 :2011/07/28(木) 21:06:34.58
>>697-699 ImagePlus impX = new ImagePlus("Deconvolved"+nIter+"_"+IJ.d2s(filterSmallDia),ipX);
impX.show();
//IJ.run("Fire");
ImageProcessor ipXCopy = null;
float[] XCopy = null;
float[] X = (float[])ipX.getPixels();;
ImagePlusの後と言うと、この一番下でしょうか。
このipXはどこから画素を貰って来ているのでしょう?
ImageProcessorのipXtempは宣言時に初期化されていて、それのコピーを繰り返しているだけにしか見えないので・・・。
703 :
デフォルトの名無しさん :2011/07/28(木) 22:22:55.28
Java SE 7 まだぁ〜?
荒すな
アプレットを作ってJavaを勉強してます。 何もない画面に表示した画像を方向キーで移動させるところまで書けました。 このとき、たとえば右キーを押したまま左キーを押すと左移動に変わり、左キーを離したらまた右に移動するという動きにするにはどうすればいいでしょうか?。 今は、keyPressedで左右キーの入力を拾ってフラグを立て、メインループの中でフラグ判定して画像の座標を変更していますが、こうすると先にifで判定しているほうのキーが常に優先されてしまいます。
707 :
デフォルトの名無しさん :2011/07/29(金) 00:47:12.06
708 :
デフォルトの名無しさん :2011/07/29(金) 02:46:52.10
相手鯖が落ちてるんじゃね?
709 :
デフォルトの名無しさん :2011/07/29(金) 03:14:02.52
プログラム初心者です netbeansで、javaを使って簡易エディタを作っているのですが、 テキストエリアの文字数を取得するのに int s = jTextArea1.length(); とするとlength()にシンボルが見つかりませんとでます。 ググってもこれでできると書いてあるのですが、どうしたらよいでしょうか
jTextArea1.getText().length();
713 :
デフォルトの名無しさん :2011/07/29(金) 06:15:53.45
Javaってどおやったら使えるようになるん?
まず服を脱ぎます
次にコーヒーを淹れ、ネクタイを締めます
716 :
687 :2011/07/29(金) 10:48:16.36
>>706 1回目は空で、2回目から値を入れているってことでしょうか?
718 :
デフォルトの名無しさん :2011/07/29(金) 17:19:38.93
GUIで四角形を表示させようとしてるんだけど MyDrawPaneltest.java:22: シンボルを見つけられません。 シンボル: メソッド paintComponent() 場所: MyDrawPaneltest の クラス gui.paintComponent(); っていうエラーが出てコンパイルできないボスケテ import java.awt.*; import javax.swing.*; class MyDrawPaneltest extends JPanel { JFrame frame; public void paintComponent(Graphics g) { frame = new JFrame(); g.setColor(Color.orange); g.fillRect(20, 50, 100, 100); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 300); frame.setVisible(true); } public static void main(String [] args) { MyDrawPaneltest gui = new MyDrawPaneltest(); gui.paintComponent(); } }
719 :
687 :2011/07/29(金) 17:27:57.59
あああああああああああ Javaって基本は参照渡しなのね 見方を根本から変えないといけなかったのか
はいはい、参照の値渡し参照の値渡し
>>719 ちがうちがう全部値渡しだよ
オブジェクトは常に参照なだけで
アドレスという値が渡ってはる
>>718 GraphicsがpaintComponent()の引数なんだからGraphics渡せよ。
コンパイル通すだけならnullでもいい。
extends JPanel はいらんぞ。
java初心者なんですが, test.javaってソースがあるとして, C:> java test < text.txt ってな感じでC言語みたいにリダイレクトしようとしたら上手くいかないみたいです JAVAではリダイレクトはできないんでしょうか?
>>723 できるよ
たとえばこんなソース
import java.io.*;
public class Test {
public static void main (String args[]) throws IOException
{
InputStreamReader inputStreamReader01 = new InputStreamReader(System.in);
BufferedReader bufferedReader01 = new BufferedReader(inputStreamReader01);
String str;
while ((str = bufferedReader01.readLine()) != null) {
System.out.println(str);
}
}
}
今未オーダーなので、会社でStruts1.3でちょっとしたWEBシステムを組みながらJ2EEの勉強してるんですけど ClassAのメンバーとしてClassBのオブジェクトがあって、setAttributeでClassAをセッションに保存してあるとき、 JSPからClassAの中のClassBのメンバーにアクセスするには、どうやってタグ書けばいんでしょうか ClassAのメンバーは <bean:write name="classA" propertie="classAmember1" /> じゃあClassAの中のClassBのメンバーはどうやってアクセスすれば?
教えてもいいがWriteTagやPropertyUtilsあたりのソースを見たほうが早い。こいつらはStrutsのView側の本体。 Struts1系なんてもう保守の仕事しかないだろうし、さっさと元ソースから調べられるようにしといたほうがいい。
728 :
723 :2011/07/30(土) 12:29:07.41
>>724 ありがとうございます
実はいまプログラミングの課題の添削をしていて,
数十人分のソースファイルをバッチファイルで一括コンパイル,実行を行いたいのです
コンパイルは出来たのですが,入力を自動化出来ず困っていたのです
演習の課題なのでソースファイルをいじることは許されません
コンパイラはオラクルの奴なんですが,なんとかならないでしょうか?
条件を詳しく書かなかったために後付になってしまい申し訳ないです
Java関係ねーじゃん。expectコマンドでもしらべろよ。 つうかなにをやりたいのかまともに文章に出来ないこんな奴に添削とかされたくない
静的インポートに関して質問があるのですが、以下の2つのファイルがあって 【ABC.java】 import static DEF.*; class ABC { public static void main(String[] args){ System.out.print(method(184)); } } 【DEF.java】 class DEF { static int i; static int method(int j){ i=j; return i; } } それでをコンパイルを行うと c:\test>javac -cp . ABC.java ABC.java:1:シンボルを見つけられません。 シンボル: クラス DEF import static DEF.*; と出てしまいます。要はimport文が間違っていると思うのですが、どうコードを訂正すればよいでしょうか? また2つのファイルはtestフォルダに格納してあります。
>>730 デフォルトパッケージのクラスはインポートできない。
要するに import DEF; は不可。
同様の理由で import static DEF.*; も不可。
>>731 ありがとうございます。package化されていないとimportできないとのことなので
testフォルダの直下にtest2フォルダを作り、2つのファイルの先頭に以下の記述をして
DEF.javaをtest2フォルダに移動させました。
【ABC.java】
import static test2.DEF.*;
【DEF.java】
package test2;
これでコンパイルが上手くいくと思ったのですが、今度はメソッドのシンボルが
見つけられないとのことでした。
ABC.java:7: シンボルを見つけられません。
シンボル: メソッド method(int)
場所 : ABCのクラス
度々申し訳ありません。自己解決しました。 アクセス修飾子が抜けてました。
他のところで質問したところ、ここに誘導されたのでここで質問します。 サーブレッドでMySqlで簡単なで簡単な掲示板を作成したいのですが、一つ質問があります。 本文の入力でsql インジェクション対策はどのようにするのが一般的なのでしょうか? 現在はpost された値をそのままインサートしています。このとき、”を入力されると簡単にsql インジェクションされます。
PreparedStatementを使え。 ORマッパー使えばなおよし。
736 :
734 :2011/07/30(土) 18:01:48.69
>>735 ありがとうございます!! 理解しました♪
public class COLor{ //Colorに直すとエラーがなくなりますが、本ではCOLorとなっています。 public static final Color BLACK = new Color(0,0,0); public static final Color RED = new Color(1,0,0); public static final Color GREEN = new Color(0,1,0); public static final Color BLUE = new Color(0,0,1); public static final Color CYAN = new Color(0,1,1); public static final Color MAGENTA = new Color(1,0,1); public static final Color YELLOW = new Color(1,1,0); public static final Color WHITE = new Color(1,1,1); public flaot r,g,b; Color(double r,double g, double b){ this.r = (float); this.g = (float); this.b = (float); } public static Color operate+(Color c1,Color c2){ //+を消すとエラーがなくなります return new Color(c1.r+c2.r, c1.g+c2.g, c1.b+c1.b) } } OSはMacで、Eclipseでやってますが上記のエラーが解決されません。 どうすればエラーがなくなるのでしょうか? 初心者的なことかも知れませんがご教授お願いします。
738 :
デフォルトの名無しさん :2011/07/30(土) 19:35:08.95
上は単なる誤植だろうがoperate+の方は明らかに不自然だな 他の言語の本と間違えているのでなければ焼き捨ててしまえ
訂正 operate+ → operator+ operator+の下に実がoperator-などがあり… 上のCOLorも誤植かと思ったのですが文章にもCOLorって書いてあり… もし間違いだった場合、最初のページからこれってどういうこと。
自己解決しました。どうやらダウンロードするファイルにそのクラスが入っているようです。 本にはクラスの内容は言及されてなかったですが…
741 :
723 :2011/07/30(土) 21:35:48.32
>>729 恐らく,上手くいかないのはリダイレクトをjava.exeが受け取っているからだと考えました
だからリダイレクトと同様の機能をjava.exeが持ってるんじゃないかと思ったんですが,
調べても見当たらなくてここに書き込みさせてもらいました
expectではちょっと上手くいかないようです
入力を求める文章が各人で違いますので
すぐつっかかってくる
>>729 のようなやつに添削されたくないね。
伸びるやつも伸びなくなるわ。三流コーチみたいにチクチク細かい事言ってきて
新人つぶしちゃうんだろうね。それで、会社も後継者が育たず、ご破算。
ああ、やだやだ。
>>729 みたいのは、どこの会社でも欲しくないよ。
>>729 みたいのは、どこの会社にいてもらっても困るどころか
こんなやつと友達になるのさえ勘弁だな。
彼女が出来たとしても彼女も不憫だろうな。細かいことでチクチクチクチクいってくるんだろう。
たまったもんじゃない。一緒にいるだけでストレスが溜まるってもんだ。
なんで、神様も
>>729 みたいなやつを作ったんだろうな。あきらかに
>>729 みたいなやつは必要ないのにね。
こんなやつがいるから、世の中が悪くなるんだ。はやく、この世から出て行って欲しいな。ああ、やだやだ。
>>729 みたいなのが、この世に住んでると思うだけで、虫唾が走るわ。
こっちが早く
>>729 のようなやつが住んでいない別の世の中に行きたいと思うくらいだわ。
チラ裏うざい
つか課題で作られたプログラムがそれぞれ
>>724 のやり方で
>>741 標準入力から値を読み込んでいるなら,そのまま使えるはずだけどなんでできないの?
その課題って,そもそもリダイレクトすれば自動化できるとかいう以前の話なんじゃ
引数で指定されたテストデータをファイル読み込みするとかじゃないよね
そういう詳しい話が無いから一向に話が進まないんだと思うけど
人は何故、余計な一言を言ってしまうのだろうか。
リダイレクトが何かを理解してないんだろうな。 なんか自動入力プログラムの一種とでも思ってそうだ。ただの標準入力だぞ。 てかIDないのをいいことに、いきなり切れて連レス煽りとかね・・。
いわゆるザコだろ 相手にするな
ばれてないと思ってるのかね 夏だなぁ
Javaでクロージャみたいなことってできる? public class Hage { public static Function hoge() { return this.hello; } private static void hello () { System.out.println("Hello"); } } public class test Hoge { public void Hoge () { Function foo = Hage.hoge(); foo(); // Hello } } みたいな感じで
クロージャっぽいことはできる。 けど、そういう書き方はできない気がする。
インスタンスを作って渡したりとかぐらいしかできないようですね、 メソッド自体の参照は渡せないのかあ・・
java7か8で追加されるんじゃ無かったっけ?
Java7のクロージャってシンタックスシュガーじゃなかったっけ
クロージャは Java8 の予定。 代替にはなるかわからんけど Java7 から MethodHandle 使えるよ。 Java8 搭載予定のクロージャも実装には MethodHandle 使う予定らしい。 プロパティが instance.propertyName でアクセスすると既存の名前空間と重なって問題が出るのと同様に function() も既存の名前空間と重なって問題出そうなので却下らしい。
MethodHandleつかうのか。それクロージャっていうのか?
757 :
デフォルトの名無しさん :2011/07/31(日) 11:06:36.67
C#のクロージャもそういう実装だぞ。 メソッドのハンドルと環境オブジェクトをまとめたオブジェクトを渡す。 クロージャっていうと外のローカル変数を取り込むことを言うのが一般的で、実装は関係ないよ。 ただローカル変数のキャプチャは今のところ実現されない方向で、 それこそ全くクロージャじゃないのでラムダと呼ぶようになってる。
そういえばJava7の新機能のこと何も知らないなと思ってググってみたら2009年とかの古い情報ばかり出てきた
>>757 >ローカル変数のキャプチャは今のところ実現されない方向
なぜに?
C++と違ってJava環境はGCを仮定していいんだから
変数の寿命問題とかはどうとでもなりそうなものだが
マルチスレッドで並列実行することを想定してるかららしいよ 競合するからラムダ内からの書き換えは禁止 そんなのフィールドについても同じことが言えるわけで 使い方のレベルの話だから全く説得力無いけどな
Eclipseの最新版でtry (...) {} が文法がエラーになるのですが、 なんとかならんでしょうか
Javaにプリプロセッサが無い理由を教えて下さい。
初期に(アンチC++の一環として)散々プリプロセッサをディスったから
>>762 プリプロセッサは統合開発環境と相性がわるいから。それこそなんでもありなのがプリプロセッサ。
>>761 3.7のリリース版ではコンパイラのjdk7互換サポートが無効にされてるとか。
Maintenance Buildだったら有効になってるとかいう情報も。
intefaceにenumを持たせるのってお行儀よくない?
>>767 全然問題ないと思うけど、同じパッケージに入れときゃ事足りる状況しか思い浮かばん。
>>761 Eclipse 3.7のJava 7サポートは9月
すごく基本的な質問を失礼します。 今大学の課題でjavaを書いているのですが、その課題を解くために 「「整数を要素に持つ大きさi の配列」を要素に持つArrayList」をi=1..nとして、 これらを要素に持つ大きさnの配列aを作ろうとしてます。 しかし色々試行錯誤をして、配列の数が変わるのでGenericsがあると駄目なのかと思い、 ArrayList[] a = new ArrayList()[n]; for(int i=1; i <=23; i++){a[i] = new ArrayList<int[i]>();} などとしてみましたが、結局お手上げ状態です。 どなたかアドバイスを頂けませんか。
772 :
771 :2011/07/31(日) 21:14:19.66
すみません。事故解決しました。
>>760 最近のスクリプト言語ならyieldに丸投げするんだけどjavaみたいな言語だとこういう
並列処理を言語側の実装が面倒みるなんてのはやらないだろうねぇ。
ていうかローカルキャプチャしないんじゃレキシカルクロージャですら無いじゃん・・・。
いや渡したラムダが並列実行されるかどうかなんてドキュメントに明記して 利用する側もそれをわかって注意して使うのが当たり前でしょ。 勝手に暗黙のうちに並列実行されたりしたら、ローカル変数書き換えられるか どうかなんて関係なく、どうせまともに動作するわけがない。 だからそんなの「想定しても仕方ないのでそんなこと気にしない」でいいんだよ。 クロージャを持つ言語は基本的にそう。
>>745 >724のやり方は使っていません
課題ではScannerのnextDouble()によって数値を読み込んでいますのでこれを変更することはできないからです
>標準入力から値を読み込んでいるなら,そのまま使えるはずだけどなんでできないの?
というのはexpectのことでしょうか?
それと,荒らしていると思われていますが,自分ではありません
わざわざ自分の時間を使ってアドバイスをくれる方にそんなことするほど馬鹿じゃないです
文章能力が無いのも一応自覚しています
Javaのラムダは今在る無名クラス使った関数オブジェクト作成の シンタックスシュガーってことで良いの?
>>775 課題を出しているのにJava初心者とか、状況がよく分からん。
コンパイルが通っても正しく動かないことなんてよくあるのに。
そもそもテストケースは別に用意しようとしてるんだよね。
正しく動くか分からない、提出されたものからテストケースを作ろうとしてるわけじゃないよね?
>>776 MethodHandle使うのかもしれないけど、仮にシンタックスシュガーでも
ローカル変数の取り込みは問題なく実現できるよ
並列処理と相性が悪いなどというのは、すべての無名クラスのメソッドは
並列実行されることを想定して書けと言ってるようなもん
申し訳ないと思うなら黙っとけよゴミクズ
781 :
デフォルトの名無しさん :2011/08/01(月) 03:09:53.11
誰か問題作って―。
>>776 今のところコンパイラがクラス内に勝手にメソッド作ってそのMethodHandleを返す方式らしい。
無名クラスはインナークラスになっちゃうのでthisの意味が変わるのがどーたらこーたらとか聞いた。
コンパイラでどうとでも対応できそうな気もするんだが、そうでもないのかね?
785 :
デフォルトの名無しさん :2011/08/01(月) 13:02:18.06
swtってjreに標準で入ってるんですか?
サーブレットの全クラスで、文字列のリソースを保持したグローバル インスタンスを使用したい場合、 シングルトンを使用すれば大丈夫?
すぐつっかかってくる
>>780 のようなやつに添削されたくないね。
伸びるやつも伸びなくなるわ。三流コーチみたいにチクチク細かい事言ってきて
新人つぶしちゃうんだろうね。それで、会社も後継者が育たず、ご破算。
ああ、やだやだ。
>>780 みたいのは、どこの会社でも欲しくないよ。
>>780 みたいのは、どこの会社にいてもらっても困るどころか
こんなやつと友達になるのさえ勘弁だな。
彼女が出来たとしても彼女も不憫だろうな。細かいことでチクチクチクチクいってくるんだろう。
たまったもんじゃない。一緒にいるだけでストレスが溜まるってもんだ。
なんで、神様も
>>780 みたいなやつを作ったんだろうな。あきらかに
>>780 みたいなやつは必要ないのにね。
こんなやつがいるから、世の中が悪くなるんだ。はやく、この世から出て行って欲しいな。ああ、やだやだ。
>>780 みたいなのが、この世に住んでると思うだけで、虫唾が走るわ。
こっちが早く
>>780 のようなやつが住んでいない別の世の中に行きたいと思うくらいだわ。
ここから平常運転。質問者いらっしゃーい。 ↓
はい・・最近なんか陰口をたたかれているようで・・
いつも大声で喋ってよく笑う様にしましょう 話す内容は実は支離滅裂でもかまいません 不思議と発言力が付いて一目置かれる様になります すると陰口も無くなるでしょう
>>786 その手の話はjava.util.ResourceBundleでトライしてみてほしい。
もともとは文字列国際化のための仕組みだが、
国際化抜きにしてもキャッシュ管理してくれるのは便利。
鳩山かよ
>>779 ツールでなくライブラリだけど、Apache BCELが有名。
org.w3c.domのjarファイルが欲しいのですが、どこにありますか?
>>795 JREインストールディレクトリ/lib/rt.jar
>>775 そのScannerはどのストリームから読み込んでいるわけ?
キーボード?それともファイル?
課題実行→キーボードで値を入力→Scannerで読み込み→処理
っていうプログラムなら、test.txtにキーボード入力の内容を予め入れておけば
C:> java test < text.txt
これでScanner使ってようがなんだろうが自動で入力されて上手くいくよ.
もしもこれで自分が思ってることと違うと思ったならさっさと課題のソース出しちゃえばいいと思うよ.
Immutableに使いたいときにDate型ってどうしてますか? longで保持しますか? それとも別のImmutableなDateクラスを使ってますか?
>>799 約束が通じる範囲だったら、変更してはいけない約束にしてそのまま使う
約束が通じない範囲とやりとりする場合は、受け取るときと返すときにコピーする
>>794 ありがとうございます。こんなこと誰もあまりしていないだろうと思っていたのですが、ライブラリまであるのですね。
実行時に動的に書き換えられるということでしょうか?何かJITと相性が悪そうですが、どういったときに利用するのかな。
>>799 long一択
mutableであること、他の選択肢があることから
Dateはオワコン
DateはJDK1.1になるときにimmutable化すべきだった。まーあれじゃ不完全だが。
オラクルに変わったときほとんどがリンク切れ(しかしページ自体はある状態)→ リンク修正したときにオラクル版に差し替えて一部オリジナル消失までは確認してるからインターネットアーカイブからはどう?
806 :
デフォルトの名無しさん :2011/08/02(火) 19:10:49.85
807 :
797 :2011/08/02(火) 19:14:18.12
わからない事があったらなんでも聞いてね
個人的なやりとりはメールでやれ
こうして二人は運命的な出会いを(ry
アッーーーーーーーーー!
package jp.hellodate; public class HelloDate { public static void main(String[] args) { //Date date1 = new Date(); System.out.print("aaa"); } } 実行するとaaaが表示されますがDate date1 = new Date();のコメントを外すと Errors exist in required project(s):HelloDate Proceed with launch?ってダイアログが出て実行できません 参考サイトからコピペしてるので問題ないと思ってるのですが解決方法をご教示お願いいたします
813 :
812 :2011/08/02(火) 23:29:02.16
プロジェクトを作るときにパッケージ名を書いたのが原因みたいでした よくわかりませんがパッケージは書かないようにします
>>よくわかりませんが これを言うやつにはほんとプログラム任せたくないよな
文句しか言わないやつとは仕事はしたくないよな
そもそも仕事したくないな
負けかな
どっちが効率よいですか? ■現在 --------Main.java------------------ Setting set = new Setting(0); set = Mofulr01.meth1(set); --------Module01.java-------------- public static Setting meth1(Setting set){ //なんらかの処理 return set; } ■案1 --------Main.java------------------ public static Setting set = new Setting(0); set = Module01.meth1(set); --------Module01.java-------------- public static void meth1(){ Main.set = hogehoge(Main.set) } 書いていて案1の方が、メモリを消費しない気がするのです。 実際のコードは、4階層くらい下のモジュールでSettingいじってて リソースを無駄にしている気がしてなりません。
変わらん でもメモリとか関係なく、設計としては前者の方がベター モジュールがMainクラスの静的変数に依存するのはちょっと…
>>819 メモリを気にするってことは、組み込みかなにか?
効率どうこうってことは、それは100万回実行される処理なの?
そうでなければどっちも変わらん
再帰呼び出ししすぎてスタックオーバーフローになった、 とかでなければ気にする必要ないな。
>>822 スタックオーバーフローって違う意味だぞw
N階層下までSettingを引数で渡してくのがメモリの無駄遣いっぽくて嫌だから static経由にしようって話じゃないのか?
メモリ消費をヒープなのかスタックなのかの違い(Cの場合) をいっているのであれば、 Javaは一通りヒープに領域確保するんじゃなかったっけ?
引数や戻り値で渡すごとに防衛的コピーするってんなら話は別だが、 単に参照素通りさせてるだけならヒープは関係ない。
静的フィールドにmutableなものを入れてはいかん。 初期化しようとしてもクラスローダごと落とさないといけないので、 テストが困難あるいは意図せずテストの順序に依存することになる。 また、その静的フィールドがスレッドセーフでないなら 後からどう頑張ってもスレッドセーフなものを作るのは不可能になるだろう。 ところで、引数の代わりにフィールドを使って、引数の数の絶対数を減らすのは そのメソッドのシグネチャの複雑さを軽減することになるので、一般的には良い設計指針。 簡単にはクラスをネストするか、手間かけるならビルダーパターンを使えば良いんじゃね?
引数パラメータのオーバヘッドを真剣に心配するレベルであれば java.lang.ThreadLocal 変数つかおーぜ 余談だが、JVMはヒープにスタックを置いてもよいことになっている。
ThreadLocalは使用目的が違うな。 ヒープにスタックを置いてもよいってのも何か勘違いしとるような。 OSから割り当てられたヒープの一部をVM内部ではスタックに使ってるとか、 VMが実行時最適化するときメモリモデルと矛盾しない範囲でなら ヒープに置くデータをスタックに置いても良いとか。
んだども、VMとしては、別にスタック領域にスタックをおかなくても機能が十分であれば、ヒープ領域においてもかまわない ってことでしょ。
それ単なる言葉遊び
Servletでクライアントからファイルと一緒にテキストボックスで文字列をformから送信したい場合どうすればよいでしょうか? enctype="multipart/form-data"で設定していますが、ファイル単体の場合はもちろん受信ができます。そこにテキストを入れてreq.getParameter() を使用するとnullが帰ってきてうまくパラメータをとれません。
同じフォーム内なら取れるはずだよ
getattributeじゃない?
835 :
832 :2011/08/04(木) 18:45:58.30
>> 833,834 返信ありがとうございます。 もちろん同じフォームです、getParameterではとれませんでした。 getattributeの方で試してみます
>>834 getattributeでも取得できませんでした。 マルチパートでの送信時は、他のテキストパラメータとか一緒に送信できないのかな???
クラス設計が勉強できる本はありませんか? Apacheプロジェクトなどのオープンソースのプログラムを題材として 極力具体的に解説してある本を求めてます。
初心者なんですが、オブジェクトコンポジションについて質問です。 クラスA、クラスBがあり、クラスBがクラスAのインスタンスをクラスBのインスタンス変数の中に格納する設計です。 この場合、サンプルコードでは、クラスBにコンストラクタで、クラスAのインスタンスを引数で受けて、インスタンス変数にセットするようになっています。 しかし、コンストラクタ内で、クラスAのインスタンスを生成して、セットする方がシンプルに思えるのですが、サンプルコードのようにする理由が何かあるのでしょうか?
クラスAのサブクラスに差し替えられるようにするため
>>839 なーるほど!
ポリモルフィズムですね!
ありがとうございました!!
841 :
デフォルトの名無しさん :2011/08/05(金) 01:15:32.25
明示的にthisを指すことは出来ない?Javaの勉強を始めたんだが、 次のケースの時にどういう対処をしてるか教えてほしい。 public Test(String name) { name = name; } Javaでは、引数側のnameを別の名前に置き換えることが通例?
842 :
841 :2011/08/05(金) 01:17:37.70
すまん、thisあったわ。すまん。。。
843 :
デフォルトの名無しさん :2011/08/05(金) 02:06:56.77
RMIについてレジストリ、サーバー、クライアントで行う操作手順を教えてください。
>Apacheプロジェクトなどのオープンソースのプログラムを題材として極力具体的に解説してある本を求めてます。 それ自分でコードリーディングすればいいじゃん。
845 :
デフォルトの名無しさん :2011/08/05(金) 11:51:38.05
これをJavaで書く場合はどんな感じになる? クラスごと渡す方法があるみたいだけど、もっときれいに書けないのかな。。 var House = function(){}; House.prototype = { eventListener: null, setEventListener: function(listener){ this.eventListener = listener; }, fireEvent: function(name){ this.eventListener && this.eventListener(name); }, pinpon: function(){ this.fireEvent("pinpon"); }, rurururu: function(){ this.fireEvent("rurururu"); } }; var myhouse = new House(); myhouse.setEventListener(function(name){print(name);}); myhouse.pinpon(); myhouse.rurururu(); // pinpon // rurururu
スレッドでの処理が完了した時に、コールバックを実行したい。 という場合の定石はどのようなものですか?
>>845 望んでいるものと違う気がするけどこんな感じ?
class HouseEvent {
public void fire(String name) {}
}
class House {
private HouseEvent eventListener = null;
public void setEventListener(HouseEvent listener) {
eventListener = listener;
}
public void fireEvent(String name) {
if (eventListener != null) eventListener.fire(name);
}
public void pinpon() {
fireEvent("pinpon");
}
public void rurururu() {
fireEvent("rurururu");
}
public static void main(String[] args) {
House myhouse = new House();
myhouse.setEventListener(new HouseEvent() {
@Override
public void fire(String name) {
System.out.println(name);
}
});
myhouse.pinpon();
myhouse.rurururu();
}
}
848 :
デフォルトの名無しさん :2011/08/05(金) 15:42:56.83
画面から読み込んだ正整数xの倍数で、 画面から読み込んだ正整数yまで すべての正整数を半角スペースで区切って 画面に表示するプログラム「Kadai2.java」を作成せよ。 ただし、xとして画面から読み込む値は 正の整数が入力されるまで繰り返し入力させるものとする。 というプログラムなんだが、この日本語が複雑すぎてバカなオレには全く分からないんだ。 誰か作成してはくれまいか?
俺もわからん
jdk7にはJavaDBがついてないのですか?
851 :
850 :2011/08/05(金) 17:11:32.40
すいません、ついてました。
852 :
847 :2011/08/05(金) 17:52:10.20
>>847 Javaではそういう形になるんだな。助かったよ。ありがとう!
>>848 合ってるかはしらん
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
public class Baibai {
public static void main(String[] args) throws IOException {
System.out.print("正の整数Xを入力してください:");
int x = input();
System.out.print("正の整数Yを入力してください:");
int y = input();
for (int c = 1, z = x; z <= y; c++, z = x * c) {
System.out.print(z + " ");
}
}
private static int input() throws IOException {
int num = 0;
for (;;) {
try {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String line = br.readLine();
num = Integer.parseInt(line);
if (num > 0) break;
System.out.println("正の整数を入力してください。");
} catch (NumberFormatException e) {
System.out.println("正の整数を入力してください。");
}
}
return num;
}
}
854 :
デフォルトの名無しさん :2011/08/05(金) 22:27:37.20
あれ……コンパイルできねぇ
>>848 自然数を1から始めるとすれば1からyまでの自然数の集合の中のxの倍数が該当する。
最近Javaを学びはじめたんだけど、プログラミング言語Javaの第3版が500円だったら買う価値ある?
>>848 課題なんだから、日本語を教えればOKだよね。
X=10
Y=100
の場合
10 20 30 40 50 60 70 80 90 100
X=7
Y=15
7 14
>>856 学び始めたんだったら、なんだってOK
プロになりたくて、論理や理論を半年の超特急で学びたいとかじゃなければ問題なし。
858 :
848 :2011/08/06(土) 00:02:15.98
ゆとりホイホイか
860 :
デフォルトの名無しさん :2011/08/06(土) 05:06:50.82
スレッドのrunメソッドを抜けだした後に処理をするにはどうすればいい? public void run(){ ... この中でなくて、抜け出した後。 }
わからない事があったらなんでも聞いてね
>>860 別のスレッドを使ってターゲットのスレッドをjoinすればいいと思うよ
>>862 アホか。自分を生成したスレッドで処理するにきまってんだろ
>>863 runの終了、すなわちスレッドの終了ってのは知っての発言?
865 :
デフォルトの名無しさん :2011/08/06(土) 10:48:11.70
>>863 は
Javaという言語の前にjpnという言語を先に学ぶ必要があるようだ。
866 :
863 :2011/08/06(土) 11:12:02.33
ん?なんかへんなこと言ったか?
[メインスレッド]→(スレッド実行)→[サブスレッド1] の関係で
サブスレッド1の終了後に処理したいんだからメインスレッドで
処理するというのか間違っている?
少なくともサブスレッド1が別スレッドを仕込むとか言う
>>862 は異常だと思うが
それじゃあメインスレッドがサブスレッドが終了するまで またなきゃいけないじゃん
別のスレッド=ターゲットのスレッド以外∋メインスレッド じゃね?
869 :
863 :2011/08/06(土) 11:19:41.57
>>867 アホか。タイムアウト付きでjoinするなりステータス見るに決まってんだろ。
870 :
863 :2011/08/06(土) 11:21:43.09
別にサブスレッドの完了を見て後処理するのは別スレッドでもいいけどさあ、 スレッド実行のチェイニングをしたいんでしょ。それを仕込むのはメインが当然じゃない
872 :
デフォルトの名無しさん :2011/08/06(土) 11:49:01.66
要するに
>>863 はJavaの前にjpnという言語を先に学んでから出直してこいということ。
>>860 デザインパターンの「デコラトール」をぜひ学んでみよう。
デコラトール...なんかカッコイイ!(・∀・)
>>874 アホか。単にスレッド終了後に処理したいんならrunに書きゃいいんだよ。
たとえシリアルな実行でも別スレッドでやりたいっていってるんだから、
画面処理とかWindowsのCOM操作みたいに実行スレッドに制限のある状況なんだろ。
そんなところにデコレーターパターン持ってきたら破綻する。
はいはいそーですねっと
「いってらっチョール」が飛び交うオレの職場はアホなのか…
それはアホだね。痛すぎる
文字コード処理で気になったんだが、BOMが付いたり付かなかったり、 なんなのこの糞仕様。 String s = new String(new byte[]{(byte)0xF0, (byte)0xA1, (byte)0x88, (byte)0xBD}, "UTF-8"); dump(s.getBytes("UTF-8")); // → BOMなし dump(s.getBytes("UTF-16"));//→ BOMあり あとUTF-16のリトルエンディアンBOMありにする方法がわかりませぬ。 誰かおしえてください
JavaはUnicodeに弱いので、その辺の制御はできない。 未だにUnicode規格で定められたUTF-8のBOMが扱えなかったり、 JARファイルに不正な文字コードを埋め込んだりする。
>未だにUnicode規格で定められたUTF-8のBOMが扱えなかったり、 いや扱えるだろ? UTF-8のCSVをExcelで読めるようにBOMを埋め込んだ記憶があるんだが。
>>558 遅レスだけど、try の中で return したら finally に行ってくれるんだっけ?
いったん finally にいく。
UTF-8とUNICODEって同じものでしょうか?
エンコード方式と文字セット シフトJISとJISみたいな・・・
>>883 return値を一時待避するためのローカル変数が
コンパイラによってこっそり用意されるはず
tryの中でreturnするの普通だと思ってた。
>>880 UTF-8はエンディアン関係なしにバイト順が同じになるから本来BOM付けないんだけど
一部のテキスト処理系が自分がUTF-8として判断するために勝手にBOMをつける。
んで、そういう処理系は先頭にBOMがないと正しく処理できないんだけど、本来BOMは
付かないもんだから今度は正しく処理してるほうが正しく処理できなくなる。
だから賢いテキスト処理系は二度エンコードを確認してる。Javaはこっち。
そんでもってUTF-8のBOM有りとなしを区別するのは日本だけだからわざわざUTF-8で
エン/デコーディングするときにBOMはつけないのが普通。
ついでにいうとUTF-8が読めなくなるのはBOMのせいじゃなくて特定のUnicode正規化を要求する場合があるから。
UTF-8のBOMの有無で正しく読めなくなるのは単に手抜きしてるそいつが悪いだけ。ExcelとかMSの名のつくソフトとか。
try { …処理1… } catch(hogeException e) { …処理2… return hogehoge; } デバッグしてみたら確実にcatchには入っているんだけど、処理2は通らずに returnされるんだけど、どゆこと??
>>891 全く違う。
BMPの16bitまでは生のバイト列で扱えるものをASCIIと都合をつけるためにわざわざ8bit列に変換してる。
ASCII圏の連中が1バイトで表せれる文字を多バイトで処理するのが無駄だといちゃもん付けてきたから
打開策としてわざわざ別物を作ったんだよ。
>>890 単なる勘違いじゃね?
処理2からreturnするまで1行毎にprintf デバッグしてみれば?
>>889 Java使いは嘘つきが多いな。
BOMはUTF-8であることのシグネチャーとして付けても付けなくても
良いことがUnicode規格で規定されている。つまりJavaソースに
付いていると処理できないJavaが規格に従っていないだけ。
>正しく処理してるほうが正しく処理できなくなる
これは嘘で、付いていても正しく処理しなければならない(Javaはできない)。
「本来付けない」とか「つけないのが普通」というのは
>>889 の妄想。
>UTF-8のBOM有りとなしを区別するのは日本だけ
アメリカではLinuxもWindowsも有無が統一されているのかよ嘘つきめ。
UTF-8のBOMの有無で正しく読めなくなるのは正常。なぜならBOM無しは
文字コードが何であるかの情報が無いんだから。
でも.txt限定だがWindowsのメモ帳やExcelは手動でUTF-8を指定すれば
BOM無しで開ける。これが一番正しい挙動。
>>882 BOM付きUTF-8文書をBufferdReaderで読むと
一行目の文字列にU+FEFFが付いてくるのは「扱える」とは言い難いな。
ただのStringにもBOMを許すという設計が中途半端にコケてる。
1行目と2行目を入れ替えた文字列を再生成すると破綻するし。
>>885 別。
この板に専用スレあるから詳しくはそこで。
Javaのポリシーなんだろうが、どんなに仕様のバグがあっても 互換性のために直さないよね。
>>889 >ついでにいうとUTF-8が読めなくなるのはBOMのせいじゃなくて特定のUnicode正規化を要求する場合があるから。
Javaは正規化表現が違うと読めないのですか?
表示はできなくても読むぐらいはして欲しいのですが。
>>890 例外が発生せずにメソッドを抜けただけでは?
ちなみに先日こんなコードを書く奴がいて困った。感動的な例外の握りつぶし。
try {...}
// catchなし
finally {
return;
}
901 :
デフォルトの名無しさん :2011/08/07(日) 14:59:47.78
これをJavaで書くとどうなる? var name = getName() || "unknown";
String tmp = getName(); String name = !StringUtils.isBlank(tmp) ? tmp : "unknown"; かな?
String name = getName() != null ? getName() : "unknown"; ||はboolでしか使えないからこうするしかない
904 :
デフォルトの名無しさん :2011/08/07(日) 15:29:17.92
三項演算子じゃないと駄目なのか。ありがと!
>>900 は????
お前、人のコードをどうこう言えるレベルじゃないわ
お前派遣だろ?帰っていいよ
>>903 は二回 getName() を評価してるが、それで良いのか?
うんこ
>>900 全く間違ってないぞそれ
常にその場で例外処理することを強制されない言語では
かなり一般的なスタイルだ
909 :
908 :2011/08/07(日) 16:18:34.20
ああfinallyでreturnか ちゃんと読んでなかった
Errorまで握りつぶさんだろ、普通。 RuntimeException握りつぶすのもどうかと思うし。
ErrorだろうとRuntimeExceptionだろうと、例外が発生してもハンドリングのしようのないシステムもあるんだよ
どちらかというと握りつぶしはハンドリングしてるような。 ハンドリングしないなら放置して即死させる印象が。
>>890 処理2が実行されてないのに確実にcatchに入ってることが分かるなんて、どゆこと?
>>913 あ。。。
catchの行にブレークポイント置いてて、そこで止まったら
例外をキャッチしてるってことでいいよね?
ちとやってみる。
スレッドに関して基礎から学べるオススメの本ありますか?
並行処理プログラミング
synchronized についてアドバイスください。
複数のスレッドがあり、それぞれが、とあるカウンタをインクリメントしにいきます。
この動作を排他制御の対象にするべく、以下の二つの書き方をしました。
OK:
http://ideone.com/ZKUGl synchronized public void countUp(int n) {
int tmp = counter.intValue();
tmp += n;
counter = Integer.valueOf(tmp);
}
NG:
http://ideone.com/Qg0Gr public void countUp(int n) {
synchronized(counter) {
int tmp = counter.intValue();
tmp += n;
counter = Integer.valueOf(tmp);
}
}
この差はいったいどういうわけでしょうか?どうして NG 例ではインクリメントを排他にできないのでしょうか?
>>917 それだけいうならcounterを変えちゃいかんってことになる。
もっと簡単にAtomicInteger使え。
>>917 counterのインスタンスで排他制御するから。
例えば synchronized(Integer.valueOf(0)) {} と
synchronized(Integer.valueOf(1)) {} は並列実行できる。
並行処理と並列処理はどう違うんですか?
>>916 ありがとうございます。amazonで見かけて気になってました。
さっそく見てみます
再代入を連発してるのに、そのインスタンスで排他制御はないわなw
>>917 private Object countLock = new Object();
を定義してそれでsynchronized(countLock)しろ。メソッドにsynchronizedは使うな。
>>920 あんまり相互に連携せずに同時に実行してるのが平行実行。
蜜に連携して通信頻度も多いのが並列実行。
>>917 counterはCountクラスのフィールドなので、Countインスタンス単位で排他制御する必要がある。
しかし、後者はcounterインスタンスに対してロックを取得しようとしている。
couter参照先インスタンスはcountUpメソッド呼び出しごとに生成されるのでCountインスタンス単位での
排他制御には用いることができない。
(counterの参照先が変わらないのであれば今回のような用途で用いることが可能だが)
どっちかしなくても逆
929 :
917 :2011/08/08(月) 00:39:20.04
>>918 ,
>>919 ,
>>923 ,
>>926 コメントありがとうございます。感謝しています。
>>926 >couter参照先インスタンスはcountUpメソッド呼び出しごとに生成される
つまり、
>>917 >int tmp = counter.intValue();
の時点での counter 参照先と、
>>917 >counter = Integer.valueOf(tmp);
の時点での counter 参照先が違う、ということでいいでしょうか。
>Countインスタンス単位で排他制御する必要がある。
となると、synchronized(this) とするのがいいのでしょうね。実際これでうまくいきました。
>>923 まあ、べたな ciriticalsection/mutex/semaphoe をつかう(p-thread とか win32api とかの)考え方に近いですね。メソッド全体を synchronized する/synchronized(this)とするのがまずい理由を、もしよろしければ。
>>892 お前も間違えてんぞw
UniCode はキャラクターセット
ASCIIもキャラクターセット
UTF-8 やUTF-7 はエンコード/デコード方式
UniCodeは見た目バイナリデータのように見える。
UTF-8エンコードしたUniCodeは、先頭が必ず1で始まるビット列
UniCodeは、標準的にUTF-8でエンコードすることが決まっている。
エンコードする理由は、
8ビット転送や8ビット単位処理しかできない系でも文字化けせずに転送することを可能にするため。
メール(SMTPやPOP)は7bit or 8bit転送が基本
HTMLも8bitだと思っていた方が良い。
コンピュータ内部は、8bitだったり16bitだったり32bitだったり11bitだったり・・・
んで、 なんでUniCodeでUTF-8が標準的なエンコードに指定されているか、だが、 いろいろ理由があるが、その1つにASCII (キャラクターセットでおもに7bitASCII )との親和性が高いこと。 なぜなら、ASCII をUTF-8エンコードすると、7bitASCIIのbit列の先頭に0をつければよいことと、 ASCII 以外の文字( この場合はUniCode )は先頭が必ず1なので瞬時に確認できること。 だから8bitASCII ( 半角かな ) をUTF-8エンコードしても8bitASCIIとは認識されず、UniCodeの文字と認識される。 =文字化け
てか、たんにエンコード方式なんだから、 UniCodeに限らずバイナリデータならエンコードできる。 ただし、バイナリデータは、 Base64やQエンコードが一般的なので、見ることはないだろう。 せいぜいUniCodeのエンコードの時くらいか。 だから勘違いする人が多いんだよね。
この3レスに渡る壮大なバカレス。どこから突っ込んだら良いものか。。
>>929 横から失礼
そのメソッドだけならあんまり困らないけど、
synchronized (this)はロックの範囲が広くなるから
速度の面から不利になることがあるってところじゃないかな。
synchronizedメソッドはメソッド全部で排他制御されるので、
ロックが要らない部分があると遅くなるよ。
正しい事言ってるなら何でもいいよ。
>>933 やめとけ
こういう馬鹿は突っ込まれるとキレだすタイプ
>>934 >>923 なるほど。調べたところ、synchronized インスタンスメソッド=synchronized(this) で、そのインスタンスを触るスレッドが一つだけに限定されロック範囲が広くなるのですね。
深く納得しました。ありがとうございます。
いや、むしろ
>>892 が切れないかと心配でwww
え?UniCodeって16bitなんだ。へぇ〜www
とか
ASCII圏って何?
とか
別物って何?
とか
突っ込みどころ満載なんだけどwww
>>937 >インスタンスを触るスレッドが一つだけに限定
本当にわかってるのかな。
「thisにロックをかけてからアクセスするようにしましょう」という調停であって、
ロックかけずにアクセスするスレッドがいると排他にならないんだよ。
941 :
デフォルトの名無しさん :2011/08/08(月) 09:36:37.19
文字列からXMLを作る方法ってない? ストリームを渡すんじゃなくて直に文字列を渡したい。 Document doc = builder.parse(new ByteArrayInputStream(xml.getBytes("utf-8")));
InputSourceにStringReaderを食わせてそれをparseすればよい
特定のインターフェースを実装してるサブクラスを列挙するのはどうやるんですか?
944 :
943 :2011/08/08(月) 11:49:20.08
ためせ、それから質問しろ
いや、そうじゃなくてもっとスマートな方法は2001年以降実装されてないのかと。
947 :
デフォルトの名無しさん :2011/08/08(月) 20:38:20.89
コードとかの話してるなかごめんな javaってダウングレードできるのか?
せめて「できるのでしょうか?」だろ
949 :
デフォルトの名無しさん :2011/08/08(月) 22:25:20.48
コードとかの話してるなかごめんな javaってダウングレードできるのでしょうか?
やってから言えカス。
せめて「やってから聞きなさいよ、バカ!」だろ
ダウングレードってコンパイラのことで良いのか?
954 :
デフォルトの名無しさん :2011/08/09(火) 01:10:12.65
初歩的な質問すみません。 public class test { int[] i = new int[2]; ← i[0] = 1; i[1] = 2; } とすると、 「このトークン";"(「←」箇所の";"です)の後には"{"を指定する必要があります」と、エラーが出ます。 public class test { int[] i = new int[] {1, 2}; } とするとエラーは起こりませんし、 public class test { public static void main(string[] args) { int[] i = new int[2]j; i[0] = 1; i[1] = 2; } } この場合もエラーは起こりません。。。 一番上の表記法は何か間違ってるのでしょうか。教えてください。
>>954 public class test {
int[] i = new int[] {1, 2};
}
この i はフィールド変数
public static void main(string[] args) {
int[] i = new int[2]j;
i[0] = 1;
i[1] = 2;
}
この i はローカル変数
public class test { int[] i = new int[2]; i[0] = 1; i[1] = 2; } はint[] i = new int[2]; が悪いわけじゃなくて,メソッドの中でもないのに i[0] = 1;とかi[1] = 2;をやってるのが悪いっていう
957 :
デフォルトの名無しさん :2011/08/09(火) 01:40:43.86
>>955 ,
>>956 あーなんとなくわかりました。
クラスの地の文ではフィールドを定義するだけで、メソッド内ではないので代入などしてはだめだけど、
2番目の宣言と同時に値も初期化をするのはセーフってことですかね。
ありがとうございました。
> int[] i = new int[2]j;
画像の回転について質問です。 画像を1度ずつ回転させたImageオブジェクトの配列を作成したいのですが、どうしたらいいでしょうか? 今のところGraphics2Dのrotate()で描画先のGraphicsを回転させているのですが、無駄が多いような気がしまして・・・
AffineTransformOp使うと、既存のイメージから回転イメージを生成できたように思う
>>960 回答ありがとうございます
ただ、AffineTransformOpでやってみたら変換後の画像がやたらとぼけてしまうのですが、これはどうしたら直せますか?
すまぬが、アイディアをいただけないか? メインスレッドがあり、このスレッドが子スレッドを4つ立ち上げる。 メインスレッドと子スレッドのどこでも参照可能な変数がいくつか、ある。 この変数を変更できるのはメインスレッドのみ。 子スレッドはReadのみ可能とする。 子スレッドは今のところ同一マシン上で動いているが、 将来的には別マシンに移行もあり。 どうするのが良いか・・・・悩んでいる。
log4jの設定ファイル(log4j.properties)が上手く読み込めません。 ソースフォルダの下に置いてEclipseから実行しているのですが、 log4j:WARN No appenders could be found for logger (hogehoge.classname). log4j:WARN Please initialize the log4j system properly. というエラーが発生します。 どうすれば正しく動くようになりますか? よろしくお願いします。
自分でどんだけ調べたの?
965 :
デフォルトの名無しさん :2011/08/09(火) 16:56:34.36
自由にオーバーライドされたメソッドをリフレクションで呼び出したい。 public abstract class Hoge { public void test() { リフレクションで、勝手にオーバーライドされた hoge メソッドを実行したい。 } } new Hoge () { public void hoge() { System.out.println("hoge"); } } このインスタンスで、testを実行したときにhogeを動的に呼び出すにはどうすればいい?だれか助けてくれ。。
>>961 バイキュービック補間とかは試した?
あとは満足いくまでいろいろRenderingHintsいじってみよう。
>Graphics2Dのrotate()で描画先のGraphicsを回転させているのですが、
>無駄が多いような
こっちの方がハードウェア支援の回転とかに頼れそうで効率よさげだけどなぁ。
GDIとかDirectXとか詳しい人は補足よろしく。
本当にすまない。 誰か教えてくれまいか? ある変数は自ファイル他ファイル、サブクラス自クラス問わず読み込むことができる (参照ではなく、Readしかできない) ところが、特定のクラスからなら、変更できるようにしたい。 アクセス修飾子では不可能。 java.securityを使うか、 簡易的にハッシュをやり取りして書き込みを拒否するか、 どれにしても回りくどい。 なにか良い方法はないでしょうか?
>>970 変数はprivateにして、
getterはpublic、setterにはprotectedないしはデフォルト可視性を使う
というやり方で、どの辺に不具合があるのか分からんのだが
>>971 setter がprotected や なし だと、自ファイルの他クラスから書き込めるのかな?って。
自分が混乱してるのが良く分かる。
>>971 setter が protected や なし だと、同一パッケージから書き込めるでしょ?
基本的にクラスが異なれば、参照だけできて、
特定のクラスだけ書き込めるようにしたい。
やりたいことを言い換えて簡単に言うと、
メンバー変数やsetterを含むすべてのメソッドはprivateにしたい。
特定のクラス(複数)からだけはアクセスできるようにしたい。
>>973 どういう時にそういう処理が必要になるのか知りたい。
>>974 レスありがと。
■概要
公開情報を持ちたいのだが、
勝手に、もしくは不用意に、もしくはオーバーライドして書き換えられないようにしたい。
■詳細
比較的大きな規模のコードで、大きく大別すると、信頼ができるサーバ側のクラスと、
クライアント側が用意するクライアントサイドのクラスとある。
クライアントサイドのクラスは今のところサーバで動かしているが
将来的にはAPIを公開してクライアント側で作ることも想定しているのでまったく信頼できない。
サーバー側にクライアントサイドクラスがあったとしても、クライアントサイドクラスのプログラムミスで
公開情報が不用意に変更されないようにもしたい。
つまりクライアントサイドクラスは、サーバーサイドクラスにレスポンスを返すが、
サーバーサイドクラスだけが、クライアントから受け取った情報を元に、チェックし、精査して公開情報を書き換えたい。
■まとめ
分かりやすく書くと、公開情報の情報の流れを一方向にしたい
サーバー側からクライアント側への情報の流れだけを作りたい
ということ
>>975 ■補足
クライアントサイドクラスは、サーバーサイドクラスでも動いている必要があり、
サーバーサイドクラスから呼ばれる。
アプリケーションサーバ使わないで実現するの? ・アクセス修飾子の役割を勘違いしている。 ・クラス設計がおかしい。リクエストとレスポンスのクラスを分けるとか。 ・サーバの役割がおかしい。クライアントに状態管理を委譲するな。サーバ自身で管理しろ。
わたし企業での開発とか詳しくないけど クラスの違いでアクセス元を判別しようとする必要性が分からない サーバーサイドのクラスを同じパッケージにして チェックを伴った受け取り部分だけ公開すりゃいいんじゃないの それこそクライアントサイドのクラスが何であるかなんて 判別する必要が無いのでは? APIとして考えてるんでしょ?
>>977 アプリケーションサーバーも、DBも使わない。
んでトランザクション処理をさせたいんだよね。で了承された情報だけをPushで公開したい。
>・アクセス修飾子の役割を勘違いしている。
それはあるかなぁ
>・クラス設計がおかしい。リクエストとレスポンスのクラスを分けるとか。
完全に分離はできている。Queueを使って橋渡しをしている。
>・サーバの役割がおかしい。クライアントに状態管理を委譲するな。サーバ自身で管理しろ。
Status管理は完全にサーバーサイドクラスが行っているので問題はないと思うけど。
今は、1つのサーバーサイドクラスのサブクラスとして公開情報をメンバー変数としておいている。
メンバー変数はすべてprivateで、サブクラスはstaticで宣言している。
そうすると、ほかのサーバーサイドクラスからその値を変更できないんだよね。
でここがポイントなんだけど。。。
その公開用サブクラスに、setterメソッドをpublicで置きたくない。
スレッドセーフにもならないし、
セキュリティ上も好ましくないし、
サーバーサイドは社外の人が開発する可能性もあるので悪意のあるコードを紛れ込まされるのだと困る
(≒変更可能だと困る)
「単なるミスでしたw」と言いながらコーディングミスされても困る。
あいかわらずアホなスレですなw
>>978 サーバーサイドのいくつかのクラスも、公開情報にアクセスして変更する必要があるので、困ってる。
クライアントだけを考えれば、分離すれば済むんだけど。。。
図を描いてみた ゴールはこちら。 情報の流れを一方向にしたい ClassA → ClassB → ClassC ↑ ↑ ClassD ClassE 一般的にはどうしたらよいのだろうか?と言う話
983 :
デフォルトの名無しさん :2011/08/10(水) 15:41:01.32
>>981 サーバサイドだけにsetterを公開すればいいじゃん
あだぷた くらいあんとにはらっぱーだけをこうかいしろ
田中君は鈴木君の命令だけは聞くけど他の人の命令は無視するとする。 1.田中君に鈴木君のインスタンスを持たせる。 2.鈴木君は田中君への命令を自分の変数にセットして田中君を呼び出す。 3.田中君は鈴木君のメソッドを呼び出して鈴木君からの命令を受け取る。 4.他の人が鈴木君を騙って2の処理で田中君を呼び出しても、3の処理で 鈴木君のメソッドを呼び出したときに鈴木君の変数に値がセットされていないから 命令を受け取れない。 こんなのではダメ?
ファイルにしてアクセス制限をつけるじゃいかんのか
>>985 そうすると、社外の人が作ったサーバーサイドクラスから変更ができるよね?
>>987 ほぼ、それをやっている。
公開情報からハッシュを生成して、サーバーサイドに上げる。
公開情報にsetterを用意して、正しいハッシュ提示した場合のみ変更し、
正しく無い場合はエラーを戻している。
これの問題は、
公開情報クラスにpublicなsetterを作らなければならないこと。
そのほかには、
サーバーサイドのとあるクラスが公開情報クラスをロックし続ける、ってやつ。
なんかあまりうまくいかなかったのであきらめたけど。
>>988 kwsk
求めているのはそれっぽい、というオーラを感じる
>>990 もうパスワードでいいじゃん
ていうか設計がきもい
誰に聞いてもその設計はきもいって言うと思うよ
きもい設計でも突き詰めていけば何か面白い発見があるかもしれない
>>992 てか、自分でもキモイので質問しているんだけど・・・
早い話が、
Javaでポリインスタンス化が簡単にできれば話は早かったりする。
最新の実装では、(うまくいくか分からないけど)次のようなコードを書いている。
○公開情報(マスター)をサーバーサイドのサブクラスとして定義
○マスターのコピーインスタンスをRead Onlyで生成
基本的に参照はコピーインスタンスで行う。
参照が必要なたびに、サーバーサイドクラスがコピーインスタンスを生成
うーーん、これまたきれいじゃないけど・・・
読み出す奴にはコピー渡しときゃいいって言うなら、 許可情報持たしたクラス(仮にXと呼ぶ)でも作ればいいんじゃない? ・読み出し専用のクラスの場合 必要なデータのリストをXに持たして、サーバに登録 → サーバへの要求には常に登録したXを渡す 情報が欲しいなら、データを要求するメソッドを呼ぶ。サーバはXを見て、必要なデータだけコピーして返す もし、書き込み要求をしてきても、許可が無いからエラーを出す ・書き込みもしたいクラスの場合 ↑と同じだが、登録のときに書き込みもしたい旨を伝えておく。 → 事前に決められたクラスにだけ書き込み許可を出したいなら、 Xに登録要求してきたクラスへの参照を持たせて、instanceofでチェックするとか 大本の仕様・要求ってクラス(の持つ機能っていうのか?)で解決する類の問題じゃないと思うのだけれど。
public class Suzuki { private Tanaka tanaka; private String meirei; public void setTanaka(Tanaka tanaka) { this.tanaka = tanaka; } public void setMeirei(String meirei) { this.meirei = meirei; } public String getMeirei() { return meirei; } public String tsuuchi() { tanaka.henkou(); } } public class Tanaka { private Suzuki suzuki; private String meirei; public Tanaka(Suzuki suzuki) { this.suzuki = suzuki; } public void henkou() { meirei = suzuki.getMeirei(); //鈴木君が田中君に聞きに行く。 } }
public class Main { public static void main(String[] args) { Suzuki suzuki = new Suzuki(); Tanaka tanaka = new Tanaka(suzuki); //1.田中君に鈴木君のインスタンスを持たせる。 suzuki.setTanaka(tanaka); suzuki.setMeirei("右向け左"); //2.田中君への命令を変数にセット。 suzuki.tsuuchi(); //3.田中君へ通知する。 } }
デザインパターンの「オブザーバー」のような処理。 変更があるという通知をするだけで実際の変更処理はそれぞれのクラスに任せる。 田中君の命令を変更するメソッドはないので他のクラスは田中君に命令できない。 変更がある場合は通知のみで実際の変更処理は田中君のほうから鈴木君に聞きに行く。 最初からオブザーバーって言ったほうが早かったか。
>>994 サーバとクライアントがあると(VMが分かれてると)、どっちにしろあんたの言う
> 基本的に参照はコピーインスタンスで行う。
> 参照が必要なたびに、サーバーサイドクラスがコピーインスタンスを生成
とおんなじようなことが発生する訳だけど、理解してる?
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。