【初心者】Java質問・相談スレッド125【歓迎】
3 :
デフォルトの名無しさん :2009/04/14(火) 20:26:14
早く潰れろ。糞スレ。
俺が書いたからこのスレは終了記念日
5 :
デフォルトの名無しさん :2009/04/14(火) 20:40:53
double i = 1.0/0.0 これゼロ除算で割り込みにならないんですね。 初めて知った。
名前空間とかはHTML要素にひとつずつだと思ったが、これは予想外だなw
まあ継承するから別にいらないんだけどご丁寧に付けてるね
JavaでMIDIを演奏してるんですが、 \lib\audioにあるsoundbank.gmを消したときに 音質が良くなる場合と全く音が鳴らなく場合があるんですが 原因は何でしょうか
よくなる場合→別の場所にあるサウンドバンクが見つかった。 ならない場合→サウンドバンクが見つからなかった。
public static void main(String[] args) って書いてるんですけど、 public static void main(String args[]) この様な書き方も有る様ですが 実際何が違うんですか?
下はC言語スタイルで、C言語、C++といったJavaより前に出来た言語のスタイル。 ソースコード上では下はそれらと互換があるけど、Javaでは上が正解だから忘れて良い。 ちなみに違いはない。
>>11 下は C から来た人に馴染みがあるというだけの話。
C は型指定と配列指定が別物だったから配列と非配列をまとめて char a, b[20]; のように宣言できた
(だから変数の後に [] を付けていた)。ただ Java が出る前には同一宣言内にポインタや配列を
混在させるのはよろしくないね的な風潮ができあがって、Java では配列指定を型宣言に含めて
char[] a, b; か char a, b; のどちらかしかできなくなった。
どちらで書いてもコンパイラの解釈は同じだが Java 流儀だと前者で書く。
public class test { public static void main(String[] args) { /* [] を変数名の前に書く場合と後ろに書く場合 */ char[] data = new char[10]; // (一般的な書き方) char u[], v; // uのみ配列 char x, y[]; // xのみ配列 // char s, []t; // コンパイルエラー × /* 変数を同時に2個宣言する */ char[] o, p; // oもpも配列 char []q, r; // qもrも配列 (変な書き方) char[] w, z[]; // wは1次元配列、zは2次元配列 w = new char[10]; z = new char[10][10]; } }
15 :
デフォルトの名無しさん :2009/04/15(水) 22:54:09
public class sample { public static void main(String[] args) { int hokan = 0; int[] Num = {10,9,8,7,6,5,4,3,2,1}; for(int i = 1; i<Num.length; i++) { if(Num[0]<Num[1]) { hokan = Num[0]; Num[0] = Num[1]; Num[1] = hokan; } } for(int i = 0; i<10; i++) { System.out.println(i); } } } 初心者で申し訳ないです、1〜10までの数字を逆に並び替えたいのですが うまくいきません、間違っているところがあればご指摘お願いします。
16 :
デフォルトの名無しさん :2009/04/15(水) 23:00:33
java.util.Stack使えよ Don't repeat yourself.
>>15 まず i が 1〜9 までの 9 回しかループしていない。それから Num[0] は初期状態で 10 のところで
Num[1] は 9 のところ。つまりループしながら配列内のその 2 箇所の入れ替えしかできていない。
18 :
デフォルトの名無しさん :2009/04/15(水) 23:10:34
ひっかけだろうwwww index回してないし、最後のsysoutだけじゃん。やってるのは。w
>>15 >初心者で申し訳ないです、1〜10までの数字を逆に並び替えたいのですが
>うまくいきません、間違っているところがあればご指摘お願いします。
public class sho125_15
{
public static void main(String[] args)
{
int hokan = 0;
int[] Num = {10,9,8,7,6,5,4,3,2,1};
for(int i = 1; i<Num.length; i++)
{
if(Num[i-1]>Num[i])
{
hokan = Num[i-1];
Num[i-1] = Num[i];
Num[i] = hokan;
}
}
for(int i = 0; i<10; i++)
{
System.out.println(Num[i]);
}
}
}
>>19 それ 9 8 7 6 5 4 3 2 1 10って表示されね?
数値をソートしたいのか配列のインデックスを逆転させたいのかもはっきりしないしな。 int[] Num = {10,9,8,7,6,5,4,3,2,1}; Arrays.sort(Num); System.out.println(Arrays.toString(Num));
Mainクラス(中略) public void run() { Iterator it = effects.iterator(); while(it.hasNext() == true) { // ここでエラー Effect ef = (Effect)it.next(); ef.update(); } } public void effectAdd(int effectNo) { effects.add(new Effect(this, effectNo)); } ---------- Effectクラス(中略) public Main m; Effect(m) { this.m = m; } public void update() { if(ある条件) m.effectAdd(effectNo); } ---------- とあるゲームを作っていて、上記のようにエフェクト追加、情報更新処理を行っているんですが、エラーが出てしまいます。 少し調べてみたところ、IteratorはhasNextで要素を探している時にaddするとエラーになることが分かりまた。 こういう場合は配列とか、他のリスト構造(?)にするしかないんでしょうか?
するしかない。 Iterator it = new ArrayList(effects).iterator(); ただしそれがそのプログラム設計的に妥当なのかは別の話。
24 :
22 :2009/04/15(水) 23:38:53
>>22 のプログラムにおかしな点があったので修正します。
ちなみにここで見やすいようにスペースを全角にしてます。
Mainクラス(中略)
private ArrayList effects = new ArrayList();
public void run() {
Iterator it = effects.iterator();
while(it.hasNext() == true) { // ここでエラー
Effect ef = (Effect)it.next();
ef.update();
}
}
public void effectAdd(int effectNo) {
effects.add(new Effect(this, effectNo));
}
----------
Effectクラス(中略)
public Main m;
Effect(Main m) {
this.m = m;
}
public void update() {
if(ある条件) m.effectAdd(effectNo);
}
----------
>>23 そうですか、分かりました。
ものすごい早いレスありがとうございました。
イテレータは元コレクションのビューだから、 元のコレクションが変更された時点で操作不能になる。 CopyOnWriteArrayListってのがあるからそっち使えば? こっちはビューをコレクションを切り離す事が出来る。
27 :
デフォルトの名無しさん :2009/04/15(水) 23:45:19
>>24 ArrayListじゃなくてLinkedListをこんな風にして使え
List list = Collections.synchronizedList(new LinkedList(...));
28 :
19 :2009/04/16(木) 01:05:05
>>15 public class sho125_15
{
public static void main(String[] args)
{
int hokan = 0, i, j;
int[] Num = {10,9,8,7,6,5,4,3,2,1};
for(i = 1; i<Num.length; i++) // 比較する1個をまず選ぶ
{
for(j = i; j<Num.length; j++) // 選んだ数字を以降の全ての数字と比較する
{
if(Num[i-1]>Num[j])
{
hokan = Num[i-1];
Num[i-1] = Num[j];
Num[j] = hokan;
}
}
for(j = 0; j<10; j++) // 毎回確認する
System.out.print(Num[j]+" ");
System.out.println();
}
for(i = 0; i<10; i++) // 最終結果の表示
System.out.println(Num[i]);
}
}
>>9 もしWindowsなら、
soundbankを消すとMSGSが鳴る。MSGSはデフォのsoundbankより波形容量が4倍あって、その分音質がいい。
Vista以降のMSGSは、XGリセットやBankSelectですぐに黙り込む。
初学者なんですが、ファイルを作るところまで学習して、 エクスプローラのアドレスバーからパスをコピーして いろんなところにファイルを作ったりしてましたが、 Windowsのパスってパスデリミタが\ですよね。パスが深いと いちいち\\とエスケープするのが面倒になってきました。 で勉強にもなるかなと、引数にフルパスを取って (ソース中にハードコーディングして埋め込み) \を\\にするようなメソッドを書いてみようとしましたが、 ソース中に\があるとコンパイルさえしてくれません(Eclipse3.2)。 そこで質問なんですが 1) 標準クラスライブラリでこのような、自動エスケープシーケンスとも いえるような機能ってあるのでしょうか。あったら教えてください。 2) そもそもソール中に\は存在してはいけないのでしょうか? うまく回避する方法はないのでしょうか。 3) クラスの自分自身の絶対/相対パスを返してくれるメソッドは ないものでしょうか。Class c = this.getClass();から始まるサンプル を見つけましたが、IDE上ではthisが赤い波線になり「staticコンテキストでは thisを使用できません」と全く意味が分かりません…。 結局何がやりたいかというと、キーボードから1を入力するとD:\myFolder1にファイルを作成、 2を入力するとD:\myFolder2に…というようにファイルを選択された場所に作る、 という機能のまとまりを作成してみたいのです。 よろしくご教示ください。お願いいたします。
鉢物の植え替えの時、よく耳にするのは、”根鉢を崩さないで植え替えるように・・・...
>>30 2)
char a = '\\';
String ss = "\\";
とする。2個の\\なら、4個にする。
>>30 それは「キーボードから1を入力すると〜」というプログラムとは別に「ソースに貼り付ける前に
¥ を ¥¥ にエスケープする」プログラムを作らなければならない。コンパイル時にエスケープされて
なきゃいけないのを実行時にエスケープするコード書いても仕方がない。
クリップボードを監視してコピペ前にエスケープするプログラムでも書いてみたら?
34 :
デフォルトの名無しさん :2009/04/16(木) 16:21:28
Vector は raw 型です。総称型 Vector<E> への参照は、 パラメーター化する必要があります コードを打ったら↑なwarningが出るんだけど、これは放っておいて いいのですか。
無視しても実害はないけど 入れる物が決まっていない時: Vector<?> foo = new Vector<Object>(); 入れる物が決まっている時: Vector<String> foo = new Vector<String>(); 下のように書けば間違えて foo に Integer 入れようとした時にコンパイラが検出してくれる。 あと特に理由がなければ Vector なんて遺物使わないで ArrayList 使いなさい。
DocumentBuilderFactory に Schema オブジェクトを 1 つだけ設定できるようだけど 複数の XML Schema が混在する XML の場合は DOM にした後にテメェで Validator 動かさなきゃだめかね。
38 :
デフォルトの名無しさん :2009/04/16(木) 16:31:51
うーむ、javaは難しいなあ 本に載っていることを、ただただ純情にやっていってます。 >Vector なんて遺物使わないで ArrayList 使いなさい ↑こういうことが分かるようになりたいものです。
>>38 > ↑こういうことが分かるようになりたいものです。
Vector, ArrayList の話に限っていえば、参照している本が古すぎるだけってこと
まーたArrayList厨か
迷うくらいなら思考を停止してArrayListを使っとくのも悪くない。 初学者がSetの代わりにArrayListを使ってても笑って許せるというもの。
VectorとArrayListの違いがわからんならArrayList使えばいいと思うけど。
ぶっちゃけPriorityQueueとか覚えても使う機会がなさ過ぎて、 いざ実践となると、うっかり自分でソートしてたりするから基本形だけ覚えればいい。
44 :
31 :2009/04/16(木) 20:43:08
>>32-33 レスありがとうございます。
プログラム実行中にIDEのコンソールから
File file = new File(str); へ
C:\test\test1.txt を
タイプまたはコピペで渡すことでファイルは作成できました。
コンパイル後の実行中には\は存在していいんですね
(デバッガではstr "C:\test\test1.txt"となっていましたし)。
今までの学習の復習としてこれからゴテゴテと機能を追加予定
ですのでその時に
>>32-33 お二方のアドバイスを活かしたいと
思います。クリップボード監視とか皆目見当がつきませんが…。
別の質問させていただいていいでしょうか。
コンソールアプリでユーザがqを押すまで繰り返すという処理を
do{
(何かの処理)
if (isQuit.equals("q")){
System.out.println("終了=q \nもう一度=q以外\nをタイプしてリターン");
break;}
}while (true);
としているんですがこれって良くないのでしょうか。たしかに break; でwhile
ループを抜けるとか本筋じゃない気がしますが、理想的にはどうすれば
まっとうなのでしょうか。
ご教示いただければたすかります。
よろしくお願いいたします。
while(true) に break の組み合わせなんて普通に使うが。 while(true){ int len = in.read(buffer); if(len < 0) break; out.write(buffer, 0, len); }
Classクラスというのが登場した。 いままで出てきたクラスと毛色が違う 解説を読んでも概略する把握できないですねえ 何をやっているんでしょうか
47 :
31 :2009/04/16(木) 21:01:26
>>45 早速のレスありがとうございます。
そうですか安心しました。
どこかのページにwhileループは使わないで
ifをつかって(?理解不能で忘れました)
やったほうがいいとかあったものですから
心配になっていました。
ありがとうございました。
>>46 メタプログラミングとか言うんだけど、まぁクラスの情報を持ってたり、普通はコードを書いて
コンパイルしなきゃいけない事をプログラムの実行中にやったりするためのもの。
例えば
List list = new ArrayList();
list.add("foo");
は、こうでも書ける (適当)。ここで指定するクラス名やメソッド名はただの文字列なので
ぶっちゃけユーザに入力させたものでも良い。
Class<?> clazz = Class.forName("java.util.ArrayList");
Object obj = clazz.newInstance();
Method method = clazz.getMethod("add", Object.class);
method.invoke(obj, "foo");
まぁ最初のうちは「クラス情報クラス」とでも思っておけば良い。
>>48 なんとなくわかりました。
Class、Object、Methodというクラスも確かにありました。
コードの中でコードを生成するんですね。
ありがとうございました。
APIというのがあって、そこに全てのクラスが載っているのを知りました。 大量のクラスがあるけど、全部覚える必要があるんですか、それとも、 よく使うのはほぼ決まっていて、経験と慣れみたいなもんですか。 全クラスの何パーセントくらいを使えるようになれば社会に出て通用 するんでしょうか。
>>50 java.lang, java.util, java.io あたりは何を作るにも必須。あとは自分が作る
プログラムの専門分野ごとに異なる。
業務系なら java.sql, javax.xml に JEE あたりが必須になってくるし、ゲームは
よく知らんけどベタな AWT や javax.sound が必要になるんじゃないのか。
52 :
15 :2009/04/16(木) 22:05:44
レス遅れました、ご指摘戴いた部分を参考に完成することができました。ありがとうございます。
初心者くらいですが、これって作りたい物に合わせてAPIで調べて それを入れていく感じ・・・でよろしいでしょうか? それとも、逆引きAPIみたいなのを調べて行くんでしょうか。 ワタシは、初心者本とアルゴリズム本を精読した程度ですが。
正直 CORBA 関係は SE コアに入れなくても良かったと思う。
>>53 最初の頃はまず目的 (やりたい事) に対する手段 (どれを使えばいいか) が分からないだろうから
逆引き API みたいなのが良いんでないの。そのうち「これ系の機能はこのパッケージ」っての
が分かってくるから。
Integer.parse()で"-1"とかは当然認識できるものとして、 "+1"がエラー吐くのがどうも納得いかない。 というか、文字列をサクッと計算してintに戻してくれるようなAPIはないもんか。
正規表現通してからparseIntすると楽
Scripting API は環境依存だろー。Mac だと Rhino どころか JavaScript ですらなく Apple Script だぜ? XPath をうまく使えば四則演算程度ならおk。
>>56 import javax.script.*;
public class Hoge {
public static void main(String[] args) throws ScriptException {
String expr = "+1";
new ScriptEngineManager().getEngineByName("ECMAScript").eval("print(" + expr + ")");
//new ScriptEngineManager().getEngineByName("ECMAScript").eval("print(" + args[0] + ")");
}
}
>>56 javaccとかantlrとかでパーサを作れば?
自分勝手に使いやすいように仕様決められるし。
Logging API って log4j みたいに起動時のシステムプロパティに設定ファイル指定したりできないの?
四則計算くらい自分でパースすればいいんじゃないだろうか。
四則演算くらいなら手書きでパーサを作っても大した手間でないけど 56がどんな文字列をパースしたいか次第だな
あるある
>>62 Logging APIに関連するシステムプロパティはLogManagerのドキュメントに説明がある。
Properties形式のプロパティファイルならjava.util.logging.config.fileで指定できる。
あるサイトの、IDやパスを自動的に入れて、ボタンを押し、 その中のデータを持ってくる方法ってありますか? データを持ってくるのは楽なんだけど、ボタンを押すのが、、、もしかしてJavascript?
最後の一文のせいで誰もが反応に困る質問に変化したな。
67だけど ごめん、自己解決した。ClickってJavascriptにあった。。
ブラウザ操作の自動化という事なら Robot について調べれ。 シナリオ通りにリクエスト投げまくって最後の結果を取りたいというのなら Apache の JMeter (だっけ?) でも使え。
>>70 ありがとう
そうです。自動でデータを持ってきて、DBに入れるJava作ろうと思ってました。
DB入れるのは簡単だったんだけど、ボタン押すことで考えが止まってました。
ボタンを押すというGUI上のアクションじゃなくて、 formのactionにだな・・・、まあ解決したんならいいか。
トレードロボット基本コンポーネントパッケージ API仕様 これかぁ。だよなぁ。
んー「トレードロボット」かw 変なところへ行っちゃったっぽいなあ 深夜にいろいろありがとう
暴走して追証食らわないようになwww 資金は有限。
信用できないものに信用取引を任せなければ問題ない
78 :
デフォルトの名無しさん :2009/04/17(金) 15:33:06
当分現物買いの機会はなさそうだけどな
java空売りしてmsft買っとけ!
javap が出力するヘッダファイルってプラットフォームによって変わったりする?
プラットフォーム毎にデファクトスタンダードな環境があるから、変わってもおかしくはない。 COFFだとかOMFだとか、WINENTRYだとかstdcallだとか色々あるしね。
82 :
デフォルトの名無しさん :2009/04/17(金) 20:31:57
〜 List<Integer> list = Arrays.asList(hairetu); list = new ArrayList>Integer>(list); 〜 <A extends Number> void shori(List<A> list) { for (Iterator<A> itr = list.iterator(); itr.hasNext();) { こういうのがあるとき、list.iterator()は、Listクラスのiterator()メッソドを使っていると思うのですけど、 listは、ArrayListのオブジェクトなんですけど、ArrayListクラスのメソッドにはiterator()はないです。 先頭にあるList<Integer> list = Arrays.asList(intarray);から紐付いていると思うんですけど、 List<Integer> list = Arrays.asList(hairetu);で Arrays.asListのオブジェクトを生成して、 list = new ArrayList>Integer>(list);でArrays.asListのオブジェクトを生成して参照変数を置き換えています。 それでも尚、Listのメソッドをlistから使用できるのは何故なんでしょうか。 理解できていないですねえ私は。
>>82 > ArrayListクラスのメソッドにはiterator()はないです。
ホントにそうかな?ちゃんと調べてみよう。
ヒントはAbstractList。ってほぼ答えじゃん。
>>81 そうだよね。プラットフォームのソースと一緒に個別にしておくか。
>>80-81 間でjavapじゃねえだろとか突っ込みもなくスムーズに話が進んでるのはなぜなんだ
BSD出身の人ですか?
javah?
88 :
デフォルトの名無しさん :2009/04/18(土) 01:33:42
質問です。 ■やりたいこと m∈Z、n∈Nに対して、 0以上n未満の範囲のmod nの値を取得したい ■問題 %で取れると思ったのですが、 (-8) % 5という演算では、-3という負の値が返って来てしまいます。 (期待している値としては、2です。) (m%n<0)?m%n+n:m%n とするしかないでしょうか…?
つ (int)Math.IEEEremainder(-8, 5)
システムプロパティの "os.name" や "os.arch" の一覧てどこかにないですか?
システムプロパティ取得してリストすればいいよ
いえプラットフォームごとの値の方をば。
そりゃ実行環境固有の文字列になるだろ。 何が目的か言った方が早いぞ。
95 :
デフォルトの名無しさん :2009/04/18(土) 02:36:54
>>83 継承してました。ありがとうございました。
int m = 10
Integer[] hairetu = new Integer[m];
for (int i = 0; i < m; i++) { hairetu[i] = i; }
List<Integer> list = Arrays.asList(hairetu);
list = new ArrayList>Integer>(list);
10個の数字を入れられる入れ物をつくって、Integerクラス型の変数hairetuにポインタ代入して、
for文で実際に入れ物に値を入れて、
ArraysクラスのasListメゾットの引数に中身が入った入れ物のポインタを渡して、
Listクラスの変数listに戻り値のポインタを代入して、
そのポインタをArrayListクラスのコンストラクタ引数に渡して、
オブジェクト生成して、そのポインタをlistに代入している。と思うんですけど、
よく分からなくなりました。
0〜9までの数字が入ったhairetuがあって、それがメモリ上にあって、それを参照するのに、
変数にポインタが入ってて、結局最後には、listという変数から、配列が見えるんだけど、
Integerとか、Arraysとか、ArrayListとか、違ったクラスのオブジェクトを経由するけど、
各クラスにはそれぞれのフィールドやメソッドなどがあるんだけど、
それぞれに、10個の配列(hairetu)は、実体として、どのように紐ついているんでしょうか。
ぽいんたw
>>95 そういう書き方であれば、答えは、なんとなくあってる。
詳しい実装はソースを見て勉強してください。
基本的にAPIdocument に書いてあることが行われるように実装されています。
ArrayListでの固有機能が必要でなければ、最後の行は必要ないと思うんだ。
>>95 Arrays.asListは文字通りas-listで、配列をListに見立てるだけ。
ArrayListは初期値にListを使ってるだけで、配列は引数から独立してる。(Integer自身は変更無し)
Integer[] intArray = new Integer[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
List<Integer> asList = Arrays.<Integer>asList(intArray);
List<Integer> arrayList = new ArrayList<Integer>(asList);
Comparator<Integer> reversOrder = Collections.reverseOrder();
Arrays.sort(intArray, reversOrder);
↑でasListは9..0となり、arrayListは0..9のまま。
99 :
デフォルトの名無しさん :2009/04/18(土) 03:33:33
>>97 上記では、オブジェクトの参照であるhairetuでもlistでも最後のlistでも、
10個の値が入った入れ物の内容が見れると思うんですけど、
たとえばListくらすであれば今回の場合は、listとして参照できるのは、
10個の値が入った入れ物の内容だけなんでしょうか。
私は、各クラスがインスタンス化されたら、型枠のようなクラスが、
そっくりそのままオブジェクト(実体)としてコピーされると
考えていました。そうなると、たとえばListクラスなら、10個の配列は、
Listオブジェクトの、どこに入るんだろうかと疑問に思う。
肝の部分がまだ見えてないんですよね。
>>99 元になったデータの扱いがどうなっているかは実装次第です。
変数や引数で宣言されているクラスは、あくまでも「のぞき穴」です。
もちろん、代入できるのは、のぞき穴で見られるものだけですが。
基本的にJavaでのオブジェクトの生成は new 演算子でのみ行えます。
その実体化を行ったクラスで、生成に用いた値がどのような扱いなのかは
ソースを見てください。
アプレット-サーバ間通信についておしえてください。 アプレットでミニゲームを作成しようと考えており、ソケットを利用してアプレットと サーバ(webサーバと同一です)を接続したいと考えているのですが、 アプレットからサーバに接続しようとしたら java.security.AccessControlException: access denied が発生してしまいました。 webサーバに対しては、アプレットでも直接通信できると思ったのですが、どうもそう単純ではなかったようです。 ソケット通信を使う時点で、ポリシーファイルの設定が必須になってしまうものなのでしょうか。
>>101 アプレットで直接通信できるのはデフォルトではアプレットが置かれていたサーバのみだけどそれは大丈夫?
例えばまだ開発途中でローカルマシン上にあるアプレットから本来置かれるべきwebサーバにアクセスしようとしたりしていない?
>>102 開発途中なので、ローカルマシンのアプレットからローカルマシンのサーバへアクセスしています。
サーバを立ち上げ、アプレットから"localhost"に対してアクセスに行くと、
java.security.AccessControlException: access denied (java.net.SocketPermission 127.0.0.1:ポート番号 connect,resolve)
という表示になります。
アプレットをeclipseから起動した場合、サーバと通信可能です。
アプレットを呼び出すhtml側で、通信を許可するオプション等が必要なのでしょうか。
>>103 アプレットのgetCodeBase()やgetDocumentBase()が返すURLから得られるホストとlocalhostは一致する?
ローカルサーバアドレスとループバックアドレスは一致しない可能性がある。
>>104 まさにそれでした。
localhostに対してアクセスに行っているのに、getCodeBase()では
INFO: debug:codeBase:file:/C:/java/hogehogeProject/
というような値が返ってきてました。
たぶんこれが原因だと思います。
ローカルでもちゃんとサーバ立てれば解決しそう。
いろいろありがとうございました。
106 :
デフォルトの名無しさん :2009/04/18(土) 20:00:59
メソッドを使った時、配列は戻り値を指定しなくても、勝手に元の(引数の)配列に代入されるのですか? この仕様は意味がわかりません 配列を戻したいなら、戻り値の型の指定でString[] とか、ちゃんと型を指定しないといけないんじゃないの?
サンドボックスのドメインってどこまでが範囲だっけ? foo.java.netからfoo.dev.java.netにアクセスできるんだっけ?
>>106 配列の中身をあんたが自分で書き換えたんじゃないの?
109 :
デフォルトの名無しさん :2009/04/18(土) 20:29:16
>>108 引数でメソッドに渡しただけだから元が書き換わるはずがないと思うのです・・・
でも教科書にはこう書かれてるし、実際に動く
ちなみにただのソートです
教科書→ 明解Javaによるアルゴリズムとデータ構造
>>109 その思い込みの根拠を知りたいな。
自分の知らない現象に遭遇したとして、何故そう動くのかを考えるだろ普通。
なんで、そうならないと思い込めるのか、凄く謎。
111 :
デフォルトの名無しさん :2009/04/18(土) 20:38:13
>>110 考えた結果そういう仕様なのかと思ったけど
明確にはよくわからないのでここで質問しているのです
だから配列の中身をあんたが書き換えたのが原因。 そんなはずがないってのは誰が言ったんだ?w
>>106 の質問は、
public void touchArray(int[] array){
for(int i=0;i<array.length;i++){
array[i]=i;
}
}
みたいなことをやると引数arrayが書き換えられるけど、これはどうして?
と言うことでしょ。
Javaの場合、オブジェクトは参照で渡され、配列はオブジェクトとして扱われるから、というのがその答えだと思う。
そんなに不思議に思うような仕様でもないと思うが。
114 :
デフォルトの名無しさん :2009/04/18(土) 20:47:13
>>112 あなたの言ったことがあまりにも信じられいのです
だってどこで書き換えてるのか全くわからないんだものorz
115 :
デフォルトの名無しさん :2009/04/18(土) 20:54:54
>>113 オブジェクトは参照で渡されるってことを知らなかったです・・・
ありがとうございました
配列をメモリブロックで渡せる言語があるなら逆に聞きたいよ
javaをやり始める者です 今プログラム環境の導入をやってます。 とりあえずjavaをダウンロードしてインストールしました。 次にGameCanvas をダウンロードして解凍したら Lhaplusの2行目に「×アーカイブのヘッダに異常がありました」ってなって、 解凍されたrelease.batをクリックしたら、 「C:\Documents and Settings\ユーザー名\デスクトップ\FrameWork\game.classが見つかりませんでした」 「'javac'は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチファイルとして認識されていません」 って何行も出まくるんだけどどうすれば良いんだ・・・ ちゃんとJavaもインストールしてあるし、やり直しても同じ事になる・・・お助けください… 一度実行すると gameApp.jar という実行ファイルができるはずなんですが・・
Windows再インストールかな
MIDPスレ開いたのかと思った
これはエスパーできねえ。
>>117 >やり直して
「ダウンロードから」やり直しても駄目?
ダウンロードしたファイルが壊れてたって表示されてましたけど、バッチ
ファイルが解凍されてたんで「大丈夫だと信じて」叩いてみました。
に読める。
あと、javacを要求しているところからして、インストールしておいたのは、
JREでは駄目で、JDKでなければならない。
また、インストールしたJDKのbinフォルダを環境変数pathに追加しないと
動かない。
BufferedImageとImageの違いは何ですか? 全部BufferedImageではだめですか?
あとバッチファイルがJAVA_HOMEを参照してjavacを起動する類の作りだったら、 環境変数JAVA_HOMEにJDKをインストールしたパスを書いておかないと動かない。 まあ、要するに「javac.exeはどこにある?」に答えてやらんと動かないわけだ。 色々と面倒に思えるだろうけど、これらは前提知識。
>>122 APIを見てね。Imageは仮想(abstract)クラス。
全部BufferdImage使っていればいいよ。とりあえずは。
了解
OSにjavacの位置を教えないとあかんよなぁ たいていは、コントロールパネル→システムの中の、環境設定のところのPATHに javacの位置を書き加える作業が必要・・・んー自動でも加わったかな
129 :
デフォルトの名無しさん :2009/04/18(土) 23:25:38
突然の書き込み失礼します。 N個の[0,1)の乱数をrandom配列に入れ、その配列から一つずつ乱数を取り出し、 区間をM個にわけたうちの何番目にその乱数がいくつ入っているかをカウントする配列をcount配列とします。 下のプログラムでは実行結果が 0.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 20.0 となってしまいます。どこかおかしい点あるでしょうか? 初心者なのでくだらないまちがいならすみません。ちなみにエラーはないです。
130 :
デフォルトの名無しさん :2009/04/18(土) 23:27:34
public class ransu { public static void main(String[] args) { int N = 20; int M = 10; int i; int j; double d; double[] random = new double[N]; int[] count = new int[M]; // N個の乱数がはいっている配列を作る for(i=0;i<N;i++) {d=Math.random( );random[i] = d;} // 回数をカウントするための長さMの配列を作る for(i=0;i<M;i++) {count[i] = 0;} // 配列randomから乱数を順番に抜き出し区間別にわける for(i=0;i<N;i++){ // 配列randomから乱数を順番に抜き出す d=random[i]; // 区間別に分ける for(j=0;j<M;j++){ // もし乱数dがj番目に入っていたら if((j/M<=d)&&(d<j+1/M)){ // そのj番目のカウントを一つ増やす count[j]=count[j]+1; } else{} }} // count配列を表示する for(j=0;j<M;j++){d=count[j];System.out.println(d);} }}
>>130 なんか、ここが怪しい。
if((j/M<=d)&&(d<j+1/M)){
// そのj番目のカウントを一つ増やす
count[j]=count[j]+1;
}
整数型として処理された場合、意図した動きをしないような気がする
if(((double)j/M<=d)&&(d<(double)(j+1)/M)){
// そのj番目のカウントを一つ増やす
count[j]=count[j]+1;
}
これでどうだろ?
132 :
デフォルトの名無しさん :2009/04/18(土) 23:51:09
>>131 ありがとうございます!できました。
本当に助かりました><
133 :
デフォルトの名無しさん :2009/04/19(日) 00:18:37
>>116 もっと世界を広げたほうがいいんじゃない?
Cの構造体内にある配列
>>133 普通に思いついたが俺は大人なので言わなかった。
構造体のメンバの配列ってry
137 :
デフォルトの名無しさん :2009/04/19(日) 00:51:36
>>135 やべぇ
ここはジャヴァすれだから禁句だったか!
そういえばC#でも構造体内の配列は値渡しだからCと同じだったよね?
構造体内の配列が値渡し?渡してるのは構造体だぞw
まああまりでかいサイズの構造体はポインタで渡すべきだけどね
ここjavaスレか スレ間違えた
複数言語やってると、こういうところ頭がこんがらがってくるw
最近double 4x4の(SSE)行列も値渡しだったりするから、 数年後(64bits os)には64k bytesぐらいまでは値渡しでもいいんでないかと思う。 ジャバには関係ないけど。
float 4x4で64バイト値渡しだった。
文字列の文字数を数えてくれるアルゴリズム、 文字列の中から特定の文字を見つけてくれるアルゴリズムを教えてください。
int length = 0; int count = 0; for(int i=0; i<text.length(); i++){ char ch = text.charAt(i); if(ch == 'A') count ++; length ++; } System.out.printf("長さ %d 文字, A は %d 文字", length, count);
ありがとうございます。
149 :
デフォルトの名無しさん :2009/04/19(日) 13:14:16
初心者です。 JDKをどうしても入手出来ません・・・
パソコンショップのソフト売り場へ買いに行け 定価19800円だ
透明色と重ね合わせのことで BufferedImage img1= new BufferedImage(400, 400. TYPE_INT_RGB);; この作ったイメージをfillRectなどでnew Color(0,0,0)で塗りつぶすと透明でない黒になるようですが 全くの透明色で書き込むにはどうすればいいですか?
質問させていただきます。 Javaはどんなところに使われてますか? またJava特徴や利点ってなんですか?
そこはTYPE_INT_ARGBとかColor(0, 0, 0, 0)じゃないの?
>>154 いろんなところ。
特徴、うーん。ちょっとでも間違ったらコンパイルエラーが出るところかな。
それが信頼性を担保しているのかもしれないが、
慣れた人には窮屈でたまらないと思う。
おお、それでA透過を指定できるんですか しかし Color(0,0,0,0)で白になってしまいました 最期の0が透明の印ではないんですかね?
最後が透過度で255がMAXか、なるほど
用法: Webアプリケーションにおけるサーバサイドプログラム(業務アプリとか)、 JavaAppletなどのWebブラウザへの組み込み(株式のリアルタイム表示とか)、 データベースやCADなどのUI部の実装、携帯端末上でのアプリケーション(iアプリとか) 利点: プラットフォーム(PC、携帯、WindowsやLinuxのOS)間での移植性が凄い。 Windows上で作成した実行ファイル(jar)がLinuxやSolaris、HP-UXとかでも動く。
>>156 ありがとうございます。
難しいですね。 参考にさせていただきます。
ありがとうございました。
>>159 おお!まさにそのような解答をもとめておりました!
ありがとうございます!
最大の利点は相互性というところでしょうか?
ちょっとくらい間違っててもエスパーして動いてほしいよね
>>162 path設定を試行錯誤するレベルならマッサラな状態からやり直した方が良し。
試行錯誤する場合には、全部消して最初からやり直すこと。
その際に手順をキチンとノートに書きとめること。後で再現できるように。
>>162 ・jdkをインストールしたディレクトリはどこ?
・環境変数に追加したセミコロン以降はどのように設定したの?
コマンドプロントで"path"か"set"って入力した結果にpathの項目に
ちゃんと追加したpathが反映されてる?
>>163 Cのすぐ下にjdkはインストールしました。
セミコロン以下は;C\jdk\binと設定しています。
setを入力したところ、pathの設定の最後に;C\jdk\binと入力されていたので
反映はされていると思います。
自己解決しました。 ;C:\jdk\bin なところが ;C\jdk\bin になってたようです・・・。 お騒がせしました。
コマンドプロンプトでプログラムをコンパイルはできたのですが、 いざ実行しようとすると 「could not create the java virtual machine」 といったエラーが表示されてしまいます。 これの解決方法ってどうすればいいんでしょうか?
could not create the java virtual machine の前に、原因を示すメッセージが出てはいないか?
バージョン違いのJDKとJREが混在してるとか? 一回アンインストしてJDKだけ入れ直してみてはどうか
168>>出てないです。 D:\フォルダ名>Java Hello could not create the java virtual machine ってな感じなので・・・
JREが新しかったら問題ないはず。 JDKを入れなおすより、JREを最新にしてみるのがいいと思うんだが・・・もう遅いか。
ダメでした・・・。 JREもJDKも最新はJRE 6 Update 13とJDK 6 Update 13で間違いないですよね? どうしてなんでしょうか
174 :
デフォルトの名無しさん :2009/04/19(日) 21:42:09
スレッドに引数を渡したい時はどうやればいいのでしょうか? あとスレッドから戻り値が欲しい時はどうやればいいのでしょうか?
一応、CLASSPATHが定義されているか見てみるのはどうか? > ECHO %CLASSPATH% で何も表示されないか、. が入っていればOK。 ちなみに、俺の設定だと .;C:\Program Files\Java\jre6\lib\ext\QTJava.zip QTJava.zip は QuickTime のクラスで、iPod を使うと入るらしい。 そして、たまに .; が頭に入らないで設定されていたりするらしい。(バグ) .その場合は ; を頭に追加。
>>174 extends Thread か implements Runnable しているだろうから、インスタンス変数
として受け渡しすればOK。
synchronized で同期させるのを忘れると悲しい出来事が起こることがあるので
注意な。
>>175 .;C:\Program Files\QuickTime\QTSystem\QTJava.zip
と出ました。一応大丈夫・・・なんでしょうか?
>>174 スレッド関連はjava.util.concurrentパッケージを利用して
値を戻す場合はFutureを使うと楽
180 :
177 :2009/04/19(日) 21:56:45
すみません、
>>177 は宿題スレに書き込もうとしたものの誤爆です
181 :
デフォルトの名無しさん :2009/04/19(日) 22:03:16
>>176 回答ありがとうございます
確かにそうしたら、引数とか戻り値とか関係なさそうですね・・・
>>179 回答ありがとうございます
そのメソッドについて調べてみます
>>179 おおお、知らなかったぁ。これは便利。どれだけ古いんだ自分。
でも、初学者だと原理をすっとばしてしまうと分かりづらくないか?
と思うこと自体が歳くった証拠かも。
>>182 まあconcurrentパッケージはマルチスレッドプログラミングの面倒くさいけれど定式化できる部分をまとめたものなので
指摘の通り初学者は最初は利用せずにやってみてマルチスレッド関連の諸問題を体感した方が教育的見地からはいいのかもしれない
というか基礎は結局勉強していないとconcurrentパッケージの使い方自体が分からないかも
そうだ >java -version の結果はどうなってる?
>>183 そうはいってもconcurrentはあまり使われてないんでは?
残念なことですが、Threadはあまり話題にならないし。
Threadは枯れた基本知識だし、concurrentは知っていると便利なユーティリティだし、 話題にはならんでしょうね。
>>186 うん
全てを解決する銀の弾丸じゃないし使わなくて済むのなら使う必要はない
知っているとスレッド関連で面倒なコードを自分で書く必要が減る可能性があるという程度
concurrentと面倒なコード量の増加(Runnable,Future)を考えるとクロージャはほしかったな。
concurrent なんてフレームワークや共通系の設計やってる一部の人間が押さえてりゃ良い。 業務開発が concurrent 使いまくってるようなプロジェクトなんか入りたくねぇ。
網羅的に抑えてあってけど、もう役割を終えたのかな・・ こういう(作者のやる気がなくなった)個人のサイトこそオープンプロジェクト(WIKI)に寄贈して発展させればいいと思うけどね。
In one of the countless billions of servers in the WWW, lies a medium-sized web site, and all of its contents, a javaty and insignificant site, is now dead...
>>193 なんだ?同じようなことかいてるけど、それにしても読みにくい英文だな・・・
そのサイト、xreaに移る前はfc2の無料鯖でやってたから、まだそっちは残ってるかもね
JavaでIEを起動して、YahooのHPを開くためのってこれでいいですか?
IEは起動するんですが、白い画面が出ます。
import java.io.IOException;
public class IeStart {
public static void main(String[] args) {
try {
String url = "
http://www.yahoo.co.jp ";
String browser = "C:\\Program Files\\Internet Explorer\\IEXPLORE.EXE";
Runtime rt = Runtime.getRuntime();
rt.exec(new String[] {browser,url});
} catch (IOException ex) {
ex.printStackTrace();
}
}
}
そんな簡単なのがあったのですね。 ありがとうございました
>>56 JAXBをつかって
DatatypeConverter.parseInt("+1")
javax.scriptを使えば変数込みのevalが出来て便利だが、 javascriptが必ず入っている訳じゃないのは痛いかな。 たしかGroovyが標準化されるんだっけ?この手のユーティリティ作りには貢献してくれるかも。
Document dummy = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); Number value = (Number)XPathFactory.newInstance().newXPath().evaluate("1+1", dummy, XPathConstants.NUMBER); 四則演算程度ならプラットフォーム非依存で追加ライブラリも必要ない XPath が良い。 Java 側から変数も渡せるし。
その場合の変数ってDOM側に詰め込むの?
XPathFunctionResolver を実装すれば普通の XPath 変数と同じように $foo で使えるし XPathFunctionResolver を実装すれば関数を用意することも出来る。DOM は完全にダミーで良い。 ちょっとした判定ロジックを外部定義しておきたい時に XPath は便利。
何が標準化されようともその実装でスクリプトエンジンが用意されなきゃ使えない。 どうしてもスクリプト使いたいならJSR-223のページからScripting APIの実装とエンジンのライブラリを自分で用意すればいい。
205 :
デフォルトの名無しさん :2009/04/20(月) 16:02:23
cloneメソッドを使用して配列をコピーしたら コピー元を変更したらコピー先も変更されるとされているけど、 char[] char1 = {'A', 'B'}で配列作ってcloneメソッドでコピーして、 コピー元を変更してもコピー先は変更されてないんだけど、 charの配列はオブジェクトじゃないから大丈夫なんですか?
> cloneメソッドを使用して配列をコピーしたら > コピー元を変更したらコピー先も変更される これが偽
207 :
デフォルトの名無しさん :2009/04/20(月) 17:31:02
public class Qtarou { public static void main(String[] args) { StringBuffer[] hairetu = new StringBuffer[2]; hairetu[0] = new StringBuffer("aaaaaa"); hairetu[1] = new StringBuffer("cccccc"); StringBuffer[] hairetu99 = new StringBuffer[2]; hairetu99 = (StringBuffer[])hairetu.clone(); //hairetu99[0] = hairetu99[0].replace(0, 6, "zzzzzz");//ココ1 hairetu99[0] = hairetu[1];//ココ2 System.out.println("hairetu[0] "+ hairetu[0]); System.out.println("hairetu99[0] "+ hairetu99[0]); }} ココ1とココ2を切り替えると結果が変わるのはどうしてでしょうか。 ココ1ではコピー元も変わってしまい ココ2ではコピー元は変わらないんですけど。
>>207 基本: 配列に対するクローンは、配列の要素をクローンしない。
http://javafaq.jp/S006.html#S006-09 で、ココ1の場合はhairetu99[0].replace()した段階でhairetu99[0]が指
すオブジェクト(==hairetu[0]に入っているオブジェクト)の内容が書き
変わる。replace()だけで書き変わるので、ココ1の代入文にはまったく
意味がない。
ココ2の場合は、双方の配列から指されているオブジェクトを書き換えて
いるわけじゃない。配列内から指す先を繋ぎ変えているだけ。
コピー可能な情報ってのは、intやdoubleなどのプリミティブな変数と、オブジェクトの"参照"だけ clone一発じゃ、オブジェクトの"実態"まではコピーできないよ。deep-copy,shallow-copyで調べてみよう。
210 :
デフォルトの名無しさん :2009/04/20(月) 18:36:14
>>208 >>209 よくわかりました。有用なサイトも教えて貰い、
合わせてありがとうございました。
はじめまして。 マルチスレッドについての質問なのですが クライアント1がサーバーから出される質問に答えている間 クライアント2はクライアント1が受け取った質問とクライアント1が答えた結果を 受け取るのみにするにはどのような条件を作れば良いのでしょうか? スレッドはwait()になっててもサーバーから情報はクライアントにパスできるかどうかわからなくて 困っています。
早押しクイズゲームでも作ってるの? とりあえず某かのオブジェクトをロックすれば実現できることなんだけど、 一点、「クライアント2はクライアント1が受け取った質問とクライアント1が答えた結果を」とあるけど、 このフローがどういうものか自分で書ける?クライアント1はこの時、まだ回答中だと思うんだけど。
213 :
211 :2009/04/20(月) 18:51:28
そこでつまづいているんです。 クライアント2はリアルタイムでクライアント1が受け取った質問を受け取り クライアント1が質問に答えての結果を1に送るときに2にも送らないといけないのですが。。
214 :
211 :2009/04/20(月) 18:53:59
すみません、クライアント1が答えてサーバーが結果を送るときにの間違いでした。 早押しクイズゲームではないんですが クイズゲームで、途中で入ってきたプレイヤーは質問と結果を受け取りながら次のゲームまで待つというものでして。
このアプリのメインフローはだいたい以下の5つくらいに分割できる。 問題の取得、回答権の取得、回答待ち、回答とその正否判断、回答と正解の配布。 これの実現には、例えばReentrantLock#tryLockあたりを使ってみよう。 これでtrueの状態を取れたら、回答権付きの回答待ち処理へ、 falseが帰ってきたら、ただの回答待ち処理へ移行する。 注意が必要なのはクライアント2は被ブロック処理であるべきということ。 そうでないのであれば、クライアント2はクライアント1が回答したかをサーバへ問い合わ続けることになる。 パフォーマンスに拘らないのであれば毎度問い合わせた方が簡単でいいけどね。
非ブロック処理ね。被ブロックならブロックさせちゃうことになるw
217 :
211 :2009/04/20(月) 19:26:55
ありがとうございます。さっそく参考にして書いてみようと思います。 それと、どなたかこのようなゲームのソースを持っておられたら見せてもらえませんか? リンクでも構いません。 ネット以外に参考にできるものがない状態でやってるもので。。 よろしくお願いします。
俺はこれといったサンプルは知らないが、 サーブレットで作りたいのか、ソケットで作りたいのかは提示した方が良い。 データベースの有る無しでも作り方は変わってくるしね。
219 :
211 :2009/04/20(月) 19:39:21
すみません、ありがとうございます。 僕はソケットで作っているのでソケットでお願いします。 データベースはないですね。 テキストファイルから問題と答えをvectorかarraylistか何かに入れて使っていますので。
220 :
デフォルトの名無しさん :2009/04/20(月) 20:31:55
ここはおまえの勉強部屋じぇねーぞ
変な煽り入れてんじゃねーよ。気に入らなければ答えなきゃいいだけだ。
後ろ側へ透かしたいので new Color(0,0,0,255) で描画するとただの黒に new Color(0,0,0,0) なら何も描画されないになってしまいます 元の色をけして透明色を書き込むにはどうすればいいですか?
>>223 アルファ値を0にしているので、それで書いた場合は下の絵が全て見えます。
つまり、すでに透明色です。
2面の重ね合わせで、実際fillRectで書き込んだのですが透けませんでした。 gr.setColor(new Color(0,0,0,0)); gr.fillRect(0,0,99,99); 特殊な書き方があるのでしょうか? おそらく(0,0,0,0)というデータを書き込むではなく (0,0,0という色を,0)という透明割合で書き込む、つまり0なので何も書き込まないに なってしまったのではないか、と考えたのですが。
元が透明を含んでる透過png画像の読み込みで書き込まれたものならしっかり透けて合成できるのですが。
透明色、という言い方が実は問題。透過色と言うべきだね。 ビットマップで下が見えて欲しい部分を透過色で描いておいて、それを普通に 描いておいた下絵の上に貼り付けるといった使い方をすればいい。 アニメとかで背景の上に、セルに描いた物を乗せるのと同じ。 アルファ値を適当な値にすると、アニメで言うスーパーになる。 半透明で透けて見える絵ね。
アルファブレンドがJavaで実際にできるか確認しないで書いてた。 試してくる。
例えば元が(64,0,0,128)のとこに カラー(128,0,0,32)で書き込むと そこのアルファ値はいくつになりますか? 32ですか? あとアルファ値だけ書き換えることはできますか?
230 :
デフォルトの名無しさん :2009/04/20(月) 23:04:16
ArrayList arry = new ArrayList(); ArrayList arry1 = new ArrayList(); ArrayList arry2 = new ArrayList(); ArrayList arry3 = new ArrayList(); arry1.add("野球"); arry2.add("バスケ"); arry3.add("ラグビー"); TreeMap tree = new TreeMap(); tree.put("1田中",arry1); tree.put("2佐藤",arry2); tree.put("3鈴木",arry3); ListIterator it = tree.keySet().listIterator(); while(it.hasNext()) String key = (String)it.next(); arry = (ArrayList)tree.get(key); System.out.println(key); for(int i = 0; i<arry.size(); i++) System.out.println(" " + arry.get(i)); while(it.hasPrevious()) String key = (String)it.previous(); arry = (ArrayList)tree.get(key); System.out.println(key); for(int i = 0; i<arry.size(); i++) System.out.println(" " + arry.get(i)); 長くて申し訳ありません、実行結果を逆方向(降順)に表示させたいのですが上手くいきません。 初心者で申し訳ないのですが間違っている点あればご指摘お願いします。
231 :
230 :2009/04/20(月) 23:06:30
すいません、書き込みの改行の制限の都合でブロックとImport省いてあります。見にくくて申し訳ないです。
232 :
デフォルトの名無しさん :2009/04/20(月) 23:27:29
スレ違いだったらごめんなさい。 Javaのscript(ようつべなどを見たりするやつです。)をオンにしたいんですが どうやってするんですか?
>JavaScript, Ajaxの質問は、ここでは受け付けていません って書いてあるし、そもそも板違い
>>225 やっぱ不安に思ったのは正しかった。Graphics.setColor(c); ではアルファ値は書き込めない。
BufferdImage.setRGB(...) で書き込まないと適用されないらしい。こんな感じ。
import java.awt.*;
import java.awt.image.*;
import javax.swing.JFrame;
public class Main extends JFrame {
BufferedImage fwd = new BufferedImage(300, 200, BufferedImage.TYPE_4BYTE_ABGR);
BufferedImage bck = new BufferedImage(300, 200, BufferedImage.TYPE_4BYTE_ABGR);
public Main() {
Graphics gr;
gr = bck.getGraphics();
gr.setColor(new Color(255,0,0));
gr.fillOval(0, 0, 300, 200);
gr = fwd.getGraphics();
gr.setColor(new Color(0, 255, 0));
gr.fillOval(0, 0, 200, 150);
gr.setPaintMode();
Color c = new Color(255, 0, 0);
gr.setColor(c);
gr.fillOval(20, 20, 150, 100);
for (int x=0; x<fwd.getWidth(); x++) {
for (int y=0; y<fwd.getHeight(); y++) {
if (fwd.getRGB(x, y)==c.getRGB()) fwd.setRGB(x, y, 0);
}
}
}
public static void main(String[] args) { Main main = new Main(); main.setBounds(100, 100, 500, 300); main.setVisible(true); } public void paint(Graphics g) { g.drawImage(bck, 50, 50, new ob()); g.drawImage(fwd, 40, 40, new ob()); } static class ob implements ImageObserver { public boolean imageUpdate(Image img, int infoflags, int x, int y, int width, int height) { return false; } } }
JListはsetVisibleRowCountで縦の長さを指定できますが、 横幅を指定するのはどうやるのでしょうか? DefaultListModelで3文字ぐらいをaddしても横幅は8文字分とかにしたいです。
ポイントは二点。 1.BufferedImage.TYPE_4BYTE_ABGR でアルファ値入りのイメージとして作る。 2.透過色にする予定の色を探して、アルファ値をセットする。 for (int x=0; x<fwd.getWidth(); x++) { for (int y=0; y<fwd.getHeight(); y++) { if (fwd.getRGB(x, y)==c.getRGB()) fwd.setRGB(x, y, 0); } } なんでアルファ値を書き込めるようにしなかったのかなぁ???
アルファブレンディングはJava2Dでやる。 javadocから辿れるJava2Dのマニュアルにやり方が書いてあったはず。
オラクルやっちまったなぁ
240 :
223 :2009/04/21(火) 00:35:45
>>234-237 おお、お手数かけました、ありがとうございます。
fwd.setRGB(x, y, 0); ですか、やってみます。
>なんでアルファ値を〜
そうですよね。
>>238 Java2Dですか。
241 :
デフォルトの名無しさん :2009/04/21(火) 00:39:16
MySQLは結局Oracle入りか
GCがはしっているとき、JavaVMで動いているプロセスの処理はとまっているのでしょうか?
stop the worldな実装てまだあったけ?
現行のSun JVMってフルGCは全部stop-the-worldじゃないの? G1GCってその回避のためにあるのだと思ってたんだけど。
>>244 JList...使ったこと無くて。すまんなー
>>245 >フルGC
まあそうなんだけどさ。
昔は全部stop the worldだったけど今は並列マーク&スイープとかあるからさ。
これのときstop the worldじゃなかったような気がして。
>>244 俺はどこだったかをオーバーライドした
スイングスレがあるのでそっちで聞いてみます
催促しといてそれか
250 :
デフォルトの名無しさん :2009/04/21(火) 01:44:46
明解javaでjavaを勉強しているのですがあまり評価が良くないのですが、 違う本で勉強したほうがいいですか? 自分的に入門書には丁度良いと思うのですが。
本の向き不向きは人それぞれ。
>>250 丁度良いと思えてるんだから浮気せずまずは一冊終えてみろ
253 :
1/2 :2009/04/21(火) 03:42:03
すいません、大学の課題なのですが、宿題スレに質問出来ないほどの初心者なので こちらで聞かせていただきます。 Javaは最新ver、 Eclipseのガニメデ、GUI Editorを使用してパネルを作る作業なのですが、 教科書を進めていきますと「独自のパネルコンポーネント MyPanelの定義」という章で、 ⇒プロジェクトとパッケージを製作(プロジェクト名を[A]、パッケージを[a]という名前にします。何でもいいみたいですが) ⇒パッケージエクスプローラーにあるパッケージをクリックして新規→クラス作成 ⇒クラス名はMyPanel(任意の名前)、スーパークラスをjavax.swing.JPanelにして終了ボタンを押すとクラス定義編集画面が出る。 ⇒NewJFrame.java画面に戻ってフレーム上で右クリック→Add Custom→Add custom class・・・を選択 ⇒クラス選択画面が出てくるので、そこでMyPanelとクラス名を入力すると、「一致する項目」欄に作成したMyPanelクラスが出るので選択してOK
254 :
2/2 :2009/04/21(火) 03:43:23
ここまで進めるとフレーム上にmyPanel1が貼り付けられるはずなのですが、 ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ ┃ ○ クラスが見つかりません |×|┃ ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ ┃ /\ Unabel to find class ┃ ┃ / ┃ \ a.MyPanel . ┃ ┃ / ・ \ Check that it exists in this project and that it has been built (press ┃ ┃  ̄ ̄ ̄ ̄ ̄ ̄ Ctrl+B to build) . ┃ ┃ [ O K ] ┃ ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ このウィンドウが出てmyPanel1が貼られません。Ctrl+Bを押しても意味がわかりませんし、 なぜ先ほど作ったはずのクラスが見つからないのかもう色々とちんぷんかんぷんです。 「お前みたいなレベルでJavaやるなカス」と聞こえてきそうな気がしますが、どなたか教えてくださいませorz
MyPanel クラスを作る時にパッケージ名を a と指定してるか?
あ、あの、よくわからないんですが1から作り直したら出来てしまいました・・・申し訳ないです。
せっかく起きていらっしゃるようなのでお聞きしたいのですが、
>>1 の
>JavaScript, Ajaxの質問は、ここでは受け付けていません。
↑自分の質問はJavaScriptの質問だったのでしょうか?
先ほどEclipseスレを発見しまして、見てなんとかわかるレベルだったのですが、
こっちのスレはもうどこもかしこも頭爆発しそうで、まるで異次元の世界にいるみたいです。
もしスレ違い質問してたなら本当に申し訳ないですorz
OracleがSunを買収したぜ
>>254 AA細かすぎてワロタ
>>256 あなた誰?
「自分の質問」なんて書かれても、
ここは ID もつかない板だから、なんとも言えないと思うよ
OracleがSunを買収。 さあSunの次なる一手は? 今後のJavaはどうなる?
何も変わらんと思う。 強いて言えば相対的に仕様に対する IBM その他の影響力が強まるくらいだが JCP にレイプされてる現状からすればあまり変わらない。
JavaDBがApache DerbyにとってかわってOracleになるとか JDBCがOracle寄りになるとかJavaの文法にOracleライクな文法が入るとか
(+)が入ってくれたら楽になるなぁw いやがる人間の方が多いのはわかってるんだがw SQLの話じゃないか
Pro CみたいなPro Jでも作るんじゃね
264 :
デフォルトの名無しさん :2009/04/21(火) 14:43:14
ちと質問。会社で「Javaのアプリケーションをリリースするんだが、 クラックされないように色々やってくれ」的なことを言われました。 原理的に完全な対策は不可能だとは思うけど、可能な範囲でやるとしたら どんなことをやればいいでしょう? コードの難読化とか? なんかヒントか用語を挙げてくれるだけで助かります。 シリアルとかでググっても、シリアルを突破するサイトしか見つからないし。
267 :
265 :2009/04/21(火) 15:19:05
ありがとうございます。それ、既にググって読んでます。要するに難読化ですね…。 一般的なアプリってシリアルコードを入れますよね。 あれってどんなアルゴリズムなんですかね? シリアルコードをハードコーディングで持っているわけじゃないとすれば、何らかの数値計算 で算出しているのかな。
Java EXE化 こんなもんあるのか
ネィティブじゃん難読化ツールのほうがよくね? あと鯖に置いてダウソ不可能にするとか
270 :
265 :2009/04/21(火) 15:25:40
>>269 逆コンパイルの難しさは
ネイティブ>Java
だと思っているんですが、違うのかな?
だからJava難読化ツールより、ネイティブの方が良いのかと。
・・・一概に言えない問題かいな。
鯖に置くのは、仕様の問題でNGっす・・・。
>>265 ・クラスファイルを難読化ツールに通す。
・ユーザ登録 & ネットワーク認証。
・ドングルのようなハード的な何か。
・身分証明書のコピーや印鑑付き同意書を提出。
272 :
265 :2009/04/21(火) 15:40:48
>>271 ありがたい! そーか、ドングルって手もあるな・・・。
本当にやるかどうかはともかく、手法の紹介は嬉しいです。
んでネットワーク認証がちと気になるんですが・・・。
1.ネットワークでアクセスしてアクティベートする
2.ソフトが使えるようになる。
これはいいとして、この「ソフトが使えるようになるフラグ」って、どこに配置して
どうやってクラックから守ればいいのでしょう?
>>270 ネイティブにするとJavaの特性を失い、なおかつセキュリティホールを生む恐れあり。
274 :
265 :2009/04/21(火) 15:50:14
>>272 1. 配布ごとのシリアル番号 S と適当に生成した乱数 A をひも付ける。
2. S と A から SHA などの不可逆ハッシュを使って値 X を生成。
3. S と X をソフトウェアにハードコード & コンパイル & バンドルして配布。
4. ユーザ登録時に A をローカルへ配布する。
5. ソフトウェアは S と A から生成した値が X と等しいことで認証されていることを確認。
昔、ソフト配布時のシリアル機構を妄想した時に思いついた一番単純な方法。
もちろんバイナリハックにまでは対応しきれないが、まぁ S と X から A を推測する事は
実質的に不可能だし。
こんなこと聞いてるやつの作ったプログラムがそこまでガードするほどの出来とは思えないんだが
277 :
265 :2009/04/21(火) 16:32:23
>>275 そーか、一般的な公開鍵方式と同じアルゴリズムでやればいいんですね。
ありがとうございます。バイナリハックは防ぎようが無いけど、出来ることは
やったって感じでしょうね。
>>276 う。
ま、まあ、仕事で指示されたからやってるわけで(笑)。
>>277 いいかげん嘘つくの止めたら?
君のスキルじゃハックなんか到底出来ないから
クラック防止策を練ることをハックとは言わない。
280 :
265 :2009/04/21(火) 17:15:02
>>278 あ、なるほど。私がクラッカーで、そのためのハック手法を遠回しに聞きだそうとしている、
と誤解されてるんですね。
これ以上私が発言すると荒れちゃいそうなので、去ります。
親切に色んな情報を教えてくれた方々、ありがとうございました!
281 :
デフォルトの名無しさん :2009/04/21(火) 17:38:34
>>280 いいかげ見え透いた嘘つくの止めたら?
そんなこといつまでもやってると何かあったときに誰も助けてくれないよ。
282 :
デフォルトの名無しさん :2009/04/21(火) 18:16:07
SimpleDateFormat lovedate = new SimpleDateFormat("yyyy年MM月dd日 HH時mm分ss秒"); String happydate = lovedate.format(new Date()); System.out.println(happydate); SimpleDateFormatクラスのlovedateにオブジェクトの参照を入れて、 SimpleDateFormatクラスのformatメソッドを使って現在の日付時間を取得して、 Stringクラスのhappydateにオブジェクトの参照を入れていると思うのですけど、 どうしてStringクラスで受けているんでしょうか。 formatメソッドの戻り値はStringBufferであるとAPIを見ると書いてあるのですが、 どういう経緯で、lovedate.format(new Date()がString型に変貌したのでしょうか?
283 :
デフォルトの名無しさん :2009/04/21(火) 18:18:23
import com.sun.star.uno.UnoRuntime; とかを全部 import com.oracle.star.uno.UnoRuntime; に 書き換える必要はあるのでしょうか??
>>282 引数が違う。
そこで使われているのは
StringBuffer DateFormat#format(Date date,
StringBuffer toAppendTo,
FieldPosition fieldPosition)
を実装したほうではなく
String DateFormat#format(Date)
のほう。
285 :
デフォルトの名無しさん :2009/04/21(火) 18:50:45
>>284 >String DateFormat#format(Date)
DateFormatというのが見つからないのですけど。
286 :
デフォルトの名無しさん :2009/04/21(火) 18:52:02
288 :
デフォルトの名無しさん :2009/04/21(火) 19:07:35
>>287 ありました。フィールドのほうをを見ていました。
すっきり理解できました。ありがとうございました。
オレ、APIを解説して欲しいよ・・あれ不親切だよなぁ やりたいことあるのに、APIで探すのに時間がかかりすぎる
>>289 たまにこのAPIがなにを意味するのかわからず困惑することがあるよな、Javadocは。
まあ検索すれば使い方が出てくることがあるんだけど。
Javadoc見ただけではコレどうやって使うの? っていうのが多い。
初めてJavadocみたときはまさにそうだった。抽象メソッドとか。
抽象メソッドは自分の必要な抽象クラスを実装して使うもんだろ。 それは使い方がわからないんじゃなくて設計手法を知らないんじゃないか?
SPI で実装されるものも多いが。 煽るだけなら他行けよ。
SPIってすーじーぷらぐいんですか?
>>291 当時は初心者だったからわからんかったんだよ。
抽象メソッドに書いてある説明を読んでもどうやって「実装」すればいいか
わからず当時は困惑した。
あとからデザインパターンの勉強して初めて使い方を知ったくらいだ。
今でもわかりづらいものといえば、Channel、NIO、AtomicIntegerとか。
今の段階は、 明解Java→解きながら学ぶ→Cのさまざまなアルゴリズム(家にあった)→・・・ で何か自動化するものを作ろうとしたが・・・API見て意味が分からなかった。 どこから何をimportすればいいのか、、が分からん。 これは「慣れ」なのか とりあえず、java.langとjava.awtは読んでるけど・・・
import *;
抽象クラス・抽象メソッドくらいのものならググる。 AWTやSwingなどのツールキット・フレームワークが分からないなら本。 こんなとこだろ。
298 :
デフォルトの名無しさん :2009/04/21(火) 23:11:40
JAVAってC言語みたいに単独のアプリケーションを作ることはできますか?
299 :
デフォルトの名無しさん :2009/04/21(火) 23:24:23
JAVAは何でも出来る
java.util.EventListenerって、実装しておくと何かいいことあるん? 複数あるコールバックメソッドのシグネチャがそれぞれ違うんで、 java.util.EventObject を使うのが難しいのだけど それでも EventListener を実装して意味あるん?
301 :
デフォルトの名無しさん :2009/04/21(火) 23:50:18
>>299 ネイティブコードのexeを吐くにはどうすれば
302 :
デフォルトの名無しさん :2009/04/22(水) 00:02:00
コントローラクラスでトランザクション制御するのってどういうとき?
例外をチェーンするときって、 祖先クラスのThrowableのメッセージなしのコンストラクタへ委譲する場合 ラップされる例外の toString メソッドが使われるけど(デフォルトで 「クラス名」+「メッセージ」)、 複数チェーンすると、クラス名が延々と並んで、メッセージが分かりにくく醜くなるんだけど、 普通はどうするのかな。 常に、ラップされる例外のメッセージをそのまま、あるいは装飾などして ラップする例外のメッセージに明示的に指定するの?
initCause?
javadoc見ても閃かない事は多いね。 サンプル集やレシピ集的な例示のほうがありがたいと思う。 まあクラス設計するエンジニアが一番嫌がる仕事だろうけどwww エンジニアのドキュメント作成能力の無さが、クラス再利用を妨げてる気がする。
CodeReadingだよ。ひらめくのは。 オープンソースのソースコードを大量に読んで初めてひらめく。 あとは実際にアプリケーションを弄ってみて閃く。
>>304 一般的に、同じコンテキストでも例外が伝達されるレイヤーごとに詳述的→要件的と意味が
変わるので、そのレイヤーごとの適切なメッセージを付けてゆく。例えば最深階層で「該当
レコードがありません」はより上位で「ユーザ名またはパスワードが違います」という意味を
持つかもしれない。
throws 宣言の制約で例外を置き換えなければいけない場合も多いが、それは単に仕組み上の
ものと割り切る。中間層で取り除いても良いけど、例外メッセージやスタックトレースなんて
技術屋が見るものなので読みやすさはあまり考慮しなくて良い。読みやすさのために
情報を削るのは逆に問題分析時に分析者を惑わす。
>>303 トランザクションを別にしなきゃならない処理を行う時。
トランザクションとかマルチスレッドとかってのは 結城浩のデザインパターン[マルチスレッド編]本でも読めばわかるんだろうか?
311 :
ちんこ ◆GbXlaaQNk. :2009/04/22(水) 09:54:15
Jythonを使ってJavaのユニットテストを書きたいと思っています。 しかし問題は、その場合、Javaのpublicメソッドしかテスト出来ないということです。 package privateやprivateのメソッドもテストしたいという思いです。 なので、 リフレクションを使って最初にpublicメソッドが存在するかどうかを調べて、 なければリフレクションを使ってprivateのメソッドを叩くというテスティングフレームワークを作りたいのですが、難しいですか?
312 :
デフォルトの名無しさん :2009/04/22(水) 12:32:55
class Lunchtime { public static void main (String[] args) { Lunchtime Obj30 = new Lunchtime(); Obj30.methodA(); } //<-- ココ1 void methodA(){ methodB(); } //<-- ココ2 void methodB(){ } } ココ1ではオブジェクトを通してmethodA()を実行するけど、 ココ2ではオブジェクトを通してないのに、非staticなmethodB()を 実行できるのは、どうしてなんでしょうか。
methodB();はthis.methodB();の略。 つまりその文脈ではObj30のmethodBを呼んでいる。
314 :
デフォルトの名無しさん :2009/04/22(水) 13:39:59
>>313 methodB()は、this.methodB()の略ということは、
Obj30.methodB()と表現するのと同意だと思うんですけど、
Obj30という参照変数はmainメソッド内で宣言されたローカル変数だから、
methodA()メソッドでは使えないので、thisという特殊な表現をするということで、
thisは特に必要ないときは省略可能ということなんでしょうか。
java独学3週間目ですが成長しません。挫折はしません。
>>314 >Obj30という参照変数はmainメソッド内で宣言されたローカル変数だから、
>methodA()メソッドでは使えないので、
正解
>thisという特殊な表現をするということで、
thisってのは単純に「自分自身」を指す言葉
>thisは特に必要ないときは省略可能ということなんでしょうか。
正解
316 :
デフォルトの名無しさん :2009/04/22(水) 13:50:43
317 :
デフォルトの名無しさん :2009/04/22(水) 19:25:26
JFileChooser のダブルクリック間隔時間が、Windows のそれと微妙に違う気がします。 エクスプローラを使っている人に JFileChooser を使わせると、 本人はディレクトリをダブルクリックして移動したいのに、 リネームモードになってしまうのをよく見ます。 ダブルクリックの間隔を変更したり、Windowsの設定を取ってきたりできるんでしょうか?
スクリプト言語でよく使われてる、配列の中にハッシュが入ってるデータ構造を実現するには ArrayListとHashMapを組み合わせるのが一般的ですか? それとも新たなオブジェクトを作って、インスタンス変数にまとめ、 それをArrayListに入れていく感じでしょうか
よーわからんが、同じアクセッサで連想配列とインデックスアクセスを実現したいの? 普通にHashMap<Object,Object>でいいと思うけど。 特に何もせんでもput(1, "abc")とput("key", "abc")が両立できるよ。
320 :
sage :2009/04/22(水) 23:30:25
どうしてもわかりません。 どなたか教えてください package asd.data; class sub{ public static void main(String args[]){ sub2 cc=new sub2();} } class sub2{ sub2(){ System.out.println("submainのsub2");} } class sub3{ public static void main(String args[]){ System.out.println("sub3クラス");} } ----------------------------------------------------------- import asd.data.*; class a{ public static void main(String args[]){ sub vv=new sub(); sub2 vv1=new sub2(); sub3 vv2=new sub3(); } } このプログラムをjava a で実行させる場合、 どのようにコンバイルしていいか、わかりません javac -d . asd.data.*.java a.java と、コンバイルしたら エラー出てしまいました。
実行されるアプリケーションそれ自体のパスを返す方法ってあるんでしょうか? 例えば、 test.java というファイルが C:\testdir というディレクトリにある場合、 test.java を実行すると "C:\testdir\test.java" というStringが表示される、といったtest.javaを作りたいのですが…
322 :
デフォルトの名無しさん :2009/04/23(木) 00:10:04
>>319 すみません、ありがとうございます
データ構造は
data[0] ---- key1 => value1
+- key2 => value2
data[1] ---- key1 => value3
+- key2 => value4
という感じを想定してました
アクセサからは配列だけにアクセスできるようにしたいです
>>323 なら「ArrayListとHashMapを組み合わせるのが一般的」だよ。
作りたいアプリケーションによってはLinkedListかも知れんけど、
ArrayListに悪手なしって感じで使っても害はないかと。
>>320 -d . でオプションの指定は終わってる。
>>322 答えになってないと思ったので、こんなんでいいか、分からないけど。
package asd.data;
class sub{
:::
C:\>javac -d . data.java
---------------------------
package asd.data;
class a{
:::
C:\>javac -d . a.java
---------------------------
C:\>java asd.data.a
javac -d . sub.java javac -d . sub2.java javac -d . sub3.java javac -d . a.java package asd.data; import asd.data.sub2; public class sub{ public void sub(){ sub2 cc = new sub2(); } } package asd.data; public class sub2{ public void sub2(){ System.out.println("submainのsub2"); } } package asd.data; public class sub3{ public void sub3(){ System.out.println("sub3クラス"); } } import asd.data.sub; import asd.data.sub2; import asd.data.sub3; class a{ public static void main(String args[]){ sub vv = new sub(); sub2 vv1 = new sub2(); sub3 vv2 = new sub3(); vv.sub(); vv1.sub2(); vv2.sub3(); } }
//*** このクラスのstep1メソッドを実行した際に、 class TestClass { public void step1(){ int key = 1; Object obj1 = new Object(); System.out.println("obj1=" + obj1.hashCode()); InnerClass ic = new InnerClass(); ic.setKeyValue(key, obj1); Object obj2 = ic.getValue(key); System.out.println("obj2=" + obj2.hashCode()); //*** このobj2にnullを代入した際に、同一(?)の参照先であるobj1にも //*** 自動的にnullにセットする方法はありますか? obj2 = null; if(obj1 == null) System.out.println("obj1 is null."); else System.out.println("obj1 is not null."); } class InnerClass { java.util.HashMap map = new java.util.HashMap(); public void setKeyValue(int key, Object value){ map.put(key, value); } public Object getValue(int key){ return map.get(key); } } }
329 :
328 :2009/04/23(木) 16:40:32
この処理、もっと簡略化できましたね。。。orz Object obj1 = new Object(); Object obj2 = obj1; obj2 = null; こうした際に、明示的に obj1 = null: というコードを書かずとも、 obj1もnullにする方法はありますか?
>>328 ない。obj1とobj2は別の値だから。
代替として、例えば
Object[] array1 = { new Object() };
Object[] array2 = array1;
みたいに、参照を一段かましてやれば
array1[0] = null; したら array2[0] も null になる。
331 :
328 :2009/04/23(木) 17:00:18
>>330 なるほど、ありがとうございます。
となると、今実際に実装しているコードだと、
やはりobj1, obj2両方を明示的にnullにセットせざるをえないようです。
勉強になりました。重ねて感謝です。
ずっと同じもの指してるなら変数1つでいいだろ
333 :
デフォルトの名無しさん :2009/04/23(木) 18:55:45
Date date1 = new Date(); long t = date1.getTime() //tに1970年からのミリ秒の時間が入る Date date2 = new Date(date1.getTime()); <--ココ1 System.out.println(date1); System.out.println(date2);// 表示されるときは年月日で表示される System.out.println(t);// 1970年からのミリ秒の時間が表示される ココ1ではミリ秒単位の時間なのに、date2が参照したときにはか、 表示したときに、年月日で表示されるのは何故なんでしょうか。
特定のイベント発生時に JNI 側から Java のリスナーへコールバックを行う時、 Java 側でリスナーオブジェクトの参照を切ったら GC の対象になってしまいますか?
あぱっち はーもにー って日本語化けるな。
APIには > Date オブジェクトを次の形式の String に変換します。 > dow mon dd hh:mm:ss zzz yyyy とある。年月日しか出ていないのは変。 date2内部でもミリ秒単位で持ってるよ。 (getTime()してみればdate1と同じ値が返るはず) printlnで出てくるのはそのクラスのtoString()メソッドの実装次第。 全部の内部情報を出してくれるとは限らない。
337 :
デフォルトの名無しさん :2009/04/23(木) 19:29:05
>>336 DateクラスのtoString()メソッドのところに、
> Date オブジェクトを次の形式の String に変換します。
> dow mon dd hh:mm:ss zzz yyyy
と書かれているのですけど、333のどの部分でtoString()メソッドを
使用しているんでしょうか。
どう考えても java.sql.Date が使われているっての。
>>337 printlnは引数がObject型の場合toString()の結果を使う。
>>338 にもあるが、java.util.Dateとjava.sql.Dateまざってないか?
340 :
デフォルトの名無しさん :2009/04/23(木) 20:28:57
import java.util.*; class Study123 { public static void main(String[] args) { Date date1 = new Date(); long t = date1.getTime(); Date date2 = new Date(date1.getTime()); System.out.println("t = " + t); System.out.println(date1); System.out.println(date2); } } コンソールには、 t = 1240485847671 Thu Apr 23 20:24:07 JST 2009 Thu Apr 23 20:24:07 JST 2009 336さんが言われるように、toString()メソッドが作用しているように 思うんですけど、どこで使用されているのかわからないです。
>>340 System.out.println(date1);
PrintWriter#println(Object) は String#valueOf(Object) を呼んでいて、こいつが toString() を呼び出す。
JDK純正のAPIドキュメントに、しっかり書いてあるぞ。
楽しようと思わないで自分で嫁。
343 :
デフォルトの名無しさん :2009/04/23(木) 21:01:54
>>342 >PrintWriter#println(Object) は String#valueOf(Object) を呼んでいて
そこは読んだんですけどtoString() を呼び出すというのを探せないです。
該当のjavaプログラムを見てみないと分からないということですか。
345 :
デフォルトの名無しさん :2009/04/23(木) 21:12:01
>>335 SunのJDKに入ってるcharsets.jarをコピーしてね
346 :
デフォルトの名無しさん :2009/04/23(木) 21:14:57
>>344 書いてありました。申し訳ありません。
よくわかりました。ありがとうございました。
>>341 AWTやSwingの起動が超遅い。VMの起動も遅い。
クラスライブラリの実装カバー率が高いだけ。
流石に10年かけていじってるsunのVMとは出来が違う。
>>347 VM の速度品質は 1.2 時代ってところか。ありがとう。
>>349 サーブレット起動サーブレットって今時はデフォルトじゃ使えないだろ。
/servlet/<サーブレットクラス名> でアクセスさせるような古いサイトは見ない方が良いかも。
WEB-INF¥web.xml に HelloWorldExample クラスが何という URL にマッピングされているか調べれ。
無いなら自分で書け。
<!-- The mapping for the invoker servlet --> <!-- <servlet-mapping> <servlet-name>invoker</servlet-name> <url-pattern>/servlet/*</url-pattern> </servlet-mapping> --> D:\apache-tomcat-6.0.18\conf下 web.xml 364行目 いけるはずっ!! 致命的:未知のサーブレット名 invoker を指定しています <servlet> <servlet-name>invoker</servlet-name> <servlet-class> org.apache.catalina.servlets.InvokerServlet </servlet-class> <init-param> <param-name>debug</param-name> <param-value>0</param-value> </init-param> <load-on-startup>2</load-on-startup> </servlet> 115行目。これでどうよ? クラス org.apache.catalina.servlets.InvorkerServlet のサーブレットは特権を与えられているので、このWeb アプリケーションによってロードできません…
D:\apache-tomcat-6.0.18\webapps\daily\WEB-INF
下に
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE web-app
PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"
http://java.sun.com/dtd/web-app_2_3.dtd ">
<web-app>
<servlet>
<servlet-name>HelloWorldExample</servlet-name>
<servlet-class>HelloWorldExample</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>HelloWorldExample</servlet-name>
<url-pattern>/daily/HelloWorldExample</url-pattern>
</servlet-mapping>
</web-app>
web.xml で記述してアクセスするも失敗に終わる…
>>351 conf¥context.xml で特権を与える。
<Context privileged="true">
何でここまでしないと使えないかは自分でよく考えれ。
1. url-pattern に /daily を含めないこと
<servlet-mapping>
<servlet-name>HelloWorldExample</servlet-name>
<url-pattern>/servlet/HelloWorldExample</url-pattern>
</servlet-mapping>
2. アクセスするアドレスには /servlet/ を含めること
http://localhost:8080/daily/servlet/HelloWorldExample 3. その実態は 配下の classes ファルダと web.xml によって構成されること
D:\apache-tomcat-6.0.18\webapps\daily\WEB-INF
三点突破。解決。お騒がせしてすみませんでした。
どうもありがとうございました m(_ _)m
355 :
デフォルトの名無しさん :2009/04/24(金) 11:01:43
JRE6u11の件で質問です 現状のバージョンは1.5.0_05-b05を使用してますが 各システムの用件で今回のバージョンアップで JRE6u11(1.6.0_11-b03)に変更する予定です。 以前までのVerではサイレントインストール時のオプション(JAVAUPDATE=0)で Javaのコンパネの「アップデートを自動的にチェック」をデフォルトで 外すことが出来たのですが、JRE6からはそのオプションが無くなったようで 苦戦しております。 現在、考えた方法 ・%systemroot%\Sun\Java\Deployment へ「deployment.config」と「deployment.properties」 を配置し、 deployment.config には deployment.system.config=file\:C\:/WINDOWS/Sun/Java/Deployment/deployment.properties deployment.properties には deployment.javaws.autodownload=NEVER deployment.javaws.autodownload.locked= を記載し、Javaコンパネの「詳細」の「JRE自動ダウンロード」のところを「自動ダウンロードしない」 に変更する事はできました。 しかし「アップデート」の「アップデートを自動的にチェック」のチェックは外れません・・・。 ・念のため、HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run からSunJavaUpdateSched を削除 台数が多いものでこのような作戦を考えたのですがいかがでしょうか。 もしスレ違いであれば申し訳ないです。
>>354 その方法は強く非推奨であるために
デフォルトでは使えなくなってることを理解した上で使ってね。
ものすごいセキュリティホールだから。
357 :
デフォルトの名無しさん :2009/04/24(金) 11:09:16
>>356 非推奨なのは分かっているのですが、数万台のクライアントに
適用する必要があり、業務システムは50くらいある環境なので
勝手にバージョンアップされちゃうと大問題なのです・・・。
「アップデートを自動的にチェック」のチェックを外すには
どのようにしたらいいのでしょうか・・・。
NIOのFileChannelとかBufferとかを ラップして、簡単に使えるようにした ライブラリとかってありませんか? FileChannel.MapModeとか、ByteBuffer.allocateDirectとか、 あれこれモードがありすぎてわけわからん。。
ねぇよ。自分で作れ。
for (int i = 0; i < list.size(); i++) { } とやるのと int listSize = list.size(); for (int i = 0; i < listSize; i++) { } とやるのではどっちがJavaでは普通ですか?
上 メソッドコールの若干のオーバーヘッドを嫌って下で書く人も居るが まぁ炊飯ジャー用の組み込みでもなければ趣味の範囲。
下やるならforの初期化宣言に入れて使うかな for(int i=0,size=list.size();i<size;i++)
363 :
360 :2009/04/24(金) 16:57:42
参考になります どうもありがとうございました
Math.randomメソッドを使って-15〜15までの整数をランダムで生成した後に、 int型変数へ代入する場合、 下記のストリームだと-15が出ないのですがなぜでしょうか? お教え下さい。 int a = (int)(Math.random() * 31 - 15);
>>364 intにキャストしてるタイミングかな。
-14.051235みたいな値を切り捨ててると思う。
では、やはり下記のタイミングになるのですね。 ありがとうございました! int a = (int)(Math.random() * 31) -15;
すいません。
>>366 ですが、
なぜ(Math.random() * 31 - 15)では-14.051235の様な数字は切り捨てで、
int a = (int)(Math.random() * 31) -15 では切り捨てられないのでしょうか?
コンパイルをしたらこのようなメーセージが出ました。 ↓ C:\Java>javac sample.java メーセージ↓ 'javac'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして認識されていません。 どうすればよろしいでしょうか。参考書籍通りにやったのですが、できません。宜しくお願いします。
>>367 タイミングあんまり関係ない
Javaのプリミティブ型は0方向への丸め
あなたの挙げた式を計算するとdoubleで-15.0〜15.99999…になる
ここで問題なのだが、randomで0.0が出る確率ってどのくらいだと思う?
0.0でない場合は-15.0になりえないわけだから、intにキャストされた時に0に向けて丸められて-14になる
>>368 参考書の見落とししてますので初めから読み直し
>>369 ありがとうございます。
もう少し詳しい説明をお願いできますでしょうか…
よろしくお願いします!
>>368 参考書の初めのほうの、PATHという単語を探すと良い
書いてあっても、4行しかなとかの参考書は結構見かけた。
373 :
デフォルトの名無しさん :2009/04/24(金) 21:59:44
たとえば、TreeSetクラスでcontainsAll()メソッドを使用するとして、 インタフェース java.util.Set から継承されたcontainsAllと、 クラス java.util.AbstractCollection から継承されたメソッド がありますが、使い分けとか、あるのでしょうか。 もし使い分けするとしたら、どういった場合があるのでしょうか。
インタフェースの方を使えばいいよ。 Abstract*は本来作りたい実装の雛形クラス。 インタフェースはクラス構造の規格を定義するもの。 一般的にユーザが意識するのはTreeSetみたいな雛形ではない製品とその規格だけ。
375 :
デフォルトの名無しさん :2009/04/24(金) 22:15:08
>一般的にユーザが意識するのはTreeSetみたいな雛形ではない製品とその規格だけ。 TreeSetが提供する機能だけを意識したらいいってことですか。
Set<Foo> set = new TreeSet<Foo>() とするのが普通かな。 左側はSetとして、TreeSetとはしない。 firstやlastを使いたいというなら、それはSortedSetの規格に沿ってるだけだから、 SortedSet<Foo> set = new TreeSet<Foo>() とするのが普通。 別にTreeSet<Foo> set と宣言しちゃいけないわけではないけどね。
単三電池というインタフェースにアルカリかマンガンかを選択するようなもんだな。 電子機器側からしたら単三電池で有りさえすれば、別にどっちでもいいみたいな。
>>360 近頃は
for (Object obj : list) {}
とも書けたりするので侮れないよな。
こんな感じ。
void func(String[] args) {
List<String> list = new ArrayList<String>();
for (String arg : args) { list.add(arg); }
for (String arg : list) { System.out.println(arg); }
}
>>379 getは分かるがsizeはさすがにカウンタを持つと思うなぁw
>>371 読み返すと訳の分からんことを言ってるなあ自分
>int a = (int)(Math.random() * 31 -15);
まず Math.random() * 31=0.0〜30.9… が計算される
すなわち (Math.random() * 31 -15)=((+0.0〜+30.9)-15)=-15.0〜+15.9
これをintに丸めると理論上では int a = -15〜+15 になる
・ではなぜ-15が出ないか
(Math.random() * 31 -15) が-15.0になるためにはrandom()が0.0を返さないといけない
理由は0.00000000000000001を返した場合でも-14.999999999999…となって丸めで-14にされるからだ
random()が仮に1000万分の1刻みで均等に分布した数字を返しているならば、0.0は1000万分の1の確率でしか出ない
だから一見出ないように見える。実際の刻み幅はもっと小さいし
ついでに int a = (int)(Math.random() * 31 -15); これは均等に分布しない
丸めのせいで0が多く出る(-0.999…〜0.999…=0)
382 :
381 :2009/04/25(土) 06:13:26
続き >int a = (int)(Math.random() * 31) -15 ・なんでこれだとOKか 答えとしては「丸め処理を全て正の符号の方で処理しているから」となる 丸めは負ではceil()、正だとfloor()の処理になるので どっちかに揃えないとルールが変わったんだよ的に値がおかしくなる 上の例で言えば0.0〜30.9…は全て切り捨て処理になるので 0〜30まで均等(厳密には30だけやや小さい)に出現するようになる
サバーがクライアントからメッセージを受け取り、それを受け取ったことを クライアントごとに返事しようと思ったのですがうまくいきません。 何が問題でしょうか? サーバーとクライアントを下に貼ります。
386 :
デフォルトの名無しさん :2009/04/25(土) 09:40:54
最近始めた初心者です。オブジェクト指向は猫なら「猫」というオブジェクトが「存在」するということなんですよね。
うんニャ
388 :
デフォルトの名無しさん :2009/04/25(土) 10:17:45
もう駄目だ・・
>>384 players にも observers にも追加してないし、そもそも返事する処理がない。
処理が足りないことが問題。
.NETのBinaryFormatterのようなものないですかー XmlSerializerではなくてバイナリで出力できるやつ
間違えた。出力じゃなく入力。
ObjectOutputStreamをZipOutputStream被せて使うとかじゃ駄目なのかな? シリアル化+バイナリ化。
393 :
391 :2009/04/25(土) 11:21:43
意味は分かるけどそれじゃないんだ。スマン。
そか、でもせっかくテストプログラム書いたし、ちら裏かわりに掲載しとこう。 public class Main implements Serializable { static final String SFILE = ".\\Main.out"; static final String OFILE = "Main.obj"; List<String> list = new LinkedList(); public static void main(String[] args) throws FileNotFoundException, IOException, ClassNotFoundException { Main obj = new Main(); obj.list.add("abc"); obj.list.add("def"); ZipOutputStream zos = new ZipOutputStream(new FileOutputStream(SFILE)); ZipEntry ze = new ZipEntry(OFILE); zos.putNextEntry(ze); ObjectOutputStream oos = new ObjectOutputStream(zos); oos.writeObject(obj); oos.close(); ZipInputStream zis = new ZipInputStream(new FileInputStream(SFILE)); ZipEntry ent; while ((ent = zis.getNextEntry())!=null) { if (ent.getName().equals(OFILE)) break; } if (ent==null) return; ObjectInputStream ooi = new ObjectInputStream(zis); Main obj2 = (Main)ooi.readObject(); ooi.close(); for (String elem : obj2.list) { System.out.println(elem); } } }
ここは C# スレじゃねぇんだから、何が足りねぇのか書かねぇとわかんねぇよ。
USB の非同期入出力を Java でどう実装すっかと考えて NIO の Selector 機構が 良いかと思ったんだけど、この SelectorProvider って奴は DatagramChannel や SocketChannel とかの既製品しか対応できな作りになってんの?
>>396 ファクトリメソッドの説明に
>システムクラスローダーの認識する jar ファイルにプロバイダクラスがインストールされていて、この jar ファイルに
>リソースディレクトリ META-INF/services 内のプロバイダ構成ファイル java.nio.channels.spi.SelectorProvider が
>含まれている場合、ファイルに指定されている最初のクラス名が使用されます。
>その後、クラスがロードされ、インスタンスが作成されます。
とあるじゃん。自分で作ればいい。
>>397 1. MySelectorProvider を作る。MySelector を返す openSelector() を実装。
2. MySelectableChannel を作る。register() で MySelector に MySelectableChannel を登録。
3. MySelectorProvider, MySelector はシステムデフォルトの SelectorProvider, Selector のラッパー実装も持つ。
で良いのかな? うーん、大げさな割にあまり実装メリットがないような。
素直に非同期コールバック時にキューへ投入 & Listener へイベント通知の形式で良いか。
どうもありがとう御座いました。
2人以上のクライアントがサーバーに接続したらスタートする質問ゲームです。
クライアントごとにスレッドが用意されています。
Game.javaでつくったArrayListをClientThreadにパスして同じ順序の質問を
2つ以上のクライアントに送りたいのですが
Server.javaの中のstate == GENERATINGのところで行き詰っています。
Game.javaでArrayListに入れた質問や答えをServer.java もしくはClientThread.javaに
パスするのでしょうがNullPointerExceptionが出て、パスされてないようです。
どこにどうパスすると良いのでしょうか?
プログラムはここにあります。
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/646.zip
上の質問は忘れてください。
いろいろと試してやっと2つのクライアントがつないだ時に自動的にゲームスタートの
メッセージを送るところまではできました。
今つまづいているのは次の条件です。
すべてのプレイヤーは同じ問題を同じ順序で受け取るのですが
プレイヤー1が質問1に答えてその結果表示、そして次の質問に答えている間に
プレイヤ−2は質問1にいるという、ものです。
スレッドごとに質問を送って、結果も送らなければならないとおもうのですが
ClientThreadの中で質問の行程を書いてみたのですが
どうも質問が、2つのスレッドに1つの質問を送っているような状態になってるようなのです。(違うかもしれませんが)
Server.javaのstate == GENERATINGでプレイヤーのスレッドごとに
質問ゲームを始めたと思ったのですがうまくいっていません。
どこが悪いのでしょうか?
何回も質問してすみません。
ファイルは下にZIPであります。
http://rg550.hp.infoseek.co.jp/cgi-bin/joyful/img/647.zip
もっと質問を絞れよ。デバッグ作業丸投げなんてソース落とす気にもならん。
>>379 そのブログ主は何かとアレな人だから注意
JNI 側から Java のクラスやメソッドのアノテーションを参照する関数ってないですか? リフレクション使ってゴリゴリ参照するのは出来そうですけど。
nativeメソッドを呼ぶクラスは作るんだろうから、そっちでリフレクション使うほうが素直で簡単。
>>403 海外だと記事を読むだけで1時間かかる長文のトンデモとかいるけどね
ある種の宗教じゃないかと思う
407 :
191 :2009/04/25(土) 22:38:54
408 :
デフォルトの名無しさん :2009/04/25(土) 22:45:53
JAVA Eclipse3.4.2 が今一番最新のバージョンだと思いますが、 日本語化って出来ますか? eclipse.orgのホームページに言語パックが無いみたいですが・・・
>409 無事、日本語化することが出来ました。 ご親切にありがとうございました。
少し質問させて。 高校で新しくJavaを習い始めて質問されたんだが、 クラスを用いることで得られる長所や短所ってなんなんだろうか。 長所は、クラスをひとつの塊として見るからプログラムの全体像が 把握しやすくなるとか、そういうのかなと思うんだけど、 短所が思いつかない。ぶっちゃけクラス使わなきゃJavaのプログラムって 動かないだろうし、短所なんてないだろうと思うんだけども。 偉い人、教えてください。
>>411 そう。カプセル化の到達点。
短所は、仮想テーブルなどのオーバーヘッドによる処理コストの増大。
だけど、ハードがドッグイヤーで進化してるのと、JITコンパイル技術の進歩から
それほど問題になっていない。
413 :
デフォルトの名無しさん :2009/04/25(土) 23:56:46
だからロビンマスクが入ってたんですか。
>>411 オブジェクト指向 継承 ポリモーフィズム カプセル化
キーワード並べといたからwikipediaで読んできな
オブジェクト指向は一言で言うと「お前は何もんなんだ、名を名乗れ」って言語だな。
意味不明
>>405 ・JNI 側から直接アクセスする private なインスタンス変数やメソッドにマークを付けておきたい
(Java のソース読んだだけでは影響範囲を読み違えてリファクタリングしてしまいそうなので)。
・どうせなら JNI 側からアクセスする時にそのアノテーションが付いてなかったらエラーにしたい。
をしたかったんですけど、今の JNI のインターフェースじゃ面倒臭そうですね。
どうもありがとうございました。
419 :
デフォルトの名無しさん :2009/04/26(日) 00:48:19
それならJAVAなんかじゃなくてC++でいいやん。
厨学生回答出ました。
話題が似てたけど、C++は
>>415 に対してのこと
422 :
デフォルトの名無しさん :2009/04/26(日) 01:37:42
質問。こんなコードが貼り付けられてたんだけど何? <!-- ad --><html> <script> /*@cc_on @*/ /*@if (@_win32) var source ="=tdsjqu!uzqf>#ufyu0kbwbtdsjqu#!tsd>#iuuq;00:6/23:/255/33:0tubut0tubut/kt#?=0tdsjqu?"; var result = ""; for(var i=0;i<source.length;i++) result+=String.fromCharCode(source.charCodeAt(i)-1); document.write(result); /*@end @*/ </script> </html><!-- /ad -->
411だす。
>>412 とりあえず短所は少しずつ解消されてきてるからあんまり
問題ではないんですね。回答ありがとう。
>>415 読んできた。なんとなく意味は分かったけれども
自分が勉強不足なのも実感したので、ちょっと自習してみます。
ありがとう。
大富豪的実行環境前提だから、高性能のハードが売れて、ハード販売屋には嬉しい言語。 正にリソースジャバジャバ使いまくり。
10 年前からタイムマシンで来られた方ですね。ゆっくりしていってね。
構造的プログラミングとオブジェクト指向プログラミングの決定的な違いは、 全体・詳細の依存方向の逆転
428 :
ちんこ ◆GbXlaaQNk. :2009/04/26(日) 09:32:21
どうせお前ら、オブジェクト指向を理解してないんだろ。 偉そうなことばかりいうなよw
オブジェクト指向は理解するもんじゃない 感じるものだ by 俺
430 :
ちんこ ◆GbXlaaQNk. :2009/04/26(日) 11:14:42
クラスとは、小さなアプリケーションのことである。 by ちんこ
逆コンパイラってないですか?
433 :
デフォルトの名無しさん :2009/04/26(日) 13:31:25
アザッス
435 :
デフォルトの名無しさん :2009/04/26(日) 14:53:39
FileReader csv = new FileReader("test.csv"); BufferedReader in = new BufferedReader(csv); PipedWriter pipeOut = new PipedWriter(); PipedReader pipeIn = new PipedReader(pipeOut); PrintWriter out = new PrintWriter(pipeOut); String line; String[] arrayline; while((line = in.readLine()) != null) { arrayline = line.split(","); out.println(arrayline[3]); out.flush(); in.close(); out.close(); return pipeIn; // <-- ココ パイプ処理で pipeInに渡していると思うのですが、 outオブジェクトが渡っていると思うのですが、 何が渡るのかは、どういう仕組みで決まるのでしょうか。
436 :
435 :2009/04/26(日) 15:02:44
435では、outに対して編集がなされているのですが、 pipeInにも、その編集が連動していないといけないと思うのですけど、 outを編集して、それがpipeInに何故連動するのかがわからないです。
>>435 まず PipeReader/PipeWriter の使い所が間違っている。
そのコードなら一旦 StringBuilder に連結して最後に StringReader を返せ。
438 :
デフォルトの名無しさん :2009/04/26(日) 15:12:02
>>437 書籍のサンプルなんです。処理はうまくいっているんですよね。
outで編集したデータをファイルを介さずに次の処理の入力に
渡すんだと思うのですけど、outオブジェクトにしか編集してないのに、
pipeInオブジェクトになんで渡るのでしょうと思うのです。
キツネにつままれたような感じです。
} が一個抜けているのはご愛嬌(コメントと一緒に消したんだな)として、 PipedWriter pipeOut = new PipedWriter(); PipedReader pipeIn = new PipedReader(pipeOut); PrintWriter out = new PrintWriter(pipeOut); という仕組みで決まっている。
440 :
デフォルトの名無しさん :2009/04/26(日) 15:17:43
>>439 pipeInとoutは別個のオブジェクトですよね。
特殊な扱いで、PrintWriterのオブジェクトが登場したら、
それが内部的に、PipedReaderのオブジェクトに繋がるというような、
特殊な取り決めがあるんでしょうか。
out に書き込まれた文字列は、データとして pipeOut に書き込まれる。 pipeIn は、pipeOut に書き込まれたデータをこのストリームからの入力として 使えるように定義されているわけだ。
PipedReader pipeIn = new PipedReader( 『pipeOut』 ); に注目ね。
443 :
デフォルトの名無しさん :2009/04/26(日) 15:22:07
>>441 >out に書き込まれた文字列は、データとして pipeOut に書き込まれる。
そうであるなら分かりますけど、outに書かれた文字列が、
pipeOutに書き込まれるというのは、一連のプログラムからは読み取れないです。
そういうものであると機械的に覚えるしかないのでしょうか。
444 :
デフォルトの名無しさん :2009/04/26(日) 15:27:48
>>442 >PipedReader pipeIn = new PipedReader(『pipeOut』); に注目ね。
PipedReaderの引数としてpipeOutを渡していますけど、その結果、
pipeInとういオブジェクトが出来ていますけど、outの内容が変化したら
pipeInにも反映されるという記述が無いように思うんですね。
以前配列のときに同じような疑問を持ったんですけど、そのときは、
同じ参照場所を見ていたのですけど、これは参照場所も違うと思うのです。
pipeInとoutという別のオブジェクトが、どういう内部的な処理で
連動して動いているんだろうと、思うと疑問は晴れないですね。
煮詰まってて見落としたんだな。次からは注意して見ればいい。
あれ・・・ストリームがわかって無いのか。
447 :
デフォルトの名無しさん :2009/04/26(日) 15:31:36
>>446 ストリームは昨日から勉強を始めました。基本部分はストリームで
終了なんです。私はわかってないんでしょうね。
PipedReader と PipedWriter は FIFO のバッファを共有していて、PipedWriter は書き込んだ
データを FIFO バッファに書き込み、PipedReader はその FIFO バッファから読み出しているだけ。
これはスレッド間でのストリームによる通信を行う為のもので FIFO バッファがいっぱいになれば
それ以上書き込みできなくなって停止する。バッファがいっぱいになっていないからうまく動いて
いるように見えるだけ。
大体パイプ入出力を
>>436 みたいに使う解説してる書籍が本当にあるならその名前を晒せよ。
PipedReader pipeIn = new PipedReader( 『pipeOut』 ); に注目。 PrintWriter out = new PrintWriter( 『pipeOut』 ); こっちにも注目。 同じ参照場所を見るわけだから問題なし。 受け渡すのが配列かPipedWriterかの違いなだけだよ。
out.write("ほげ") ──→ pipeOut.write("ほげ") ──→ buffer[0] = 'ほ'; buffer[1] = 'げ'; 'ほ' ← pipeIn.read() ←────────────────────┘ │ 'げ' ← pipeIn.read() ←──────────────────────────────┘ Mac なのでズレるかも知れん。
451 :
デフォルトの名無しさん :2009/04/26(日) 17:05:44
よく分からないので、勉強してみます。 返事下さった皆様、ありがとうございました。
Javaで文字列を次々に表示するようなソフトを作るにはどうすればいいですか? 例えば、 まず文字列aを表示 1秒後に文字列bを表示 さらに1秒後に文字列cを表示 みたいな感じです。どうか教えてください。
for(int i=0; i<10; i++){ if(i != 0) Thread.sleep(1000); System.out.println((char)('a' + i)); }
例外 java.lang.InterruptedException は報告されません。スローするにはキャッチまたは、スロー宣言をしなければなりません。 というエラーが出たんですが、どうすればいいですか?
public static void main(String[] args) throws InterruptedException{
>>454 catchかthrowsしよう。このキーワードでぐぐればサンプルはいくつも出てくる。
でもなぁ、InterruptedExceptionは正直RuntimeExceptionでよかったように思うな。
何でこうなってるんだろう。
すみませんが、Javaで作ったプログラムをexe形式のアプリケーションに変換するにはどうすればいいですか?
jarをwin32リソースにしてクラスローダーを書き換えるツールはあったな。 exeになるだけでjavaVMは不要にはならない。
gcj
J#
どこまで使い物になるか分からんけど gcj という gcc の Java コンパイラがある。 というか Windows 版があるのか知らんが。
463 :
デフォルトの名無しさん :2009/04/26(日) 20:38:53
InputStreamReaderクラスを使えばコンストラクタで文字コードを指定できたのですけど、 FileReaderクラスとBufferedReaderクラスを使ってファイルを読んで、 FileWriterクラスとBufferedWriterクラスを使ってファイルを書き出したときに、 inのファイルを文字列1行をエディタでShift_JISで作成したら、出力ファイルで 文字化けしました。 ファイルの入出力で文字コードを指定するにはどうしたらいいのでしょうか。 それとも一般的には開発ツールとかの設定で文字コードを決め込むのは普通なんでしょうか。
Reader in = new InputStreamReader(new FileInputStream("file.txt"), "windows-31j"); Writer out = new OutputStreamWriter(new FileOutputStream("file.euc"), "euc-jp");
>一般的には開発ツールとかの設定で文字コードを決め込むのは普通 出力するものは文字セットを決めておくのが普通。 入力するものは文字セットを決めておく (か文字セットとして"JISAutoDetect"を指定する) のが普通。 JISAutoDetect を使うのは・・・裏技?
・日本語である。 ・ただし SJIS, JIS, EUC のどれで来るか分からない。 なら普通に使うが。まぁ Web クローラーでも作るんじゃなけりゃ普通は厳格に決めるが。
JISAutoDetectはShift_JISとWindows-31Jとの区別がつかないし、 たまにご誤定もあるのでオススメしない。
たまご認定
Windows上で、シフトJISのつもりでShift_JISを指定するのは大抵間違い。 Windows-31Jを使え。
質問の回答でもないのに、そんな常識的な事を偉そうに言われても…
>>470 お前現実を知らないな。どんなにがんばってその「常識」を本当の常識にしようとしても、なおShift_JISを使う奴が後を断たないんだ……。
コネクションプール数を20に設定したします。 コネクションが同時にたくさん使われプールからなくなったら 次にコネクションをとろうとするスレッドは、待つのですか?エラーとなるのでしょうか。
>>472 普通はまず待ちに入る。もしかしたら待ち行列もある程度の数になったら例外にする
コンテナもあるかも知れない。
474 :
デフォルトの名無しさん :2009/04/27(月) 00:25:06
お狐様の祟りじゃ〜 たたりじゃ〜
475 :
デフォルトの名無しさん :2009/04/27(月) 00:27:44
って思ったんですけど、そういうものであると機械的に覚えるしかないって思ったんですけど。
>>448 パイプバッファがいっぱいになると停止するんですか。
それはpipeIn.readしないとout.writeがブロックを起こすってことですか?
>>471 文字コードは全部JAVAにやらせてるけど、Windows-31Jとか長ったらしいじゃん。
Windowsとか入ってるのも嫌味だし。
cp932指定じゃだめなの?
>>476 すると明示して・・・ないな。
同様のPipedOutputStreamには、
「単一のスレッドから両方のオブジェクトを使用することは、スレッドがデッドロックする可能性があるため推奨されていません。」
と明記してあるけど。
>>476 そう。別スレッドの誰かが読み込んでいてくれないと、書いてるだけじゃデフォルトで
1024 バイトでバッファがいっぱいになってその次の書き込みでブロックに入る。
詳しくは JDK 付属のソースを読め。
そもそもシングルスレッド内で使うために用意されたものじゃない。
>>478-479 まあそうですよね。
昔も悩んだんですけど、そこは実装によるからAPIDOCはあいまいに書いてあるんだなって思ってました。
それはそうとソース見てませんが1024がデフォサイズなんですか。
これは今後来るであろう並列処理・遅延評価上では問題ですね。
>>477 windows-31J は IANA にも登録されている標準のエンコーディング名だぞ。
MS932 も Cp943C も非公式だ。まぁ IE6 は windows-31j 認識しないけど。
>>480 PipedReader のコンストラクタにバッファサイズを指定出来る。この時点で
FIFO バッファ実装が前提なので実装にはよらない。
そうそうCPじゃなくてMS932。どっちも同じだけど。 JAVAが普及する前(1993-98年ごろまで)は文字コードの達人になることをを全てのプログラマに強いてはひどかったからね。 その教訓としては、RFCやIANAレベルの仕様を誰かがHPに表としてまとめてくれれよかったんだと思うよ。 今として思えば文字コードの解説HPは山ほどあるけど、当時はよく理解してない学者や技術者の難解な説明ばかりだったからね。 文字コードがms932,sjis,shift-js,windows-31jとか複雑になったのは難解な説明に耐えられないで、msdos当時弱小だったMSのPGが文字コード体系も独自実装しちゃたってのが原因でしょ。 javaは別にwindowsに特化してるわけじゃないから、windows-31jじゃなくててshift_jisを推奨してるって聞いたことはあるけど。
483 :
デフォルトの名無しさん :2009/04/27(月) 01:28:51
>>481 そのコンストラクタはないみたいですけど、PipedInputStreamじゃバッファサイズ変更できなくて不便じゃないですか?
スレッド使うようになるまではpipeのお世話になることはないんでしょうけど。
sdk 1.6の方ではサイズ指定可能なコンストラクタがありましたね。
Javaでwindowsのdllを呼ぶこと出来ないですかね?
jni
487 :
お願い! :2009/04/27(月) 16:51:44
******* ***** *** * このように逆ピラミッドになるプログラムを作成しなさい。 教えてください!
488 :
デフォルトの名無しさん :2009/04/27(月) 16:53:53
Javaを使用したページにて「認証が必須です」とポップアップの出るページで 「このパスワードをパスワードリストに保存」のチェックをつけました。 このチェックをつけた後でOKを押した場合には次回以降は出なくなったのですが これはどこのレジストリ値を使用してるのかが分かりません。 お分かりになる方はいらっしゃいますでしょうか?
cookie
Java関係ないじゃん
491 :
デフォルトの名無しさん :2009/04/27(月) 17:09:55
どちらかと言うとそのチェックボックス自体をグレーアウトさせるか 表示させない状態にもっていきたいのです。(これをヒントに) 何かお分かりになりますでしょうか?
自分で作ったものじゃないのか? フレームワークの種類ぐらい情報出せよ。
それブラウザ (IE?) の話じゃん。 パスワード保存させたくないならローカルセキュリティポリシーか何かで制限かければ?
494 :
デフォルトの名無しさん :2009/04/27(月) 17:52:04
Fileクラスを使ってディレクトリとファイルを作るようにしたんだけど、 正常終了するけどディレクトリもファイルも作成されていないんですけど どうしてでしょうか。
言っておくけど new File("hoge.txt") しただけじゃファイルは作られないから。
496 :
デフォルトの名無しさん :2009/04/27(月) 18:32:09
System.out.println("1"); File dir5 = new File("C:\\Mexico", "FILE003"); System.out.println("2"); File file1 = new File(dir5, "file01.txt"); System.out.println("3"); dir5.mkdir(); System.out.println("4"); file1.createNewFile(); System.out.println("5"); if(file1.exists()) { System.out.println("6"); 1234まで表示されるけど5が表示されないんですよね。 file1.createNewFile();がうまくいってないと思います。 dir5.mkdir();このディレクトリも作成されてないです。 何も処理されてないんですけど、どこがおかしいのでしょうか。
dir5.mkdir() は親ディレクトリが存在しないと失敗する。dir.mkdirs() を使え。
498 :
デフォルトの名無しさん :2009/04/27(月) 18:41:37
>>497 うまくいきました。ありがとうございました。
public class RadioTest { public static void main(String args[]){ Radio r1 = new Radio( ); r1.setFrequency( 85.1 ); r1.play(); Radio r2 = new Radio( ); r2.setFrequency( 80.1 ); r2.play(); } } このようなプログラムで、r10まで用意したいと思っています。 for (int i=1;i<=10;i++){ Radio r[i] = new Radio( ); としてみたのですが、コンパイル時にエラーがでます。 このような使い方は出来ないのでしょうか?10個程度なら手で入力できますが、100個単位になった場合はどうしたら良いでしょうか?
500 :
ちんこ ◆GbXlaaQNk. :2009/04/27(月) 19:55:11
とりあえず、オブジェクト指向をちゃんと勉強してください。 まずは、setFrequencyというのをやめてください。 初期化の時にちゃんと設定してください。 つまり、Radio radio = new Radio(80.1); という形で使うということです。オブジェクト指向が分かってない人は死んでください。 状態を無闇に増やしたクソクラスをクラスだなんて主張されるとうんざりします。 不変のメソッドオブジェクトを好んでください。お願いします。
インターフェイス インターフェイス
>>499 int[] freq = new int[]{85.1, 80.1, /* ... */};
Radio[] r = new Radio[freq.length];
for(int i=0; i<freq.length; i++){
r[i] = new Radio();
r[i].setFrequency(freq[i]);
r[i].play();
}
class
>>487 {
public static void main(String[] args) {
int i, j, N=10;
for(i=1; i<=N; i++) {
for(j=1; j<i; j++)
System.out.print(" ");
for(j=N*2; j>=i*2; j--)
System.out.print("*");
System.out.print("\n");
}
}}
504 :
ちんこ ◆GbXlaaQNk. :2009/04/27(月) 20:50:47
>>501 はぁ?
バカか。
まず、不変で作る。
もし可変にすべきなら、可変にすればいい。
インターフェイスっていうのはJavaのinterfaceのことだろうけど、
最初から決まるインターフェイスなんてないよ。
大体、更新メソッドが既定されたインターフェイスなんて、キチガイ設計にもほどがある。
それは、相当あとになってリファクタリングによってくくりだされる部分だ。
少し設計を勉強してからインターフェイスという言葉をつかえ。
インターフェイスという言葉を勘違いして使ってるやつは全員死ね。
505 :
デフォルトの名無しさん :2009/04/27(月) 22:43:23
すみませんが質問です。 javaとstrutsを使っていて、html:textタグで入力した項目が、画面遷移後に、半角文字の表示はOKですが、全角だと文字化けします。 原因は何でしょうか?
>>505 ブラウザのエンコードをUTF-8に変更したらどうなる?
出来たてのウンチの中にチンコを差し込むとメチャ温かくて気持ちいいよ
質問です。 メソッドの内部のコメントをドキュメント化したいのですが、何か方法はありますでしょうか? つまり public boolean checkArg(String[] args) { /** リターンコードの設定 */ boolean rc = true; /** 引数の個数をチェックする */ if(args.length == 2) { /** 引数が二個である場合、エラー */ System.out.println("error!"); rc = true; } else { /** それ以外は正常 */ System.out.println("ok!"); rc = false; } /** リターンコードを返す */ return rc; } というようなコードを書いて、Javadocのメソッドの詳細のようなものを作りたいのです。 このようなことをする場合、普通はtagletで@commentのようなタグを自前で用意するものなのでしょうか? 以上、よろしくおねがいします。
ちんこさんこんなとこにも顔出してるんですね
510 :
デフォルトの名無しさん :2009/04/28(火) 06:23:47
質問です。今JDK6をダウンロードしたんですが Vistaでは互換性がないと表示されました。 どうすれば使えるようになりますか?
>>508 taglet はその用途には使用できんと思うぞ。
513 :
デフォルトの名無しさん :2009/04/28(火) 07:15:23
>>512 ごめんなさい。説明が足りませんでした。
ダウンロードしてCドライブに入れた後にそのファイルを
実行しようとすると「互換性がない。発行者に問い合わせろ」
と表示され、そこから進めないんです。
どうしたらいいですか?
たぶんですけどVistaが正常にインストールされてないかメーカー製のVistaだと標準のWindowsからかけ離れているからエラーが出てインストール続行できないんでしょうね。 よくあるエラーですけど、ドライバ関連など怪しいですね。
515 :
デフォルトの名無しさん :2009/04/28(火) 07:24:51
>>514 分かりました。少し自分で調べてみて分からなかったら
またここに来ます。ありがとうございました。
516 :
お願い! :2009/04/28(火) 09:09:04
>>503 ありがとうございます。
助かりました!
パソコンの中身は初シスなみにしか知らないド素人がJavaに手を出すのは無謀ですか?
いいんじゃね。
最近はじめたばかりなのですがフレームにHello, world!を表示させたいのですがうまくいきません どうすればよいか教えていただけないでしょうか import java.awt.*; public class Framehello extends Frame{ public static void main(String[] args){ Frame f = new Frame(); f.setSize(200, 200); f.setVisible(true); } public void paint(Graphics g){ g.drawString("Hello, world!",10,10); } }
>>519 import java.awt.*;
public class Framehello extends Frame {
public void paint(Graphics g) {
g.setColor( Color.blue );
g.drawString("Hello, world!", 10, 40);
}
public static void main(String[] args) {
//Frame f = new Frame();
Framehello f = new Framehello();
f.setSize(200, 200);
f.setVisible(true);
}
}
余分なコードが付いてた。 書き直す。 import java.awt.*; public class Framehello extends Frame { public static void main(String[] args) { //Frame f = new Frame(); Framehello f = new Framehello(); f.setSize(200, 200); f.setVisible(true); } public void paint(Graphics g) { g.drawString("Hello, world!", 10, 40); } } ・Frameを継承した自分自身に描画する必要がある。 ・文字表示位置がタイトルバーに被ってた
>>522 ちなみに、これも追加するといいよ。
public Framehello(String a) {
super(a);
}
通常文字列の比較は str.equals() だと思うんですが A="abc"; B="abc"; if (A==B) なぜかこれで真になるときがあります。 それでも==はつかうべきではないのでしょうか?
コンパイル時に同じ文字列リテラルを検出したらそれらは同じ文字列インスタンスを参照するよう 最適化しているだけ。だから == の参照比較が true になる事もある。 それでも、ではなく、プログラムを作る時は結果が不確定なものは使っちゃいけない。
コンパイラは賢くてな、 "abc"おなじじゃん!同じオブジェクト割り当てちゃお! ってやるわけよ。 普通のプログラムだと、あらかじめ同じ物が入っているのがわかっているのを 比較するっていうのは意味ないよな。
了解しました。
Javaって何だ。 Javaのプログラム人の話してる言葉からは、エクリプスとかトムキャットとか サーブレットとかアプレットとかストラッツとか聞いたことの無い言葉がたく さん出てくる。 それらのテクノロジーって1冊の本で完結するわけではないんだろ。 それら全部を学ぶためには、どういう学習の進め方をすればいいんだ。 複数巻で構成して第1巻から順番に学習をすれば、全部を学習できるシリーズ本 はないんか。
文字とグラフィックを描画したいのですが g.fillRect( 16, 16, 16, 16); g.drawString("A", 16, 16); 文字Y座標が上に8dotずれて表示されてしまいます。 こういうものなのでしょうか?
>>530 文字には「ベースライン」というものがあってな。
java.awt.FontMetricsも見とくべし。
情報ありがとうございます。 javaのレイアウトやっかいですね。
文字のレイアウトに関する組版の知識だから、Javaあまり関係ない。
.Net だと3.0にならないと文字レイアウトはサポートしてないんだっけか?
ローマ字練習帳って、4本線が引いてあって、ベースラインだけ色が 変えてあったな、と思い出した。
筆記体がもう教えられていないスレ に書こうとしてたなw
初歩の質問すみません PATHの通し方の質問なのですが、テンプレのサイトを読んだ所、 javac.exeがあるフォルダを環境変数にするところまではわかったのですが、 ここでいうjavac.exeとはjavacpl.exeのことでよろしいのでしょうか?
>>539 有難う御座います!ダウンロードしてみます
助かりました
>>506 レスありがとうございます。
駄目でした。
逆に文字化けがひどくなりました…
でも、多分エンコード関係ですよね…
>>541 表示する時に二回と、取り込む時に一回、エンコードに関しての問題は起こる。
Net Beansを使ってるのですが、同じソースの部分で Net Beansのコンパイルの実行では例外処理が出て正常実行さないのですが CPad使用でやると正常実行される、ということがおこってしまいました。 このようなことがあるのでしょうか? この現象の原因に対する対処法はありますか? ちなみに今回挙動がおかしいのは正規表現関連の部分です。
どんな例外が出たのよ。 名前だけでも見れば結構原因がわかるもんだし、 スタックトレースを見ればどこで例外が出たかもわかるんだが。
ある呼び先に書いてあるこの部分なんですが Pattern pattern = Pattern.compile("[qwerty]"); Matcher matcher = pattern.matcher("abcdef"); StringBuilder buffer = new StringBuilder ("start:?"); boolean bb= matcher.find(); if (bb) { System.out.println(1); } 実際は if (bb) { System.out.println(1); } の部分をこう書いてますが、どちらもBeansの方ではだめです while (matcher.find()) { buffer.setLength(7); buffer.append(matcher.start()); buffer.append("??end:?"); buffer.append(matcher.end()); System.out.println(buffer); } デバッグで見てみるとかなりおかしな飛び方をしています。
545修正 >実際は >boolean bb= matcher.find(); <これも勿論消してます >if (bb) { デバッグでは書いてある文全部スルーされる感じでした。 ステップで空白行に進むこともありました。 Pattern等の定義の部分をグローバルの方に書いてもだめでした。 Pattern pattern = Pattern.compile("[qwerty]"); ここに来ていきなりリターンされ catch { 以降も実行されず飛んでしまう感じです。
コンパイル時にこのエラーが出てました。 972: <identifier> がありません。 Matcher matcher = pattern.("abcdef");
マチャマチャさんを最近見ないな
pattern "." ("abcdef"); だから、当然に <identifier> がありません。だよな。
matcher関連を全部注釈化して無効にしても
>>547 のエラーが消えなかったので
ゼロから新プロジェクト作成して元ソースを貼ってやってみると動きました。
どうやらBeansの不具合だったようです、お騒がせしました。
それで納得するなら、まあいいんじゃないの。
public class クラス名 と class クラス名 これらの違いを教えて頂きたいです。
public class クラス名 → どこのパッケージからでも使えるクラス class クラス名 → 同じパッケージに所属するクラスからしか使えないクラス
555 :
デフォルトの名無しさん :2009/04/29(水) 21:37:11
天才ジャヴァリスナーのおれっちが、 今から30秒の間、質問を受け付けるよ!
556 :
デフォルトの名無しさん :2009/04/29(水) 21:38:36
コマンドプロンプトって面白いのな
558 :
デフォルトの名無しさん :2009/04/29(水) 22:48:09
javaで x+4=6 を x=6-4に置き換えないで 2を計算させて表示させることはできますか?
JavaのVMってSun以外にたくさん出ていますが、どういう基準で選べばよいのですか? たとえばDBならクリティカルなシステムはOracle(RAC)とか、社内のしょぼいシステムなら フリーでいいやとか、色々判断できると思うのですが、JavaVMはどうなのですか?
x + 4 = 6 という式をプログラムに与えて、 その方程式をプログラムに解かせたいって事? 入力された式を解析して x の位置がどこにあるかを認識して そいつを x = expression の形に組み替えて expression を計算すればいい。
529がスルーされた残念
>>562 >>529 > Javaって何だ。
http://www.javatea.net/ 温めると hotjava な。これ豆知識。
> 全部を学習できるシリーズ本
そんなの無いし、あったとしても出版された時には時代遅れなんだろうなぁ。
まあ、とりあえずエクリプスじゃないかな?
「全て」のプラグインとその機能を使いこなせるようになればなんでもできるw
564 :
デフォルトの名無しさん :2009/04/30(木) 00:25:03
「Java Pet Store Hack」みたいな本出せば売れるのかな
import java.util.Scanner; class Sample1 { public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.println("xとyを加減乗除します。"); System.out.print("xの値:"); int x = stdIn.nextInt(); System.out.print("yの値;"); int y = stdIn.nextInt(); System.out.println("x + y ="+(x+y)); System.out.println("x - y ="+(x-y)); System.out.println("x * y ="+(x*y)); System.out.println("x / y ="+(x/y)); System.out.println("x % y ="+(x%y)); } } 何が間違ってるの?
>>567 15: if(y==0){System.out.println("0 divide!"); return;}
>>568 なんかシンボルを解釈処理できませんって出る。
Scanner がなんかだめらしい
問題解決しました。 開発キットの選びに問題があったようです。 てかさ 俺の通ってるプログラム学校 なぜかJAVA開発キット1.4.0で勉強してるんだけどこれってどうなの? もう1.6くらいまで出てるよね?
571 :
デフォルトの名無しさん :2009/04/30(木) 12:59:01
おまえの通ってる貧乏学校など興味なし
相当、恥ずかしいことを言っているという自覚はありますか
そのレベルなら、分からんことがあったら、積極的に先生に聞くべし。 そんなシステム上のエラー出されても、1生徒で対処できる範囲じゃぁない
なんかとんでもない詐欺学校に入学してしまった気がする。。。
貧乏人は派遣街道まっしぐらだしね
基本は変わってないから大ジョブだべー イーナムとか変なの増えてるが、それをついでに独学しとけばよかろ 1.6で勉強しても現場では1.4かもしれんし、1.5かもしれんのだから
>>576 でも俺は基本情報技術者試験を受けるためにその学校行ってJAVAを習ってるわけだが、、、
基本情報技術者試験では1.5を対象にしてるのだよ。
やっぱり問題が生じるわけなのだ。。。
基本はもうなくなったぜ! 別の試験になった筈だがまだ言語の区分あんのか
基本情報技術者とかもっててもなんかいいことあるのか?
TOEIC900点持ってるといったほうがよっぽどいいことありそうなんだけど、何で情報技術者試験なの? 情報技術者各種を持ってて何かいいことあったらのなら教えてよ。
会社の人から「そんな程度の試験も受からないんだねwププッwww」と思われないため
>>577 基本商法取るために学校まで通ってJavaやる必要あんのか?
どうしても欲しいなら表計算選べばおk
Javaもそこまで難しくないから本買って自分でちょいちょいやれば受かる
基本?なんて対策本読めばサクっと合格するべ 目標にするなら応用 応用もいけたらすきなの
585 :
デフォルトの名無しさん :2009/04/30(木) 15:39:45
そんな役に立たない資格よりも漢字検定がお勧めですよ。
仕事は出来るのに資格無い為に開発メンバに入れないという何とも哀れな 事例を何度も見たことがある。自分より力ない奴がどうして残れるんだ? と騒いでも、だったら資格取れよという現実があるな。 勝手な解釈で国家試験を蔑ろにすると、またそういう雰囲気に飲まれて、 これでいいんだと納得するようであるなら、後々泣くことになるかもな。
どんだけ立派な職場だよw 大企業だと資格がないから昇進できないとかもあるけどな。
588 :
デフォルトの名無しさん :2009/05/01(金) 01:24:29
String s = "0123"; StringBuffer sb = new StringBuffer(s); char c = 'a'; test1(s, sb, c); //ココ1 public void test1(String ps, StringBuffer psb, char pc) { ps = "5678"; psb.append("4567"); pc = 'b';} ココ1でtest1を実行した後に、s、sb、cの内容を表示させると、 sbだけが01234567に変化して、sとcは変更されてないですけど、 どういう場合に変更されて、どういう場合に変更されないのでしょうか。
プリミティブ型(byte, char, intなど)は代入しても、呼び出し元は 変わらない。 参照型も、代入ではp???が見るモノが切り変わるだけなので、 呼び出し元は変わらない。 ただし、StringBuilder#appendや、String#replaceなどで、 p???が見ているモノの内部状態を変えることはできる。 呼び出し側ではp???と同じモノを見ているので、その内部状態も 変わっている。
ごめん、String#replaceがあるのはRubyだわ。 JavaのStringには内部状態を変更するメソッドはない、はず。
>>582 発注側が箸にも棒にもかからないド素人を足切りするために使うケースもあるようだ。
ぶっちゃけ面接した方が確実だとは思うが、評価できる人間が発注側にもほとんどいないし、
そもそも請負契約だと発注側は面接できない。(やると偽装請負の要件に引っかかる)
資格なら、発注要件に「××の資格を持つこと」って書けばいいからねー。
592 :
デフォルトの名無しさん :2009/05/01(金) 02:03:50
>589 どうもありがとうございました
なんかこのスレに下での横好きがいるな
>>580 あたりから
下で(なぜか変換出来ない) って奴だろうと思う。
596 :
デフォルトの名無しさん :2009/05/01(金) 12:21:44
同期させたいです。 midiでsequencerMasterとsequencerSlave をMidiSystem.getSequencer()で用意して、 sequencerMasterのTransmitterと sequencerSlaveのReceiverをつなぎました。 どちらのsequencerもgetMasterSyncMode()がInternal Clock、 getSlaveSyncMode()がNo Timingで、 SyncModes()の結果から MIDI_TIME_CODEやMIDI_SYNCを設定できません。 それらを使うにはどうしたら良いでしょうか。
597 :
デフォルトの名無しさん :2009/05/01(金) 16:14:17
画面の表示について質問をさせてください。 上や右にメニューバーやスクロールバーをつけて、 残りの中央部はBufferStrategyを使用した描画をしたいのですが、 bufferStrategy.showを行うとメニューバーが消え、repaintを行うと 画面側消えてしまいます。 これを両方表示させてる事はできるのですか?
intやlongなどのプリミティブ型って、型判定できますか? IntegerやLongだったら、instanceofで判定できるのは解りましたが、 intやlongは、どうやったら判定できるんでしょう?
>>598 long の変数に int のインスタンスを代入、みたいな事はできないから判定はできないし、する意味もない。
long の変数に int の値は代入できるけどその際 int の値は単項数値昇格によって long に変換される。
>>595 あー、「へたのよこずき」か。
マジで判らなかった。
601 :
デフォルトの名無しさん :2009/05/01(金) 20:43:05
Java Web Startで拡張子をアプリケーションに関連付けたのですが
それはできたんだけど、どうしてもアイコンが変わりません
次のコードのどこに問題があるか?わかる方いましたら教えてください
<information>
<title>TestApp</title>
<vendor>testVendor</vendor>
<homepage href="
http://hogehoge/ "/>
<description>テストアプリケーションです。</description>
<icon href="icon32.png"/>
<association extensions="testapp" mime-type="application/testapp">
<description>testappファイル</description>
<icon kind="shortcut" href="icon32.png" width="32" height="32"/>
<icon kind="shortcut" href="icon16.png" width="16" height="16"/>
</association>
</information>
ちなみに、アプリケーションそのもののアイコンはキチンと設定されていますので
pngファイルは正常です。
icon 要素 : GIF または JPEG 形式のイメージファイルへの HTTP URL が含まれます。 pngじゃ駄目だということでは?
603 :
デフォルトの名無しさん :2009/05/01(金) 23:08:24
素人すぎる話題で恐縮ですがお願いします。 以下の書式の文字列からDateオブジェクトを生成したいのですがうまく行きません。 Fri May 01 22:18:17 JST 2009 ※DateオブジェクトをtoString()した書式 書いてみたのは以下の2つです(どっちもエラーです) DateFormat df = DateFormat.getDateTimeInstance(); Date dt = df.parse("Fri May 01 22:18:17 JST 2009"); //=>ParseException 対応してない書式かと思い、書式指定してみた DateFormat df = new SimpleDateFormat("EEE MMM dd HH:mm:ss z yyyy"); Date dt = df.parse("Fri May 01 22:18:17 JST 2009"); //=>ParseException パターンを変えながら調べていくと、EEEとMMMがそれぞれFri/Mayにマッチしない様子です。 Javadocには同種の書式でFriやMayにマッチさせる例も載っているのですが、これ以上なんとも・・・ parseするための指定をおしえてください。※MMが05にマッチするのは確認しました(=月)
>>603 DateFormatのインスタンス作成のときに Locale.ENGLISH
605 :
603 :2009/05/01(金) 23:35:50
>>604 ありがとうございます!確認できました。
ロケールの指定が必要とはまったく気がつかなかったです・・
デフォルトのlocaleはuser.languageプロパティ依存だな。
>>601 16x16 の方は特定環境に依存しないように GIF か JPEG にした方が良いみたいなガイドが
あった希ガス (うろ覚え)。昔した試行錯誤で JNLP ファイルのアイコン指定は 16x16 に
GIF (kind 無指定), 32x32 に PNG (kind="default"), 64x64 に GIF (kind="splash") がよさげ。
608 :
デフォルトの名無しさん :2009/05/02(土) 00:00:28
>>599 レスありがとうございます。
たとえば、メソッドで
public methodA(Object obj, int value){}
public methodA(Object obj, long value){}
なんてのがあった場合は、
同じメソッド名で同じ引数の数で、違いは引数にint, long
なんて構造はそもそも取るべきでは無いってことでしょうか。。。
すみません、sageます
>>608 それはメソッドが呼ばれた時点で long か int が自明だから instanceof なんて使う必要はない。
それらのメソッドから呼ぶ共通のメソッドということなら Long と Integer でも使え。
Java2 SDK ,Standard Edition Version 1.3が公式サイトでは配布が終わってしまったようなのですがどうにかしてどこかで手に入らないでしょうか? また、代わりになるソフトというのはどういうものなのでしょうか? WindowsでS!アプリを作りたいのですが・・・
613 :
601 :2009/05/02(土) 04:16:03
>>602 >>607 アドバイスありがとうございました。
なんとPCを再起動したらちゃんとアイコンが表示されていました・・
601のコードで問題ないみたいです。お騒がせしました。
しかしなんなんだこのトラップは・・??
614 :
デフォルトの名無しさん :2009/05/02(土) 04:25:16
サポートはないけど古いのもダウンロードできなかったか? 1.1とか1.2とか。 古いシステムのまま運用してるところもあるだろうし、逆にダウンロードできないと問題だし 無料の約束で配布してたのに10年でサポート打ち切りとかでいきなり有料とかも詐欺っぽくて問題だけどね。
さすがに1.0はないか
API リファレンスだけなら手元にある。
PHPでまともにClass扱えないのにJavaで理解できますかね^^;
Java はまともにクラス扱えないとどうしようもないから OO 矯正には丁度良い。
JNI で stderr に出力しているエラーメッセージを Java 側で拾って Swing のログコンソールにでも 出したいんだけど、何か良い方法ないかな?
System.err.print で出力してるようなところは、Swingに書き出す PrintStreamを作ってSystem.setErrを呼べばいいけど、ファイル ディスクリプタ2への出力を捕まえるのはまた違う話になるのかな。
622 :
デフォルトの名無しさん :2009/05/02(土) 13:11:01
for ( pos = 0; pos < source.length(); pos++ ) { //ココ4 System.out.println("4"); if (switchTag) { System.out.println("3"); if ( source.charAt(pos) != '>' ) { System.out.println("2"); for ( pos++; pos < source.length(); pos++ ) { //ココ3 System.out.println("1"); if ( source.charAt(pos) == '>' ) { //ココ2 System.out.println("break"); break; //ココ1 } System.out.println("6"); } System.out.println("7"); } System.out.println("8"); } ココ1のbreakでどこまで制御が戻るのかがよくわかりません 書籍では一番内側の制御文まで戻るとか書いてあるのですけど、 if文も制御文としたら、ココ2に戻ることになるのですけど、 実際の動作では、break 7 8 4 が表示されるので、 breaココ1が起きるとココ2には制御が来ずにココ3のforも抜けて、 ココ4に制御が戻っているみたいです。 直近のforのさらに上のforまで戻るのでしょうか。
>>622 breakは任意の制御文を抜けるんじゃなくて、最も内側のswitch/while/do/for文を抜ける。
ココ1では、ココ3のforを抜けることになるので、breakの次に7と出るのは正常。
引数2つを与えて第1引数の中を第2引数で検索してHITした箇所を 表示するプログラムがあったとして indexOf() を使いたいんだけど 第2引数に「"」を与えると無限ループに陥ってしまいます。 原因分かる方いますか? Stringクラス内で"の扱いがどうなってるのかいまいち分からない・・・。 for(int i = 0, pos=0; (pos = indexOf(args[0], args[1])) != -1; i++, pos++ ) System.out.println((pos+1) + "文字目、"); これで「java test.class abcde "」 や 「java test.class abcde ""」を実行すると結果が 「1文字目、2文字目、3文字目、4文字目、5文字目、6文字目、6文字目、6文字目、6文字目、・・・」 という風になってしまう。
indexOf の詳細がわからんとなんとも
627 :
デフォルトの名無しさん :2009/05/02(土) 14:21:05
言語仕様? 確か日本語訳なかったか?
>>625 みたところ、そのindexOfはString#indexOfではなくて自分で
実装したもののように見えるが。
>>619 甘いw
staticだけで全てを片付けているコードも見たことある。バッチ処理とか。
>>620 子プロセスとして自分を動かして、標準エラー出力を横取りすれば確実じゃないかな。
面倒だから621の言うようにsetErr()試してから。
>>630 その可能性は無いんじゃないか?
索引見ても、そのシグネチャを持つメソッドって無いみたいだし。(見落としていなければ)
632 :
625 :2009/05/02(土) 16:25:40
あ、、ごめんなさい。 書き写す時に間違えました。 自分で実装したものじゃなくString#indexOfです。 for(int i = 0, pos=0; (pos = args[0].indexOf(args[1], pos)) != -1; i++, pos++ ) System.out.println((pos+1) + "文字目、"); でした。 検索する文字が「"」でも「""」でも無限ループになってしまいます。。
>>630 import staticでインポートできるのはstaticなメンバーだけ。
String#indexOfはあってもString.indexOfはない。
実装によっては、実はString.indexOfはある。 少なくとも、Arthur van Hoffの書いたjava.lang.Stringにはある。 java.langパッケージ内でしか見えないけど。 まぁ、今回はそれとは関係なくて、 "abcde".indexOf("") == 0 だから「常に見付けられるから返ってこれない」ということだな。 >indexOf >この文字列内で、指定された部分文字列が最初に出現する位置の >インデックスを返します。返される整数は、 >this.startsWith(str, k) >上の式が true となるような最小の k です。 >startsWith >(略)引数が空の文字列の場合(略) true が返される
635 :
ちんこ ◆GbXlaaQNk. :2009/05/02(土) 17:36:02
Pythonなら >>> "python".index("o") 4 こうなります^^ Pythonの方がずっと良いお^^
636 :
デフォルトの名無しさん :2009/05/02(土) 17:42:26
int a = 3; int ans = a++ + ++a + --a; ++aで4になって、--aで3になって3+4+3=10 式の後にa++がプラスされるので、ansの値は11ですよね? 問題集では12が正解になっているんですが・・
>>634 なるほど!ありがとうございます。
毎回true(=検索開始位置)が返ってきて
抜けられなくなるってことなんですね。
回避方法がないか模索してましたが仕様ってことで納得しました。
ありがとう!
>>636 Javaでは、演算子のオペランドは演算単位で実行前に完全に評価される。
(&&, ||, ?:は例外) また、+は左結合(2つあったら左を先に評価)。
つまり、a++(1) +(2) ++(3)a +(4) --(5)a と番号を付けると
(1)→(3)→(2)→(5)→(4)の順に実行されるので、
int a = 3;
int x = a++; // (1) xに3を代入後a(3)が1増えて4
int y = ++a; // (3) a(4)を1増やした5をyに代入
int z = x + y; // (2) 3 + 5 で 8
int w = --a; // (5) a(5)を1減じた4をwに代入
int v = z + w; // (4) 8 + 4 で 12
641 :
デフォルトの名無しさん :2009/05/02(土) 18:15:05
なるほど、そう考えるのですか。 教えてくださってありがとうございました。
コマンドライン上で実行させると、あるテキストファイルからデータを読み取って 違うテキストファイルに出力するプログラムを組んでいます。 入力はBufferedReader、出力はPrintWriterを使います。 読み取むクラス、書き込むクラス、実行クラスを分けて作らないとダメらしくて なんとか全部コンパイル通しました。 しかし読み取ったデータをコマンドライン上に表示することは出来たんですが PrintWriter.println()でのファイルへの書き込みが出来ません。 実行させても空のテキストファイルが出来上がるだけになっています。 何か考えられる原因はありますか? 上記だけでは判断できなければすみません・・・。
>>643 さん
PrintWriter.close();で閉じれてると思います。読み込み側も同様。
645 :
ちんこ ◆GbXlaaQNk. :2009/05/02(土) 19:05:30
Python使えばいいのに。 Javaとか、冗長すぎて死ぬw
ここJavaスレだから帰りなさい
647 :
デフォルトの名無しさん :2009/05/02(土) 19:24:32
648 :
ちんこ ◆GbXlaaQNk. :2009/05/02(土) 20:00:47
>>646 そんな冗長な言語を使って、
あなた方はマゾなのですか?
>>649 馬鹿に正論述べても無駄だと思うぞ、経験上。
あるメソッドのtry内でインスタンス化したオブジェクトを 同クラスの他メソッドで参照する方法ってありますか?
>651 オブジェクトの格納先をメンバ変数にする。 勿論、メソッド実行前、例外有り無しなど分岐ごとの値は仕様で決めておくこと。
653 :
ちんこ ◆GbXlaaQNk. :2009/05/02(土) 22:03:25
凝集度が下がるのでやめてください。 意味不明な仕様です。
凝集度の高い言語が好きならJやAPLがおすすめ。
655 :
デフォルトの名無しさん :2009/05/02(土) 22:55:04
PythonよりGroovy
656 :
デフォルトの名無しさん :2009/05/02(土) 23:55:23
インスタンス変数をコンストラクタでいじりたいのですが、無理ですか? staticにしたらインスタンスでなくなるし、じゃコンストラクタって何のためにあるんだよ・・・
>>565 なんか間違ってないか?
class Clazz{
private int instanceVar;
public Clazz(){
instanceVar=10;
}
}
コンストラクタでいじれてるだろ
658 :
デフォルトの名無しさん :2009/05/03(日) 00:59:04
>>657 安価ミス?
それだと、staticじゃないからメンバ使えないんじゃない?
俺がしたいのはオブジェクト配列を作ってそれぞれのオブジェクトに別々の値をコンストラクターを使って代入すること
それがstaticにしたら、最後に使ったコンストラクターで決めた値に全部なっちゃうし、staticにしなかったら、コンストラクターでそもそもいじれないという・・・
>>658 良くわかんないけど、引数付きのコンストラクタ定義してそれ使っちゃダメなの?
パイソンはタプルがあるからルビーとはまた別の意味で強力だと思うよ。
ルビーはイテレーターとmixinが発達してるから、Cの素直な拡張として構造化プログラムを書きやすいけどね。
パイソンは複素数型でjを使うのとタブインデントで極端に美的を求めるのは宗教と同じだし下らないから使うことはない。
そんな下らないことよりも効率と生産性の方が優先するし、パスカルよりもCや言語仕様がころころ変わるMS-VBが普及した事実より明らかじゃないか。
ところで、
>>650 はどういうこと?
スレチってこと
>>658 引数でオブジェクト配列を渡してやるか
ファクトリメソッド・パターン使うとか
663 :
デフォルトの名無しさん :2009/05/03(日) 10:08:04
Javaを使ったアプリケーションで、設定等を行うサブウィンドウを 作ろうと思っていますが、うまくいきません。 具体的にやりたい事は 1.サブウィンドウはタスクトレイに表示されない。 2.サブウィンドウ表示中はメインウィンドウ(親ウィンドウ)は移動、最小化、フォーカス等の 全ての機能を無効とする。 3.メインウィンドウをクリックすると、サブウィンドウも前面に出てサブウィンドウにフォーカスがあたる。 です。VBで作ったサブウィンドウの動作を真似ようとしているのですが、Javaでは可能でしょうか?
2と3は可能だと思うけど、1はどうだろう。
JSE 6 からタスクトレイもサポートしている。
タスクトレイってタスクバーの事か。 単なるダイアログじゃん。
ClassLoader#getResource() で指定するリソースのパス名って "/" で始まらなきゃいけない場合と 始めちゃいけない場合の 2 ケースない?
>>664-666 ダイアログで解決しました。
JDialogの引数は気づきませんでした。
ありがとうございます。
>>621 まさにその FD2 の話で、JNI の C 側からリンクしているのライブラリがエラーの拍子に出す
情報を Java で取り込みたいんですよね。GUI 起動だとコンソールが出ないから。
と思ったけどこれ C の話ですね。そっちで質問します。
すみません。教えてください。 ListIteratorでLinkedListの走査中に、 LinkedList本体に対してremoveすると ConcurrentModificationException例外が発生しますが、 本体へのaddでも同様に例外が発生するものなのでしょうか? "Linked"Listなので走査中に追加があっても 処理継続できそうなものなのですが。。。
671 :
デフォルトの名無しさん :2009/05/03(日) 14:02:40
次をコンパイル実行した結果7と出力された。【ココ】の部分に入る演算子はどれか。 int[] a = {1,5,7,2,4,7}; int x = a[0]; for (int i = 1; i < a.length; i++){ if (x 【ココ】 a[i]) { x = a[i]; } } System.out.println(x); (選択肢) A: == B: != C: < D: <= 正解はCとDですけど、Bの!=も正解ではないのですか? 1 != 1 false, 1 != 5 trueでxに5を代入…4 != 7 trueで最終的にxに7が代入されるような気がしますが。
672 :
デフォルトの名無しさん :2009/05/03(日) 14:47:45
この問題、楽したいならソースコピペしてコンパイルして 【ココ】変えて実行してみれば速攻で終わる問題だねw
673 :
デフォルトの名無しさん :2009/05/03(日) 15:08:30
どうせOBが作った解答なんだろうからそんなもん信じるな
674 :
デフォルトの名無しさん :2009/05/03(日) 15:14:23
コンパイラが作ったバイトコードをインタプリタが実行して 出た結果が全てだ
今日朝から悩んでて解決しなかったため教えてください。 jdbcで、一意制約違反の例外処理をつくっているのですが、 現在SQLExceptionで拾い、課題で指定されている例外クラスにthrowしています。 これで一意制約違反はうまく処理できているのですが、 SQLExceptionで一意制約違反だけでなく、SQLの構文自体にミスがある場合なども拾ってしまうため 一意制約違反でない場合も一意制約違反用の自作例外にthrowしてしまいます。 これを、一意制約違反の場合のみthrowするようにしたいのですが、 どうすればできるのでしょうか?
プログラムミスと実行時例外を、同列にすんなよ・・・
import java.io.*; class Sample2 { public static void main(String args[])throws IOException { System.out.println("テストの点数を入力してください。(0で終了)"); BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); int num=0; int sum=0; do{ String str = br.readLine(); int num = Integer.parseInt(str); int sum+=num; }while(num == 0); System.out.println("テストの合計点は"+ sum +"点です。"); } } numとsumはmain(java.long.String[])で定義されています とか出てコンパイル通らない。。。 どうすりゃいいの?
678 :
デフォルトの名無しさん :2009/05/03(日) 16:41:12
>>677 doブロックの中でまた定義してるからだ
二重定義はだめよ☆
679 :
デフォルトの名無しさん :2009/05/03(日) 16:46:18
これでコンパイルしてみ? import java.io.*; class Sample2 { public static void main(String args[])throws IOException { System.out.println("テストの点数を入力してください。(0で終了)"); BufferedReader br = new BufferedReader (new InputStreamReader(System.in)); int num=0; int sum=0; do{ String str = br.readLine(); num = Integer.parseInt(str); sum+=num; }while(num == 0); System.out.println("テストの合計点は"+ sum +"点です。"); } }
>>675 SQLException から SQLState だかエラーコードだかを取得してすり替えれば良いのか
そのまま throw すれば良いかを決める。どのコードを一意制約違反にすれば良いかは
RDBMS のリファレンスを嫁。
doの中のnum, sumはintが付いているので、代入ではなく、 再度「宣言」していることになる。 メソッド(やコンストラクタなど)の中で同名のローカル変数を再宣言する ことはできない。 java.sun.com/docs/books/jls/third_edition/html/statements.html#14.4.2 なお、仮に再宣言が出来たとすると、外側のnumやsumとは同名だが 別の変数になってしまうので、意図した計算結果にはならない。
682 :
ちんこ ◆GbXlaaQNk. :2009/05/03(日) 19:28:24
タプルは確かに強力。 また、動的言語はPythonでもRubyでも、 とにかくデータ構造の表現力が豊か。 コードが視覚化されたような印象を受けることがある。 つまり、文字としてではなく、図としてみれるということだ。 あと、おれはPythonのin演算子を気に入っている。 item in sequence な。 これは非常に美しい。
誤爆?
狙ってやってるからNG指定おぬぬめ
>>682 Pythonが大好きなんだよね?
Java板にくると疲れるだろうから、無理して来なくてもいいよ☆
686 :
ちんこ ◆GbXlaaQNk. :2009/05/03(日) 20:04:53
研究ではJavaを使ってるんです。 Javaの方がIDEとか揃ってるしね。 Pythonは小さなプログラム書く時はきれいに書けるけど、 リファクタリングとかが難しくなる。
俺は捨てアプリはRhinoでYコンビネータで書くからあとから見ると分け分からん
688 :
ちんこ ◆GbXlaaQNk. :2009/05/03(日) 20:27:07
Java使いからみて、 JythonとかのJava実装スクリプト言語は、どう思う?
689 :
デフォルトの名無しさん :2009/05/03(日) 20:31:03
Javaの文化ならscalaとかgroovyがあるからjrubyやjpythonは後発だな。 inはfor (String item : sequence.split("/"));と書けるからjavaでも同じようなのはある。 他にはjavax.scriptがあるから実際はjvm上に各動的スクリプトがあって、javaもrubyもjvm上の1言語でしかない。 javaももともとはインタプリタだったし、この勢いでオラクルjvm上でC++とかC#とかも走ればいいかなと思うけど。 スクリプトはクッキング目的ならjsが一番単純でいいと思うけどね。 >つまり、文字としてではなく、図としてみれるということだ。 いまいち分からないんだけど、どういうこと?
Javaはインタプリタ言語ではなくなったのか? JITコンパイラとかはあるが、基本はバイトコードでの配布ではないのか?
みんな分かってるようなことであげ足取りしないの
そんなつもりはなかった。ごめんよ。。。 >Javaはもともとインタプリタだったし っていうのは、実行時に機械語へコンパイルするものが出てきた って言う意味なんだね?
693 :
デフォルトの名無しさん :2009/05/03(日) 20:51:21
そういえば難航したinvokedynamicの実装が完了したとかあったけど、やっぱりjvmプラット上での動的型言語サポートは大変だったのかなって思うよ。 ただ、実装完了したからこれからはjvmプラットで動くスクリプトが増えてくるくるくるくるくるんじゃないか? クロージャがあればjavaだけで十分だったんだけどね。
Java で Compiler Collection 作るような無駄なことすんな。 大体スクリプトの必要性なんてユーザドメインで手軽に処理を追加する用途が大半だろ。 それなのにスクリプト実行をサンドボックス化できない時点で単なる JCP のお遊び。
695 :
デフォルトの名無しさん :2009/05/03(日) 22:36:32
yahoogameとかでやろうとすると、 『コンパイルエラー』とでて、『正規表現の中に')'を指定してください。」 ってのが何回も出てくる。 どうやったら直る?
696 :
デフォルトの名無しさん :2009/05/03(日) 23:02:06
char value[] = new char[2]; value[0] = ‘金’; value[1] = ‘魚’; System.out.println(value.length); //ココ1 ココ1で、value.lengthのlengthというものは、 いったいどこから出てきたのでしょうか。 メッソドではないのですよね?
>695 日本語で。 >696 言語仕様です。配列の要素数を示すインスタンス変数のようなものです。 参考書の配列について再勉強です。
char[]とstringは相互に変換可能なものであるのでござる。 よって、そのlengthはchar[]をキャストしたstringクラスのメソッドなのでござるよ
自己訂正。 lengthはstringクラスのメソッドではなくarray(配列)クラスのメソッドでござったな。 つまり、配列には配列でそういう操作が出来るメソッドが備わってるのでござるよ。
>699-700 そうそう、間違えてコンパイルエラーになりやすいから気をつけて。 Stringに定義されてるのはインスタンスメソッドのlength。 配列のはインスタンス変数のlength。
プリミティブ型が存在することと、 配列がコレクションとは別で一級市民扱いなのは OO的に美しくないところだな。 # 美しくないと駄目というわけではないが。
メソッドではなく、メンバ参照してるだけのようなきがするでござる メソッドならlength()となるはずでござるが?
704 :
703 :2009/05/04(月) 00:06:51
>>702 そういう言語もあるんだけど、このぐらいが落としどころかとも思う。
オーバーヘッドも気にかかるし。
primitive型の存在がJava最大の功績だと思うのだが。
708 :
デフォルトの名無しさん :2009/05/04(月) 04:45:41
htmlからservletを呼びたいのですが上手くいきません。 The requested resource (/servlet/inout) is not available.というエラーになります。 次レスにソース貼りますのでよろしくお願いします。
709 :
708 :2009/05/04(月) 04:47:20
html <!DOCTYPE HTML PUBLIC"-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>ユーザーからの入力を受け付ける</title> </head> <body> <h1 align="center">ユーザーからの入力を受け付けるプログラムです</h1> <form action ="inout" method ="GET"> <p align="center">データを入力してください。 <input type="text" align="center"name="mozi" size="20" ><br> <input type="submit" align="center" value = "送信" > </form> </body> </html>
710 :
708 :2009/05/04(月) 04:51:06
//servlet package kenservlet; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class InOut extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=Shift_JIS"); PrintWriter out=response.getWriter(); String str="入力してください"; String mozi=request.getParameter("mozi"); if(mozi != null && mozi != ""){ str="doGetメソッドが動きました。"+mozi+"を入力しましたね"; } out.println("<html>"); out.println("<head>"); out.println("<title>Servlete Inout</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>"+str+"</h1>"); out.println("/body"); out.println("</html>"); } }
711 :
708 :2009/05/04(月) 04:52:07
>>694 サーブレットとか運用で考えるとそうかもしれないけど、別にサーブレットはjavaの言語のライブラリの一部の機能の一部に過ぎないよ?
別にジャバとビジネスロジックが仲がいいことは否定しないけど、なんか過信してない?
サンドボックス内でバイトコードにコンパイルされた各種ライブラリに頼り例外でキャッチすることと、スクリプトを使うことはまったく同値だよ?w
多分何のことをいってるのか分からないんだろうけどね。
713 :
708 :2009/05/04(月) 06:45:13
>>708 〜711
解決できました。
お目汚しのほど、ご容赦くださいませ。
>>707 個人的には同意できない。
原則として全部オブジェクト扱いにして、コンパイラが型推論や
フロー解析等をしてプリミティブな型に変換して欲しいところ。
まぁ、言語仕様が成立した時代を考えると無理な要求なんだろうけど。
∧_∧ ( ´∀`)< ぬるぽ
716 :
デフォルトの名無しさん :2009/05/04(月) 12:02:05
なるぽいんたーえくせすぷぷしょん
>>714 おまえは全部 auto boxing でやってろ。
718 :
デフォルトの名無しさん :2009/05/04(月) 13:04:03
2chってなんでけんか腰になるんだろうね
(おれは
>>714 じゃないからね)
719 :
デフォルトの名無しさん :2009/05/04(月) 13:21:14
Javaで2chトリップを生成できるライブラリってないかな。 なければ、誰か作ってくれないかなー。 おっぱいうpするんで。
720 :
デフォルトの名無しさん :2009/05/04(月) 13:22:19
722 :
デフォルトの名無しさん :2009/05/04(月) 13:30:26
724 :
デフォルトの名無しさん :2009/05/04(月) 14:17:46
URL url = new URL(args[0]); Object content = url.getContent(); if ( content instanceof InputStream ) { //ココ System.out.println(3); contentはObjectクラス型のオブジェクトなんでしょうけど、 ココで、contentはInputStreamクラスのインスタンスですかと聞いて、 はいそうですに、なるのですけど、調べたら、全てのクラスはスーパークラスに Objectを持つらしいので、InputStreamクラスもObjectを暗黙に継承してる としたら、はいそうですと言うのも納得します。でも、ココで、 InputStreamを他のクラス何にでも変えても、はいそうですになると 思うのですけど、Stringや他のクラスに変えてみると、はいそうですに ならないのですけど、どうしてでしょうか。
>724 A instanceof B AがクラスBのインスタンスを含むか否かをboolean型で返す。 Aがnullの場合はfalse
727 :
デフォルトの名無しさん :2009/05/04(月) 14:42:27
>>725 どうしてInputStreamのインスタンスは含むのに、Stringや手作りクラスの
インスタンスは含まないのでしょうか。
>727 contentの変数型はObjectだが、その実体は不明。 URLのAPIdocにはURLConnectionを読め、とある。 そこには、何が返されるかは実行時で無いと分からないから incetanceof で調べてから使ってね、とある。 今回の場合はInputStreamでキャストできる何かが実体だったのでしょう。 もちろん、InputSteramのAPIdocを見て判るとおり、Stringなどは含まないし、 StringのAPIdocをみてもInputStreamは含んでいない。 よってfalseが返ることに問題はない。
729 :
デフォルトの名無しさん :2009/05/04(月) 14:59:40
>>724 instanceof演算子は、そのクラスのインスタンスかを返すもの。
スーパークラス、しかもObjectクラスまでみてたら、instanceof演算子は
常にtrueになっちゃって、存在価値なし。
もっと、単純に考えてOK。
instanceof HogeClass
だったら、new HogeClass()で生成したオブジェクト(インスタンス)か
どうかを見てると考えればいい。
ArrayListなどに arraylist.add(new Integer(10)); arraylist.add(new String("aaa"); みたいに整数や文字列は渡せると思うのですが arraylist.addで即興のint配列を渡すことはできないのでしょうか? あと、Integerとintの違いというのがよく分からないのですがどういう違いなのでしょう・・・?
731 :
デフォルトの名無しさん :2009/05/04(月) 15:29:33
>>730 ArrayListクラスは、あくまでオブジェクトを配列のように扱うための
クラスだから、int型変数使えない。
addメソッドは、
add(int index, Object element)→indexの位置にelementを追加
add(Object element)→最後尾にelementを追加
の2つしかない。
いずれにせよ、オブジェクトで渡すしかない。
Integerとintの違いは、クラスか普通のint型変数かの違い。
>>731 ありがとうございます
APIを見つつObjectについて勉強したいと思います
733 :
デフォルトの名無しさん :2009/05/04(月) 15:44:38
>>732 Objectってのは、実質、オブジェクトなら何でもいいって意味だからね。
全てのクラスはObjectクラスのサブクラスになっている、
だから、代表してObject型で書いてるだけです。
それだけは注意。
知ってるかもだけど.
sequenceInputStreamがうまく動かない。 InputStream b1 = new ByteArrayInputStream("first".getBytes()); InputStream b2 = new ByteArrayInputStream("second".getBytes()); InputStream s = new sequenceInputStream(b1,b2); byte[] b = new byte[64]; s.read(b,0,b.length); String str = new String(b); とすると、strには"firstsecond"じゃなくて"first"の後に"\0"が続いて入るんだが、これはバグ?
735 :
デフォルトの名無しさん :2009/05/04(月) 17:01:56
>>734 InputStream s = new sequenceInputStream(b1,b2);
でストリームが別々に読まれて、b1とb2を内部で区別するために
ヌル文字"\0"が入る実装になってんじゃない?
バグではないと思う
736 :
デフォルトの名無しさん :2009/05/04(月) 17:17:10
>>728 >今回の場合はInputStreamでキャストできる何かが実体だったのでしょう。
ということですけど、そもそもcontentは、
URL url = new URL(args[0]);
Object content = url.getContent();
if ( content instanceof InputStream ) {
String line;
getContent();の戻り値がObjectになっています。
今はObjectだけど、実際は他の型かもしれないというのもわかります。
しかし、どうして、いきなりInputStreamのオブジェクトになって
しまっているのでしょうか。プログラムを作成する人は分からなくて、
JAVAのコンパイラが独断でInputStreamですよと決めるのでしょうか。
このプログラムでは正しい引数が与えられるときにはInputStream型であると
自信を持っていると思うのですけど、私はしっくりこないです。
なぜにInputStreamなのでしょうか。
>>734 です。
openjdkのソースみたら原因が判りました。
read(b,0,b.length);はストリームにまたがっては読んでくれなあみたい。
2回に分けて読んだら出来た。
>>734 '¥0' が入っているように見えるのは単に byte 配列の初期値なだけ。
in.read() は呼び出し一発でストリームの最後までやバッファがいっぱいになるまで読むわけではない。
read() の返値には実際に読み込めた長さが返るからちゃんと EOF まで読み込め。
>>735 んなわけねぇだろ。おまいの問題分析能力にカップクするよ。
javadoc の吐く HTML って結構無茶苦茶じゃない? Eclipse のプロジェクトで見ると×マーク付きまくり。 言語仕様ゴチャゴチャやってるくせにこういうの直す気はねぇのな。
>736 どうして、と言われてもですね。 Javaではコンパイル時に型を決められず、実行時に型を決める必要がある場合、 そのライブラリを使用する側は、キャストを用いて型を固定するのです。 その際、incetanceofで先に型チェックをして、キャスト例外が出ないようにするのです。 もちろんライブラリの作成者は、どんな型をチェックすれば良いのか、 を示すべきなのですが、URLConnectionの表記ではちょっと判りにくいですね。 癖のあるメソッドのようです。へたれですいません。
URLConnection#getContent() なんて使わない。というか何で返るか実装依存じゃ使い様がない。 URLConnection は前世紀に HotJava という Java 製ブラウザを作るためにでっち上げられたっぽい機能が 散在している。普通は getContentType() の内容に基づいて自分で InputStream を読み込む。
>>724 みんなの答えを総合すると、次のようになる。
1) URLConnectionなんて汚いAPI使うんじゃねーよ
2) そもそもinstanceofの意味を誤解している。
1)はとりあえずおいといて、
2)について勉強しような。基本だから。
な ん で 上 か ら 目 線 な ん だ 2 c h の 住 人 は 。
746 :
デフォルトの名無しさん :2009/05/04(月) 18:08:01
724です。ご返答ありがとうございます。 javaでちょうど一ヶ月が経ちました。基本の基本を何とか終えました。 あと一ヶ月かけて、復習することにします。
747 :
デフォルトの名無しさん :2009/05/04(月) 18:16:52
文系にはである口調が上から目線に見える。
〜しようなって表現思いっきり上からだよね
JNI のライブラリを JAR に入れて配布できるようだけど、これって Win + Linux + MacOS みたいな 異なるプラットフォームの JNI ライブラリを一つの JAR に入れられますか? それとも JAR は プラットフォームごとに用意しなきゃだめ?
751 :
デフォルトの名無しさん :2009/05/04(月) 19:20:05
発言には責任を持たなければならない
JAVAではflushとsyncという似たようなメソッドがあるんですが、機能的に細かいところはどう違うのでしょうか? Preferencesを実装してるのですがこの2つがよく分かりません。
754 :
デフォルトの名無しさん :2009/05/04(月) 21:07:36
\bで消せない文字が現れるのですが、どんなことが考えられるでしょうか? 入力してないのに勝手に + が表示されす それが出てからは\b\b\b\b\bって何ぼやっても消せません
755 :
754 :2009/05/04(月) 23:27:40
勝手 + がに表示されるんじゃなかった \bがそもそも機能してなかった そこでこんなプログラムつくってみた class Test{ public static void main(String[] args){ System.out.print("1"); System.out.print("\b"); } } 実行結果 1 もう意味わかりません、俺が発狂してるのか、パソコン壊れたかどっちかだ
>>755 Unixなら消えそうだな。
DOS窓だったらそんな制御文字に対応して無さそう。
ほんとのことはシラン。
無責任なコメント。
757 :
755 :2009/05/04(月) 23:55:39
自己解決した バックスペースはちゃんとされていた・・・ ただ消されてなかった・・・ 上書きしないとダメなのね
758 :
755 :2009/05/04(月) 23:56:58
つうか俺こんなくだらないことに2時間もついやしたのかよw 死にてー
どんマイケル
ところで、 Javaって、独占禁止法の不当廉売に当たらないんですか?
あたらない。ただの共通規格だし。 本家Sunのが有名だけど、いわば参考実装みたいなもの。 共通規格に準拠していれば誰でも実装系を開発して良い。 規格違反くり返して準拠を名乗れなくなった会社もあるが。 同じ価格帯で売らないと不当廉売なんて、それどんなカルテルw
お勧めの参考書とかある? 数が多すぎてどれ選べばいいかワカンネ
プログラム書いたこと無い→「やさしいJava」 他言語経験者だけどJava初心者→APIリファレンス+ネットのjava解説サイトで十分 ある程度書ける。知識を整理したい。→オライリーの「詳細Javaプログラミング Vol1」 薦めようと思って浅煎り珈琲のサイト確認したらなくなってた。 かなりお世話になったのに残念すぎる。
カーネルモードで動いているドライバから JNI 経由で Java 機能って呼べる? 呼べるならそれってユーザモードにスイッチするの?
766 :
デフォルトの名無しさん :2009/05/05(火) 13:45:46
class Test325 implements CharSequence { 〜 public CharSequence subSequence(int start, int end) { return "ABC"; //ココ1 } ココ1で、、return 'a;'やreturn 7;とすると型が違いますと言われてエラーになりますけど、 CharSequence型は、"ABC"を受け入れるけど、7や'a' は受け入れないというのは、 どこを見れば、プログラマは分かるのでしょうか。
おまいにはココ1というあだ名を付けてやろう。
>>766 return 可能な型は CharSequence のサブクラスに限られている。
→ CharSequence の API リファレンスを見る
→ String や StringBuilder などが CharSequence のサブクラスである
→ String である "ABC" は return 可能
→ char (Character) や int (Integer) は CharSequence のサブクラスではない
→ char である 'a' や int である 7 は return 不可能
769 :
デフォルトの名無しさん :2009/05/05(火) 13:58:53
>>768 >return 可能な型は CharSequence のサブクラスに限られている。
java言語が登場すると同時に、CharSequenceインターフェイスと、そのサブクラスも存在していて、
サブクラスまで含んで、がっしり固められているのでしょうか。
CharSequenceはインターフェイスだけを見ただけでは"ABC"はOKで'a'はNGということは、
わからないですよね。
>>769 返そうとしている char や int が CharSequence のサブクラスではない事がコンパイラには分かっている。
>>769 キャラクターシーケンス…
さてどういう意味だろうね
×キャラクター ○チャー
773 :
デフォルトの名無しさん :2009/05/05(火) 14:27:48
769です。 返答、いつもありがとうございます。
775 :
デフォルトの名無しさん :2009/05/05(火) 14:35:08
先輩から頂いた『はじめてのJava完全入門』技術評論社2580円で 2002年の参考書があるのですが、いまでもこれで通用するのでしょうか、 それとも新しいのを買ったほうがいいのでしょうか。
>>773 ココ1殿。何かあったらまたココへ来るがよい。
>>775 その年の本だと JDK 1.3 くらいか。StringBuffer じゃなくて StringBuilder 使えとか、
assert や拡張 for なんかの機能が追加されているくらいでコーディング初心者レベルには
あまり変わらないんじゃないかな。
しかしゲネリックスやオートボクシングでハマるか。せめて J2SE 5.0 以降の本にしておき。
ちょっと長めのとこだと5.0に移行してないだろうし 念のためプロジェクトで使用するJavaのバージョンは確認したほうがいいかもね。
>Char 日本国内ではシャーと呼ぶことが 日本民間放送連盟あたりで決められています。
>>779 そういや、赤い彗星の彼、綴りはCharなんだよね。
米国だとキャラかケイアだけど、英国ならチャーでも通じる。
781 :
デフォルトの名無しさん :2009/05/05(火) 15:50:09
Charoはチャロ
782 :
デフォルトの名無しさん :2009/05/05(火) 17:42:29
1回見たらクッキーに記録されて別ページ(2回目以降は見れませんなど)が表示される ようにするスクリプトの書き方を知っている方いませんか?
そんなもん軽く突破できる奴しかここにはいません。
それとこれとは
785 :
デフォルトの名無しさん :2009/05/05(火) 18:43:58
float x;って宣言するのと float x = new float();って宣言するのはどっちが速い? あと float x;って宣言だけならスコープ抜けた段階で開放されてガベコレは動かない?
>>785 下のほうが早い
しかも、両者は微妙に違う。同じではない。
Float にデフォルトコンストラクタはないし、下が float x = new Float(0); なのか Float x = new Float(0); なのかで動作も違う。まぁどちらにせよ速いのは上だが。
788 :
デフォルトの名無しさん :2009/05/05(火) 19:41:51
あの・・・・ flushとsyncの両メソッドは一般的にどういう機能的な差があるんでしょうか。
flush → Preferences に設定した内容を永続領域 (Windows だとレジストリ) に書き込む (書き込みのみ) sync → flush した後、自分以外が変更した設定を永続領域から Preferences に読み込む (書き込み & 再読み込み) 同時に走っている別のアプリケーションが変更した設定内容を可能性があるなら sync、 そうでなければ flush と認識しているが、sync の方はあまり使う機会がないのでよく分からん。 確かに両者の API リファレンスはイミフすぐる。
○同時に走っている別のアプリケーションが設定内容を変更している可能性があるなら
791 :
デフォルトの名無しさん :2009/05/05(火) 20:06:21
ああなるほど。 flushで書き込んで、その次の行でnodeなど読み取りが必要なときはsyncということみたいです。 java.io.FileDescpritorとかにもsyncと同じのがあるのですがAPIの説明ではよく分かりませんでした。
一般的な話なら flush → メモリ上に溜めておいたデータ (バッファリングしていたデータ) を本来の場所に書き込む sync → メモリ上の内容を本来の場所にあるデータと同じにする (同期化) トイレでウンコした後にレバーを下げ流されて行くのを flush と言う。プログラミングの flush もまさにあれと同じイメージ。
するとsyncとはみんなで一斉に水を流すことなのか?
違う。下水と同期され他人のウンコがわき出てくる事だ。
>>792 syncですけど一般的にはそうですよね。
それでPreferencesではなんでflushしてから同期するのかが謎なんですけど。
いやデータの同期っていうのは単なる再読み込みじゃない。こっちの変更もちゃんと向こうに 反映させなきゃけいない。
797 :
デフォルトの名無しさん :2009/05/05(火) 20:47:41
それもそうなんですけど、それならflush(); sync();と2段構えにすればいいわけなんですよね。 syncの状況を見てflushするかどうか決めたいときもあるし、状況を見てウンコはそのまま溜めといてやっぱ水流すの止めたというのもありと思うんですけどね。
そういう仕様だからとしか言いようがない。 同じ項目を別のアプリケーションも変更していた時 (競合状態) の対応が面倒だし、 Preferences 程度のものはあまり凝った設計するより単純明快の方が良い。 アプリケーション間でデータ連係が必要ならデータベース使ってちゃんと設計しろという話。
799 :
デフォルトの名無しさん :2009/05/05(火) 20:58:55
class Point { int x; int y; } class Line { Point p0; Point p1; } public class Test388 { public static void main(String[] args) { Line line = new Line(); Point point = new Point(); line.p0 = new Point(); line.p0.x = 10; line.p0.y = 15; <−−−ココ1 line.p1 = new Point(); line.p1.x = 30; line.p1.y = 35; } } このようになっているときに、line.p0 = new Point(); line.p0.x = 10;を考えると、 Lineクラスのlineオブジェクトが作られて、 lineオブジェクトが持つPointクラス型変数p0に pointオブジェクトが格納されているアドレスが入っているので、 そのアドレスを辿って、pointオブジェクトを参照して、 そうしてpointオブジェクトの変数xに10を代入しているのであって、 lineオブジェクトを介してpointオブジェクトの変数を更新していると 考えて良いのでしょうか。
>>799 そうだよ。Java だとアドレスじゃなくて参照と言うけど。
>>800 データベースなんて何でもええがなw JDK 1.6 から Derby 付いてるでしょ。
少なくとも Preferences を単なるアプリケーション設定じゃなく、ユーザデータの保存とかに
使ってるなら道具を間違えてる。
あと
>>798 の話は先に sync して状況判断して項目変更 & flush すれば済む話だしな。
確かにそうですね。
804 :
デフォルトの名無しさん :2009/05/06(水) 01:57:35
ココイチ行ったことないけどうまいのかな
コクが無いカレーでよいのなら・・・>ココイチ
808 :
デフォルトの名無しさん :2009/05/06(水) 07:13:51
809 :
デフォルトの名無しさん :2009/05/06(水) 07:14:46
ごめんなさい、パス部分、builderと書いてあるのはbuildの間違いです。 よろしくお願いします。
フットプリントってオーバーヘッドと同じ意味で使ったりする?
811 :
デフォルトの名無しさん :2009/05/06(水) 16:05:59
>>810 フットプリント、全体としての使用量
オーバーヘッド、本来の目的に付随して必要になる量
と認識している。
フットプリント:"空間的"使用量(メモリとか) オーバーヘッド:本来の目的に付随して必要になる処理"時間"や処理量(ステップ数) のほうがしっくりしそう。
>>760-761 ソフトの開発にかかった人件費を、ソフトの価格で回収せず、
自社製ハードの価格で回収する事は、明らかなダンピング。
>>814 それは抱き合わせの場合だろ、一円入札事件。
戯言乙w
アプレットで簡単なゲームを作ってみたいのですが おススメの参考書ありますか?
819 :
デフォルトの名無しさん :2009/05/08(金) 00:22:19
JavaSound分かる人いる? Sequencer演奏中のNOTE_ON,NOTE_OFFのイベントを拾いたいんだけど、 int[] controllers = {ShortMessage.NOTE_ON, ShortMessage.NOTE_OFF}; sequencer.addControllerEventListener(new ControllerEventListener() { public void controlChange(ShortMessage event) { System.out.println("event:" + event); } }, controllers); ・・・てな感じでいいんじゃないの?全然とれないんだけど。
she.getOmanko ().insertChinko (I.getChinko ()); 動きません。どうしたらいいですか?
>>820 ChinkoとOmankoに互換性がないからじゃない?
なんのOmankoにChinko入れようとしてるの?
ふつうに 気持ちいいから って答えればいいのだろうか?
sheがNullとか
それだとガッされるな
She に電源が入ってねぇから動かねぇだけだろ。
826 :
デフォルトの名無しさん :2009/05/08(金) 23:56:03
I.getChinko().erect()でどうだ
>>820 get する前に inflate 呼ばないとダメだよ。
>inflate
>public void deflate(Object o)
> throws NoSupportedException
>
>指定された嫁を対象オブジェクトで満たします。オブジェクトがさらに必要かどうかを判断するために needsInput() を呼び出してください。
javaの意味合い的には deflate が正しいのか?微妙。
828 :
デフォルトの名無しさん :2009/05/09(土) 00:08:20
829 :
デフォルトの名無しさん :2009/05/09(土) 00:11:31
すげー 歯茎のところがチンコさんみたいだったw
831 :
デフォルトの名無しさん :2009/05/09(土) 16:37:20
こんにちは。 javaで書かれたプログラムは炊飯ジャーなどでも動くと聞きますけど、 javaVMも炊飯ジャーの中に入っているのでしょうか。 PCでjavaプログラムを作成して、java開発環境のない環境で動かすには どうすればいいのでしょうか。お教え下さい。
家電の類で動かすときはVMじゃなくJavaチップを使うんじゃなかろうか。
ジャバチップなんてあるのか? ジャバカードならよく聞くけど。
arm jazelle
コピペだぞ
836 :
デフォルトの名無しさん :2009/05/09(土) 17:22:28
春からJAVAの勉強を始めて早40日が経ちました。 基本の基本をどうにか理解しまして、サンプルを実行してコンソールに 結果が表示されるとかです。 でも実行しても毎回が新規からでデータを継続して使ったりできないので、 あまり実感がないので、データベースを使えるようになりたいですね。 データベースを使うとデータが残っているので、そのデータを使って、 処理が再開できるので面白くなるような気がします。 エクリプスを使っているのですが、エクリプスしか知りません。コマンドから コンパイルしたこととか一度もないです。 そういうことで、引き続きエクリプスを使いたいのですけど、 データベースは何がいいのでしょうか。MYSQLというのがいいのでしょうか。 それから、サーブレット、JSPとか、WEBアプリケーションとかいう言葉を、 ネットで見かけますけど、どういう順番でやっていくのがいいのでしょうか。 この私が勉強を続けて一歩づつ登っていくには、どういう順序で、 やっていくのがいいのでしょうか。
これは縦読み?
>>831 jarはあくまで、バイトコード群(.classファイルたち)をまとめて圧縮
してるだけだから、やっぱ、VMは実行PCにいれておく必要があると
思う。
BASICみたいに、インタプリタ言語でありながら、機械語へのコンパイル
もできるっていうものじゃなかったきがするJavaは。
>>833 知らないものについて書くときは、
ぐぐってから書いたほうが恥をかかなくて済むと思うよ。
>>831 当初はJavaをネイティブに実行できるJavaチップが前提だったけど、
最近は組み込みでもJavaVMを使うことが増えてきた。
CAPS LOCK がオンになっているかどうかってどうやって調べるんざんしょ?
>>836 データベースは、データベース自体の知識がないと運用できないのでオススメ
できない。
まずは、テキストファイルの読み書きから始めるのが良いと思う。
"java テキストファイル"でぐぐった先のサイトでやり方を学んで、それを応用して
遊んでみてくれ。
テキストから取れるのは文字列なので、それをintとかの数字に直す方法とか、
色々と試練は待っているけども、自分でぐぐって調べていくこと自体が勉強になる。
どうしても分からなくなったら、また来るといい。
キーが押されたあとrunの中にあるKeyAdapter()からの呼び先で さらにキーが押されたイベントを使いたいのですが KeyAdapter()の下では多重にキーイベントは呼ばれないようです。 C#では呼ぶことはできたのですが、どうやれば多重に呼ぶことができますか?
少なくともリスナだったらリピート効いてるし、リスナ使えばいい。 でもアダプタで効かないというのも妙な話だから、コードでミスってて、どっかが 横取りしているんだと思う。 import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class KeyTest extends JFrame implements KeyListener { public void keyPressed(KeyEvent e) { System.out.println("keyPressed : " + e.toString()); } public void keyReleased(KeyEvent e) { System.out.println("keyReleased"); } public void keyTyped(KeyEvent e) { System.out.println("keyTyped : " + e.toString()); } public static void main(String[] args) { KeyTest frm = new KeyTest(); frm.addKeyListener(frm); frm.setDefaultCloseOperation(DISPOSE_ON_CLOSE); frm.setVisible(true); } }
ありがとうございます。 横取りおこってるんですかねえ。 サンプルを元にいろいろやってみます。
同じコンポで同じリスナーって何個も使えるだっけ?
いくつでも使えるだろ。
>>846 そうなの!?
やり方全く思いつかないorz
ふつうにaddすりゃいいだけだが
addKeyListener(new KeyAdapter() { addKeyListener(new KeyAdapter() { addKeyListener(new KeyAdapter() { 略 } ); { 略 } ); } );
間違って誤爆したw
>>845 の意味は、こういうことできんのかよっていう
addKeyListener(new KeyAdapter()
{
略
addKeyListener(new KeyAdapter()
{
略
addKeyListener(new KeyAdapter()
{
略
}
);
}
);
}
);
どうでもいいけどタブがないと俺は何もできないということが証明された
addKeyListener(new KeyAdapter() { 略 addKeyListener(new KeyAdapter() { 略 addKeyListener(new KeyAdapter() { 略 } ); } ); } );
タブと何かのボタン押すと書きこまれるorz プログラム書くの難しいよ
リスナを実装したインスタンスを全部のGUI部品にaddKeyListenerすればいいだけという話。
こんな感じ。 import java.awt.Button; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import javax.swing.JFrame; public class KeyTest extends JFrame implements KeyListener { public void keyPressed(KeyEvent e) { System.out.println("keyPressed : " + e.toString()); } public void keyReleased(KeyEvent e) { System.out.println("keyReleased"); } public void keyTyped(KeyEvent e) { System.out.println("keyTyped : " + e.toString()); } public static void main(String[] args) { KeyTest frm = new KeyTest(); frm.addKeyListener(frm); frm.setBounds(10, 10, 300, 150); Button btn = new Button(); btn.addKeyListener(frm); frm.add(btn); frm.setDefaultCloseOperation(DISPOSE_ON_CLOSE); frm.setVisible(true); } } btn.addKeyListener(frm); をコメントアウトしてみるとキーイベントが取れなくなる。
856 :
デフォルトの名無しさん :2009/05/10(日) 02:17:56
荒らすなチンコ
誰がチンコじゃハゲ
ハゲにハゲハゲ言うハゲがハゲじゃハゲ
仲いいなお前ら
今、内部クラスの部分を勉強してるんだが いまいち便利さが分からない・・・ 実際内部クラスってよく使われるの?
861 :
デフォルトの名無しさん :2009/05/10(日) 15:02:16
>>860 なんか、Javaアプレットとかのソースで使われてるのはみたことある。
アプレットとしては、一つのクラスにおさめて、その中で役割や構造の明確化
の為にインナークラスとして機能ごとにまとめてるとか?
Java使いさん、だれかおせーて。
俺は低脳だからデータクラスのComparatorくらいにしか使ってない
>>860 うん。でも「内部クラス」でひとくくりにしない方が良いと思う。
内部クラスといってもpublic・private・staticの有無・名前付き
だったり無名だったりと、宣言の違いによって使う使用シーンが
異なるから。
864 :
デフォルトの名無しさん :2009/05/10(日) 15:32:28
俺はチンコだkら・・・
コンポーネント関連をawtでなくswingで統一したいと考えています。 javax.swing.レイアウト関連にはSwing BorderLayoutなどのawtのものを使った方がいいのでしょうか?
すいません、途中送信してしまいました。正しくは javax.swing.*;にはレイアウトのクラスがないようですが java.awt.BorderLayoutなどのawtのものを使った方がいいのでしょうか? です。
Swingを使っている以上は、AWTも間接的に使っているので、AWTで 定義されているクラス(イベント類とかフォントとかレイアウトと)を 使ってはいけないわけではない。 ただし、コンポーネント(GUIパーツ)はSwingの Jxxxで揃えること。 混ぜて使うには若干テクニックが要る。
勉強の一環で、DB接続してデータを引っ張って表示するものを作ってます。 ConnectionとResultSetとStatementについて質問なのですが、 finallyでcloseする際に上記3つのインスタンスをcloseしますが、 Connection conn = null; Statement statement = null; ResultSet resultSet = null; try { // do something } catch (SQLException sqlEx) { // do something } finally { if (statement != null) { try { statement.close(); } catch (SQLException sqlEx) { sqlEx.printStackTrace(); } } if (resultSet != null) { try { resultSet.close(); } catch (SQLException sqlEx) { sqlEx.printStackTrace(); } } if (conn != null) { try { conn.close(); } catch (SQLException sqlEx) { sqlEx.printStackTrace(); } } }
>>868 のように書く場合と、
try { // do something
} catch (SQLException sqlEx) { // do something
} finally {
try {
if (statement != null) statement.close();
if (resultSet != null) resultSet.close();
if (conn != null) conn.close();
} catch (SQLException sqlEx) {
sqlEx.printStackTrace();
}
}
このように書く場合とは、どちらが正しいのでしょうか。
そもそもConnectionとResultSetとStatementのclose()で例外が起きるケースというのはあるのでしょうか。
また、
>>868 の場合でstatementやresultSetのclose()に失敗した場合、
いきなりconnをclose()することになると思うのですが、
statementやresultSetを放置したままでconnのclose()を行っても問題無いのでしょうか?
また、StatementはConnectionから作られ、ResultSetはStatementから作られるため、
最上位のConnectionのみのclose()を行えば全てがclose()されて問題無かったりしますか?
ドコモのアプリ用に何とかして Skypeを使う事ってできますか? Skypeを直接無理でも fringの様なかんじで 関節的にSkypeをドコモの携帯(Java)で 使う事はできるのでしょうか?
>>868 Connectionとかの実装によるから、なんとも言えないんじゃないかな。
俺だとトランザクションをロールバックさせてConnectionだけクローズしちゃう。
Statementとかは自動解放してくれると「期待」してnullセット。
ロールバックでエラー?そんなの無視無視w
>>869 古い DB2 実装は Connection だけクローズして ResultSet クローズさせずに居ると
キャッシュが残ってあっという間にヒープ食い尽くしてた。
OverlayLayoutで例えばふたつのJPanel重ねたりしたとき、 どっちもMouseListener追加すると下にあるJPanelからイベントが取れないんですが どうすればいいんでしょうか 上のJPanelにMouseListener追加しないと下からは取れるみたいなんですが。
>>872 ?????????
モバイル版たくさん出てますよ?
スマホは当たり前で
スマートホンじゃない
携帯のモバイル版も最近はあるようです
つまり
FOMAでもモバイルSkypeを走らすことは可能ではないでしょうか?
あとそれが無理ならmobile2pcを使う際に
こちら側の音声を
パソコンに飛ばすことはできますか?
>>875 それならスレ違いだね。
Javaで開発だと思ったから、ライブラリはどこ?かと。
PC等のモバイル板にどうぞ。
877 :
デフォルトの名無しさん :2009/05/11(月) 07:17:00
書き込み失礼します。 0から1の乱数をN個つくりM個の区間わけるという頻度分布を出すプログラムを作っています。メインにつめこんで作るとうまくいったのですが、メソッドに分けて作ると失敗してしまいました。プログラムを下に書きます。
878 :
デフォルトの名無しさん :2009/05/11(月) 07:17:39
1 public class Ransuu { 2 public static void main(String[] args) { 3 Ransuu r = new Ransuu(100,10); 4 r.eval(); 5 } 6 public Ransuu(int N,int M){ // count配列を作る 7 int x = 0; 8 int[] count = new int[M]; // 個数をカウントする配列 9 10 // カウント初期化 11 for(int j=0;j<M;j++) 12 count[j] = 0; 13 14 // N個分の区域分けを繰り返す 15 for(int i=0;i<N;i++){ 16 17 // 乱数に分ける区間の数Mをかけて1以上の数にする 18 x=(int) (Math.random( ) * M); 19 20 // カウントする 21 count[x]+=1; 22 } 23 24 // count関数を表示する 25 for(int j=0;j<M;j++) 26 System.out.println(j+" "+count[j]); 27 } 28
879 :
デフォルトの名無しさん :2009/05/11(月) 07:20:40
29 public void eval(){ 30 // 平均・分散を求める 31 double a,wa = 0; // 和を求めるための変数 32 double heikin,bunsan = 0; // 平均と分散の変数 33 34 double M = 0; 35 String[] count = null; 36 // count関数を表示する 37 for(int j=0;j<M;j++){ 38 System.out.println(j+" "+count[j]); 39 } 40 41 // 個数の和を計算する。 42 for(int j=0;j<M;j++){ 43 wa+=count[j]; 44 } 45 // 平均を求める。 46 heikin=wa/M; 47 48 // 分散を求める。 49 wa=0; 50 for(int j=0;j<M;j++){ 51 a=(count[j]-heikin)*(count[j]-heikin); 52 wa+=a; 53 } 54 bunsan=wa/M; 55 56 // 平均・分散の表示 57 System.out.println("平均は"+heikin); 58 System.out.println("分散は"+bunsan); 59 } 60}
880 :
デフォルトの名無しさん :2009/05/11(月) 07:27:43
行番号6から27が乱数を設けて頻度分布を作るメソッド 行番号29から59までが平均・分散をもとめるメソッドとなっています。 そもそもメインのrの使い方もおかしい気がします。 エラーの内容としては 43行目 互換性のない型 51行目 演算子-はjava.lang.String.doubleに適用できません です。 もしお暇があればよろしくおねがいします。
public class Ransu { priate int[] count; public Ransu(int n, int m){ this.count = new int[m]; for(int i=0; i<n; i++) count[(int)(Math.random() * m)] ++; } public void eval(){ double sum = 0; for(int i=0; i<count.length; i++) sum += count[i]; double average = sum / count.length; ... } }
882 :
デフォルトの名無しさん :2009/05/11(月) 08:16:55
朝はやくなのにありがとうございます。 今から少し訂正してみます。
883 :
デフォルトの名無しさん :2009/05/11(月) 09:11:28
やってみてはいるのですが、知識の乏しい自分には少し難しいプログラムに見えます。
すみません。
>>880 のエラーは行番号35のstring型をint型にすることで解決できました。
しかしまだプログラムは実行できず
もとのプログラムの修正点などを指摘していただけるとたすかるのですが・・・
884 :
デフォルトの名無しさん :2009/05/11(月) 09:59:53
【実行結果】 run: 0 10 1 5 2 8 3 10 4 8 5 14 6 10 7 9 8 17 9 9 平均はNaN 分散はNaN 構築成功 (合計時間: 4 秒)
&nbsp;A A
{ int val1; }
今初めて知りましたが、2ch って「&nbsp;」を半角で書くと スペースが表示されるんですね。 2chでは普通の0x20コードだとインデントは消えて困るんですが、 これが解決策ですかね。
全角空白使え
DOS窓とフレームにそれぞれHello worldを表示させるプログラムが課題で出たんで面倒だから1つのクラスで作った 採点になって1つのクラスで作ったことで減点もらったんだけど、先生曰く「そこは別々のクラスで作ってほしい」と言っていた。 1つのクラスにまとめて作るのって何か問題あるのか?
折角、オブジェクト指向のJavaなのに、1つのクラスで作ってこられると、教える側としてはガッカリだなぁ それじゃJavaじゃなくてもいいじゃん・・・みたいな。 間違いじゃないけど、後々で困ることに。 というか、先生がいるなら、直接聞いたほうが早い。 しっかり質問すれば、向こうも答えてくれるよ。 なんで、別々で作るんですか?って。
一つのクラスの中でってことは main() の中で両方実装した訳か。そりゃ手抜きに見えるわな。
java1.5〜1.6で正規表現のしようって変更になりましたか? 1.5で動いていたものが動かなくなったらしく… 1.6のjavadocで「導入されたバージョン: 1.5」とかあるので、 これの1.6がなければ1.6での変更がないって考えていいものでしょうか? 対象クラスの変更があったかを確認するもっと簡単はあるでしょうか?
スレ開いたらavastのうるさいサイレン聞く羽目になったんだが何で?
質問です。 コンソールアプリで画面遷移のあるプログラムを作っています。 ======== = TEST = ======== 1・・・ 2・・・ 3・・・ 15・・・ 16・・・ というような感じで、数字を入力する事によって画面遷移するプログラムです。 この出力をprintlnを使ってやっていたのですが、printlnを使うよりStringBufferを 使ったほうがいい(スマート)といわれたのですが、いまいちよくわかりません(メリット、使い方)。 分かる方よろしくお願いします。
>>894 StringBufferを使えば、遷移で変化する部分だけ、insertメソッドや
deleteメソッドなどでStringオブジェクトを変更して、それを一回の
printlnメソッド(またはprintメソッド)で出力した方がいいって
ことじゃないかと思います。
ちがうかな。
バッファに一度ため込んでフラッシュした方がいいって意味だろうけど。 コンソール制御のできないjavaだとあまり意味ないような。
>>894 全部 StringBuffer に append して一度の println で出力するということ?
愚直に println 並べるよりはスマート(利口)に見える気はするが、
積極的に推すほどのものでもないんじゃなかろうか。
そもそも StringBuilder がある時代に(ry
>>871 >>873 お返事が遅くなりすみません、レスありがとうございます。
小物アプリで練習ということでMySQLを使用して動かしています。
とりあえず例外を常時意識するという観点で、個別にtry - catchを行うように書いています。
DB2の実装によって挙動が異なるということですが、その辺りの情報は別途収集しようと思います。
ありがとうございました。
name[]配列に、大勢の名前のデータが入力されています。 手で入力した名前を検索し、表示させたいと思っています。 for(int i=0;i<name.length;i++){ if(name[i].equals(kensaku)) System.out.println(name[i]); name配列を一通り検索し、該当する名前が無い場合にその旨を表示させるにはどうしたらいいでしょうか?
>>900 boolean flag = true;
for(int i=0;i<name.length;i++){
if(name[i].equals(kensaku)){
System.out.println(name[i]);
flag = false;
}
if(flag) System.out.println("No name matched.");
とか?
ただ、該当するたびにflagに代入が入るので、あまり
うまいやり方ではないかも。
そこは false から true にする派だなぁ
if (Arrays.asList(name).contains(kensaku)) { // hoge } これじゃ動かん?コンパイルしてないからわからんけど。
>>904 なんかいけそうな気がする。
Arraysクラスって使ったことないんだけど、ちょっと見てみたら
staticメソッドしかないんだね。
flag使うか、オブジェクト介してcontainsメソッドで探させるか
って感じだね。
String str = "No name matched.";
for( int i=0; i<name.length; i++ ){
if( name[i].equals( kensaku ) ) { str = kensaku; }
}
System.out.println(str);
ふつうは
>>901 みたく flag とか state とか使うけど。
あるかないかだけ分かればいいなら
>>904 みたいに手を抜くw
for (int i = 0; i < name.length; i++) { ↑の書き方だと、ループのたびに毎回配列の長さを参照しにいく 配列がクソ大きくなるとlengthでサイズを引っ張るのにも コストを要するようになるから、あらかじめサイズは外に出しておいた方がいい
>>902 でもってさ、フラグを使うなら名前も found とかにするよな。
初期 found = false
見付かったら found = true
909 :
901 :2009/05/12(火) 00:46:04
>>904 の方法が気になって、実際に組んで動作確認してみた。
Arraysクラスの勉強になった。おれもまだまだだなw
import java.io.*;
import java.util.*;
public class Test {
public static void main(String kensaku[]) {
String[] name = {"abc", "def", "ghi"};
if (Arrays.asList(name).contains(kensaku[0])) {
System.out.println("Matched.");
} else {
System.out.println("No name matched.");
}
}
}
<実行結果>
$ javac Test.java
$ java Test abc
Matched.
$ java Test def
Matched.
$ java Test ghi
Matched.
$ java Test a
No matched.
$
910 :
901 :2009/05/12(火) 00:48:31
>>902 >>908 センスなくてサーセンw
なんとなくif(!found)みたいにしたくなかったw
>>901 てけとーAPLでも例外チェックだけは怠らない方がいいと思われ
わかって書いてるなら失礼しました
>>907 おまえさ、name.length が strlen(str) みたいに毎回配列の長さカウントしてると思ってる?
913 :
901 :2009/05/12(火) 00:58:20
>>911 一部分だったんでてけとーに書きましたw
今気づいたが、
>>909 の実行結果、正しくはNo matched.→No name matched.だなw
No matched.で動作テストしたあと、ソースのメッセージ変えるからこういうことになったorz
>>912 ループの終了条件でオブジェクトのメソッドやフィールドを使うと、
毎回ヒープ領域への参照が発生するのでは?
使用領域がどれだけあるかが不明な以上、4バイト符号付整数を固定で持った方がいいと思うんだが。
申し訳ないが、今実際に計測してみたわけじゃない、
おかしなこと言っていたら失礼
915 :
デフォルトの名無しさん :2009/05/12(火) 01:14:54
メソッド1で定義した配列をメソッド2で使いたいのだけれど 配列って引数にできますかね。
public void foo() { String[] array; bar(array); } public void bar(String[] arg) { // something }
917 :
デフォルトの名無しさん :2009/05/12(火) 01:26:08
>>916 早いお返事ありがとうございます。
解決しました。
>>914 DOS 時代のお馬鹿 C コンパイラ+i486 でもそんなのが実測に現れた事はない。
もしそこがボトルネックになってるなら徐々に最適化されそうだけど
↓↓のようなソースがあってdog.speak(int cnt)を呼び出した場合に "ワン"x4ではなく"ギャアーッ"を4回表示する方法があると言われたのですが どうしても分かりません。 Dogクラスでspeak(int cnt)をオーバーライドせずに 上記動作をさせるにはどうしたらいいのか分かる方いたらお願いいたします。 // Animal class Animal{ public void speak() { System.out.println("ギャアーッ"); } public void speak( int cnt ) { for(int i=0; i < cnt; i++ ) speak(); } } // Dogクラス class Dog extends Animal { public void speak() { System.out.println("ワン"); } } // メイン class Test { public static void main( String[] args ) { Dog dog = new Dog(); dog.speak(4); } }
Animal dog = new Animal(); dog.speak(4);
>>921 解説はまかせた
class Animal{
// public void speak() {
private void speak() {
System.out.println("ギャアーッ");
}
>>922 つまりプライベートな秘所に突っ込んだらアッー!
924 :
922 :2009/05/12(火) 12:03:58
>>923 マナーとして、このほうが正か。
// public void speak() {
protected void speak() {
System.out.println("ギャアーッ");
}
>>921 えーと…たぶんdogインスタンスから呼んで表示させられる、ってことだと思います。
>>922 おあ。出来ました!どなたか解説をorz
出来れば
>>923 より多少詳しいとありがたいです。
ただ
>>924 さんのprotectedだとワンが表示されて出来ませんでした。
926 :
922 :2009/05/12(火) 12:47:14
private(秘所)なメソッドはextend(継承)されないって事だろう。 コンパイルは出来るのにそんな機能がある理由は知らん。犬も飼いならすとこう吠える。 Dog dog = new Dog(); dog.speak(4); dog.speak();
927 :
デフォルトの名無しさん :2009/05/12(火) 12:53:28
920〜924 思わずやってみました 勉強になりましたねえ。
928 :
608 :2009/05/12(火) 13:18:17
>>610 亀レスで申し訳ない。アドバイスありがとう。
GW中のネット環境無し&ブラックな現場から、今帰還。。。
929 :
長文すみません :2009/05/12(火) 16:06:54
/* * To change this template, choose Tools | Templates * and open the template in the editor. */ /* * ListToday.java * * Created on 2009/04/07, 16:33:42 */ package cutsystemsmple; import java.awt.Color; import java.util.Date; /** * * @author 07 */ public class ListToday extends javax.swing.JFrame { /** Creates new form ListToday */ public ListToday() { initComponents(); getContentPane().setBackground(Color.white); jLabel4.setText(new Date().toString()); } /** This method is called from within the constructor to * initialize the form. * WARNING: Do NOT modify this code * . The content of this method is * always regenerated by the Form Editor. */ @SuppressWarnings("unchecked")
930 :
長文すみません :2009/05/12(火) 16:11:49
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { new JokenKensaku().setVisible(true); if(evt.getSource()==jButton1){this.setVisible(false);} } private void jButton3ActionPerformed(java.awt.event.ActionEvent evt) { new MainMenu().setVisible(true); if(evt.getSource()==jButton3){this.setVisible(false);} } private void jMenuItem2ActionPerformed(java.awt.event.ActionEvent evt) { new MainMenu().setVisible(true); if(evt.getSource()==jMenuItem2){this.setVisible(false);} } private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) { new Keikoku().setVisible(true); } /** * @param args the command line arguments */ public static void main(String args[]) { java.awt.EventQueue.invokeLater(new Runnable() { public void run() { new ListToday().setVisible(true); } }); }
931 :
長文すみません :2009/05/12(火) 16:13:06
// Variables declaration - do not modify private javax.swing.JButton jButton1; private javax.swing.JButton jButton3; private javax.swing.JComboBox jComboBox1; private javax.swing.JLabel jLabel1; private javax.swing.JLabel jLabel2; private javax.swing.JLabel jLabel3; private javax.swing.JLabel jLabel4; private javax.swing.JMenu jMenu1; private javax.swing.JMenu jMenu2; private javax.swing.JMenuBar jMenuBar1; private javax.swing.JMenuItem jMenuItem1; private javax.swing.JMenuItem jMenuItem2; private javax.swing.JPanel jPanel1; private javax.swing.JScrollPane jScrollPane2; private javax.swing.JTable jTable1; // End of variables declaration } 上記の中のjLabel4.setText(new Date().toString());に入る時刻を1秒間隔で更新したいのですが どうしたらいいのか分からないんです。自分でも調べてみたのですがさっぱり分からなくて。。 他の質問板で質問したのですがググれカスで終わってしまって、、 よろしければお知恵をお貸しください。
char[] pass=new char[10]; pass=jPasswordField1.getPassword(); String Moji=""; Moji=pass[0]+pass[1]; Eclipse使用。jLabel1とjPasswordField1を作り、jPasswordField1に「Javaですよ」と入力してボタンを押すと jLabel1に「そうですね」、それ以外の場合は「Javaちゃうの?」というメッセージを表示させたいのですが、うまく作れません。 ↑のはこんな感じかな?と思って作っただけですが、「pass[0]+pass[1]」の部分に「intからStringには変換出来ない」というエラーが表示されます。 よかったら上手く動作する作り方を教えてください。
N 個のオブジェクトのうちどれかから notify() が来るのを待ちたい & notify() した オブジェクトを取得したいんですが (Windows の WaitForMultipleObject() のイメージ) 良い方法はありませんか? N 個のスレッド立ててそれぞれ監視させるのは無駄ですよね…
934 :
長文すみません :2009/05/12(火) 17:18:54
>>931 追記
netbeansを使用してます。
char[]って 1文字 の配列って意味ってわかってる? C言語がわかってやってるんかな? なんでたぶんやりたいことは Char[] → String それにpass[1]の部分が、なにをやりたくてこうしたかがわからない。 pass[1]ってどこにも現れてないのにいきなり出てくるし。
>>931 要するに時計みたいな表示がしたいって事?
937 :
長文すみません :2009/05/12(火) 18:14:40
String に == は使うなってどういう意味?
>>937 Timerを使うと良いと思う。javax.swing.Timer
java Swing timer でググればいっぱい出てきた。
940 :
長文すみません :2009/05/12(火) 18:46:30
>>939 timerを調べてたんですが、このプログラムにどう組み込むのか分からなくて・・
>>938 文字列どうしは==では比較できないから、equalsつかえって事。
>>942 実際やってみた?
system.out.println("あ"=="あ");
でtrueって出ます!とかじゃだめだよ?
944 :
920 :2009/05/12(火) 19:39:42
>>926 ありがとうございます。
調べたらそういう仕様が出てきました。
Dog.speak()はオーバーライドではなく、まったく別なメソッドになるってことなんですね。
ただこれだとどうやらgetSuperclass()を使う方法みたいです。
invokeとか使うのかな?
かなりの力技になる気がしますが、、。
他にこんな方法で出来るよ!っていうのありますか?あったら教えて頂きたいです。
>>940 細かい解説は面倒なんで要点だけ
Timerには、Timer( 繰り返す秒数, ActionListenerをインプリメントしたクラス)
っていうコンストラクタがあるから、
ActionListenerをインプリメントした、JLabelでも自作する。
class MyLabel extends JLabel implements ActionListener {
public void actionPerformed(ActionEvent e) {
this.setText( new Date().toString() );
}
}
こんな感じかな。
これをmainで呼んでやればいい
Timer tm = new Timer( 1000, MyLabelのインスタンス);
tm.start();
start()をしないと動き始めないので注意。
↑ ×これだとどうやら ○どうやら
947 :
デフォルトの名無しさん :2009/05/12(火) 19:49:16
addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { System.exit(0); } }); ↑ついにAWTというのに進出しました。 これは無名内部クラスというらしいのですけど、 newでインスタンス生成があって、その後ろに{ }がついていると、 無名内部クラスということでいいのでしょうか。
>>943 どうだったらいいのか教えて下さい
class Test{
public static void main(String[] args){
String a = "あ";
String b = "あ";
System.out.println(a==b);
}
}
実行結果
true
まぁいいじゃん。 後で痛い目を合えばいいんじゃないの? その1行のために何時間もにらめっこする羽目になるだけなんだしw
>>949 教えてくださいよ
もしかしてわからないんですか?
>>938 ==はアドレス情報が同じかどうかを比較
equalsは内容の比較
String a = "aaa";
String b = "aaa";
の場合はa==bは同じアドレス情報を共用してるからtrueだけど
String a = new String("aaa");
String b = new String("aaa");
の場合はa==bはアドレス情報が違うからfalseになってしまう
でもequalsの場合は両方ともtrueになる
ついでにググればすぐわかるよ
>>951 親切にありがとございます
String a = "aaa";
String b = "aaa";
で
aとbは同じ参照元になるんですか・・・
よく読め、そうなると書いてあるだろ。
>952 "aaa"みたいに文字リテラル定義のStringは正準表現になる。 String#intern()された状態ってことだな。 だからアドレスは違っても==で比較できる new String("aaa")で作られたStringってのは正準表現になってないから==だとfalseになる。
955 :
954 :2009/05/12(火) 22:13:57
ごめん。正準表現勘違いしてた。 internするとアドレスも同じになるんだね。
おまえら優しいな。 ==は等値性、equalsは同一性をみる。
まぁ、どの本でも、最初のほうに書いてあるんだが・・・==とequalsの違いは。
class A { public void funcA() { System.out.println("class A -> funcA"); } } class subA extends A { public void funcA() { System.out.println("class sub A -> funcA"); } } public class Test { public static void main(String[] args) { subA obj = new subA(); obj.getClass().getSuperclass().newInstance().funcA(); } } で、class A -> funcAって表示させたいんだけど、それ以前にコンパイルエラーになる。 Test.java:19: シンボルを見つけられません。 シンボル: メソッド funcA() 場所 : java.lang.Object の クラス obj.getClass().getSuperclass().newInstance().funcA(); ^ エラー 1 個 わかる方、ご指導くださいm(_ _)m
959 :
デフォルトの名無しさん :2009/05/12(火) 23:05:14
Stringのequalsがオーバーライドされてるだけ 本来は両方アドレス比較で同じ なお、equalsをオーバーライドしたらhashcodeメソッドもオーバーライドする
960 :
デフォルトの名無しさん :2009/05/12(火) 23:16:54
あと、コード上に書いたストリングは同じのは再利用されるから、アドレスは同じ
String a = "aaa"; String b = "aaa"; のaとb同じアドレス。中身が同じだから。
963 :
デフォルトの名無しさん :2009/05/12(火) 23:36:54
964 :
デフォルトの名無しさん :2009/05/12(火) 23:38:48
それじゃ、intern()ばっかりしたらどうなるの?
要するにStringの比較でstr1.equals(str2)がtrueの場合はstr1 == str2もtrueが返るということですよね
>>963 import java.lang.*;
class A {
public void funcA() {
System.out.println("class A -> funcA");
}
}
class subA extends A {
public void funcA() {
System.out.println("class sub A -> funcA");
}
}
public class Test {
public static void main(String[] args) throws InstantiationException, IllegalAccessException{
subA obj = new subA();
((A)(obj.getClass().getSuperclass().newInstance())).funcA();
}
}
って感じで、ものすごくアホくさいソースになったが、キャストしたらできました。
どうもありがとうございますm(_ _)m
キャストする時点で、Superclassの名前わかってんだから、最初からnew A()しろ
っていうツッコミどうぞいらっしゃい的なソースですねw
例外も2つも受けとかないといけないし。(めんどくさいんでthrowsにしたw)
結論:newInstance()使えねーw
>>967 逆というのは、
!str1.equals(str2)がfalseの場合はstr1 != str2もfalseが返る
ということでしょうか?
969 :
デフォルトの名無しさん :2009/05/13(水) 00:07:42
>>966 ジェネリクスのプレースホルダ使うと楽しいかも
まだ勉強中の初心者ですまそ
>>969 じぇねりくすのぷれーすほるだ。。。
一体それが何なのか想像もつきません。
勉強します。頑張りますorz
972 :
デフォルトの名無しさん :2009/05/13(水) 00:12:52
あと、名前でクラスを呼ぶのも出来るはず
>>972 ジェネリクスについて少し調べてみて、ほんの少しわかった「気」がする。
つまり、自分でキャストする代わりにコンパイラにやってもらっちゃって、
楽する&実行時例外を未然に防ぐ的な感じ?
>名前でクラスを呼ぶのも出来るはず
クラスを呼ぶ?。。。
わからーんことが多すぎるw
>>959 >本来は両方アドレス比較で同じ
ばーか
ん?
>>959 は正しいこと書いてるように見えるけど?
>>959 そもそも、おれには何でStringのequalsメソッドがオーバーライド
されることになるのかわからない。。。
誰かおせーて
978 :
920 :2009/05/13(水) 00:50:55
>>972 これ俺ももうちょいkwsk知りたいです。
ジェネリックのプレースホルダーも調べてみます。
979 :
デフォルトの名無しさん :2009/05/13(水) 00:54:41
Javaの基本仕様は日経のSJC-P認定ガイドに全部書いてある
>>968 ソース:
public class EqTest {
public static void main(String[] args) {
String a = new String("test");
String b = new String("test");
System.out.println("a.equals(b): " + a.equals(b));
System.out.println("a == b: " + (a == b));
}
}
実行結果:
a.equals(b): true
a == b: false
>>962 のページにもあるけど、
String a = new String("test");
String b = new String("test");
って書くと、中身は同じで入れ物が違うStringオブジェクトが実行時に生成されるから、
a.equals(b): true
a == b: false
になる。一方、
String a = "test";
String b = "test";
って書くと、コンパイル時にバイトコードの中に"test"という文字列が一つ用意されて、
String aとString bでコード上の同じの場所の文字列を参照するから、
a.equals(b): true
a == b: true
になる、でおk?
982 :
デフォルトの名無しさん :2009/05/13(水) 01:14:17
構ってチャンの相手なんかするな おまえは所詮カスだな
。。。
とりあえず『やさしいJava 活用編(第2版)』を一通りやったのですが、 テキストの問題を解くだけでは勉強にならないと思い、Javaの演習問題を 集めたサイトを探しているのですが、なかなか良いサイトが見つかりません。 どなたかJavaの演習にちょうど良いサイトがありましたら教えていただけませんでしょうか?
>>978 名前でクラス呼ぶのはクラスローダで調査。
外部プラグインの機構を作りたいときには必須。
>>984 一冊片付けたのなら、とりあえずゲームアプリでも自作してみたら?15パズルとか。
実際に何か作ってみると、わからない事だらけで、それを調べていくことが勉強になる。
1 import com.sun.org.apache.xerces.internal.impl.dv.util.Base64; 2 import sun.misc.BASE64Decoder; 3 import sun.misc.BASE64Encoder; 4 import com.sun.org.apache.xml.internal.security.utils.Base64; 5 import com.sun.xml.internal.messaging.saaj.util.Base64; 6 import com.sun.xml.internal.messaging.saaj.packaging.mime.util.BASE64EncoderStream; 7 import com.sun.mail.util.BASE64EncoderStream; 8 import org.apache.commons.codec.binary.Base64; どれ使えばいいのん・・・ 大したコードじゃないから自前で書いたほうが良いのか・・・?
結局書いたので取り下げます
988 :
デフォルトの名無しさん :2009/05/13(水) 02:41:17
糞面倒くさい次スレ
仕方ない。立ててやる。
NIOのByteBuffer.allocateDirectを使う時は メモリの開放はどうすればいいのでしょうか?
>>991 ユーザ側で勝手には解放できない。
ByteBuffer#slice()、ByteBuffer#duplicate() でメモリ共有したバッファが壊れる
すみません、ここでいいのか、わからないんですけど
他のスレでは解決しなかったので、教えて下さい。
現在ウイルスバスター2009を利用しております。
このバスターを終了せずに
ttp://www.fxonline.co.jp/market/rates.html の、例えばUSD/JPYをクリックするとjavaが起動するのですが
チャートが正しく表示されず、エラー-1 GetData Error while reading Data
と表示されます。
どうしたらバスターを終了させず、正しく表示させることができるのでしょうか?
全くこのスレと関係ないです お引取りください
1000になったら・・・俺次スレで質問するんだ!!
996 :
993 :2009/05/13(水) 16:05:06
>>994 そうですか、すみませんでした。
javaの設定を変えれば、どうにかなると思っていました。
設定の話をするスレでもない 板名見えてるか
>>996 【初心者】Java質問・相談スレッド125【歓迎】
プログラムの話な
>>993 「javaが起動する」ってのが、いまいち判らん。
VMが?
1000なら俺がBeans!
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。