1read 100read
2013年05月プログラム32: ★★Java質問・相談スレッド161★★ (419) TOP カテ一覧 スレ一覧 2ch元 削除依頼
NetBeans Part6 (947)
Excel VBA 質問スレ Part29 (485)
Java系スクリプト言語Groovy (857)
【.cmd】 バッチファイルスクリプト %9 【.bat】 (918)
【C++】 DirectX初心者質問スレ Part37 【C】 (928)
サウンドプログラミング5 (772)

★★Java質問・相談スレッド161★★


1 :2013/03/23 〜 最終レス :2013/05/13
プログラミング言語Javaに関する質問スレです。
JavaScript, Ajaxの質問は、ここでは受け付けていません。
Web製作管理    http://pc11.2ch.net/hp/
Webプログラミング http://pc11.2ch.net/php/
をご利用下さい。
よくある質問
・「コマンドまたはファイル名が違います」
 「'javac' は、内部コマンドまたは外部コマンド、
 操作可能なプログラムまたはバッチ ファイルとして認識されていません。」
 「Exception in thread "main" java.lang.NoClassDefFoundError: 」
 (p)ttp://www.wikiroom.com/java/?path,classpath
・String に == は使うな。equals() を使え。
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
前スレッド
★★Java質問・相談スレッド160★★
http://toro.2ch.net/test/read.cgi/tech/1361516065/

2 :
< `∀´>ニダー

3 :
Eclipse Community Forums: CDT ≫ Redirect Input and Output
http://www.eclipse.org/forums/index.php/m/697301/
ここ見るとリダイレクトできるとか書いてあるが
引数の設定のとこに <hoge.txt とか >hoge.txt を書けとか
試してないから本当に出来るかは知らんけど

4 :
>>3
CDTって書いてあるけどjavaでもいけんのか?

5 :
http://toro.2ch.net/test/read.cgi/tech/1361516065/995
これつかって試してみればええねん

6 :
Eclipseというのを入れてみたが糞重すぎてワロタ
ネットブックに入れるのは流石に無理かw
NetBeansってのはどうなんだろか

7 :
>>4
できないよ

8 :
前スレで気になったんだけど
for(;;)
ってどういう意味ですか?こういう特殊な書き方は名称を知らないとなかなかggってもヒットしなくて困りました

9 :
for文で、ループの継続条件が省略された場合は、常にループを継続
for(;;) {...} は while(true) {...} と同じ

10 :
>>9
どうもです
ちなみにforで書く場合とwhileで書く場合とでは何か違ってくるのですか?何かを意識した書き方とかあるのかな

11 :
それを話し始めると不毛な論争に突入する的なもの
ちなみに俺は while(true) 派

12 :
SoundAPIについて質問なのですが、ShotMessage.NOTE_ONを送信して1秒音を鳴らしたい場合、どのように書くのが普通ですか?
例えば
receiver.send(new ShortMessage(ShortMessage.NOTE_ON, 0, 60, 120), -1);
Thread.sleep(1000);
receiver.send(new ShortMessage(ShortMessage.NOTE_ON, 0, 60, 0), -1);
のように、ドの音をベロシティ120で送信し、Threadを1秒sleepさせ、その後ベロシティ0で再度送信する書き方をネットで見つけたのですが、このような書き方が普通なのですか?
これじゃ音はならないにせよドの音がベロシティ0で鳴り続けているような気がします・・・。
「何秒間鳴らす」をしたい場合、精度と処理速度を考えるとどのように書くべきなのでしょうか

13 :
0HzなPCM音もヴェロシティゼロなMIDI音も、音圧ゼロと同じ事だと思うんだが

14 :
>>13
音が鳴らないという点で同じであって他は違うんじゃ?

15 :
AC'97チップやHD Audioチップにバックグラウンドで音波データ流し込んでいる
ソフトシンセか何かがVM内かドライバ内にいるんだろうが、気に病むことはない。
それでも心配なら外付けMIDI音源買おう。

16 :
>>12
ベロシティゼロのノートオンはノートオフと同じ扱いと聞いた覚えがあるけれど
気になるならノートオフを送ればいいんじゃない
精度とかは送るタイミングを自分でうまいこと調整するしかない

17 :
>>16
了解しました

18 :
JAVAは、本買ってさらっとしか勉強しなかったんですが。
あらためて質問さして下さい。
以下のようなソース
public class Test01 {
public static void main(String[] args) {
byte b1 = 1;
byte b2 = 2;
コンパイルエラー // byte b3 = b1 *b2;
byte b3 = (byte) (b1 * b2);
System.out.print(b3);
}}
で、b1*b2がint型で返すという事ですが
となるとJAVAのメモリーレイアウトは、4バイトで
char,boolean,byte,shortは、それぞれ4バイトの領域をメモリー上にもっている
と思って良いですか?
どなたか、ご教示を。

19 :
違う。演算が4バイトに昇格されて行われる場合があるだけ。

20 :
馬鹿だけど自信満々

21 :
>>6
javacとed使ってろ。

22 :
>>10
1兆回ループ回したらwhile(true)のが0.13秒早かった

23 :
>>10
for自体がwhileのよくあるパターンを構文化しただけじゃないの。そのパターンに当てはまらない無限ループはwhileの方が読み易いと思う。

24 :
for文は配列専用
while文はList専用
と使い分けている

25 :
その使い分けの意図はよく解らない。

26 :
昔から配列操作といえばfor文だったから
初期化子が中にあるというのが
ただしfor(:)の場合は例外

27 :
反復回数が一定の処理ならfor文のほうがパッと見でソースが分かりやすい
反復子?って奴の変化が単調ならfor文、ループ内の処理次第で変わるならwhile

28 :
>>24
iteratorの糖衣構文はforでしか使えないよなぁ。

29 :
くだらんこといってないでruby勉強しろ

30 :
はいはいrubyruby

31 :
forを使った方が反復子のスコープが小さいというのはある。
Iretator<String> i = list.iterator();
while(i.hasNext()){...}

for(Iretator<String> i = list.iterator(); i.haxNext();) {...}
ではiのスコープがループの外に出ないのでforの方が良いという場合はある。

32 :
馬鹿には無理

33 :
>>31
java6からだっけ、foreach使えるようになったらイテレータとか使わなくなった

34 :
remove使う場合など反復子そのものに用事があるときはforの糖衣構文ではなく
whileとか使う必要がある。

35 :
ループ条件に定数式使っただけで警告をもりもり吐く
お節介な「品質向上システム」とかがあってだな・・・

36 :
>>31
独習JavaだかEssential Javaだかにそんなことが載っていたような気がする

37 :
Iteratorや糖衣構文のfor-eachは使うには便利だが、
自前で実装するとなると面倒臭い。
hasNext()でカーソル進めて、
next()でカーソルが指すオブジェクトを取得。
の方がずっと楽なのに、なんであんな仕様なんだ?

38 :
Iteratorパターンってもともとそういうもんでしょ
わざとクラスを分割しているんだと

39 :
ListIteratorつかって
List#get(nextIndex())

40 :
>>39
配列や線形リストのIteratorなら自作でも割と簡単。
hasNext()で次のデータがあるか調べる(内部状態は変化しない)、
next()でデータを返す+カーソルを進める(データを返しつつ、内部状態も変化させる、だがremove()のために返したデータは記憶しておく)
っていうJavaのIteratorの仕様だと、
例えば、親ディレクトリを指定して、サブディレクトリを含む全ファイルを1つずつ返すIterator
なんてのを作るのがクソ面倒臭いのよ。

41 :
あまり難しい話は禁止ね
やめなさい

42 :
>>40
そもそも、Genericsの仕様が難儀だからなあ
Genericsを意識しなかったら簡単につくたりして

43 :
ArrayListのlistiteratorかiteratorでremoveがunsupportedで驚いた覚えが。
LinkedListを使えば良かったけど。

44 :
>>40
commonsかどっかに、子Iteratorを連結するIterator実装があったよ

45 :
ここしばらくUpdateが無いな。

46 :
おまえ干されてるんだよw

47 :
えっ?
ジャバってオワコンなんでしょ!?

48 :
EZアプリ(J)を作るよ!

49 :
      ∧_∧
     ( ´∀` )  ところでこのゴミ、どこに捨てたらいい?
     /⌒   `ヽ
    / /    ノ.\_M
    ( /ヽ   |\___E)
    \ /   |   /  \
      (   _ノ |  / ウワァァン ヽ
      |   / /  |ヽ(`Д´)ノ|
      |  / /  ヽ( C++)ノ
      (  ) )     ̄ ̄ ̄
      | | /
      | | |.
     / |\ \
     ∠/

50 :
>>49
まあゴミというな
JVMとOSを作ってくれる奴なんだから
それ以外はほとんどゴミだが

51 :
クラスClassA のメンバ関数 func()内で new した配列の寿命についてお聞きしたいです。
class ClassA {
 int[] func() {
  int[] retArray = new int[10];
  return retArray;
 }
}
class ClassATest {
 public static void main(String[] args) {
  ClassA classA = new ClassA();
  int[] array = classA.func();
  System.out.println( array.length );
 }
}
ClassAの func() 内で newした int型配列retArrayを、ClassATest内のarray に返すものですが、この場合
ClassAの retArrayはプログラム終了までメモリ開放されないのでしょうか?
初歩的な質問で申し訳ありませんが、よろしくお願いします。

52 :
プログラム終了というのが何を指すかが微妙だが、だいたいあってる。
変数が勝手によく分からないものを参照したり null になったりなどはしない。

53 :
>>50
コンパイラ、もだね

54 :
>>51
補足
メモリが開放されないのかどうか危惧しているなら、
おおよそ、どのスレッドからもアクセスできなくなったオブジェクトは
そのうち、適当なタイミングで勝手に回収してくれる。

55 :
そういうときは弱参照!

56 :
JVMが見張ってくれるということですか?
呼び出し関数内で宣言した変数が、呼び出し元から参照できるのが不思議だったので質問させていただきました。
ということは、>>51のfunc()のような関数をポンポン作ってたらメモリたくさん食べちゃうと思うんですが、
こういう書き方は改めたほうがいいのでしょうか。

57 :
>こういう書き方は改めたほうがいいのでしょうか。
いや全然。気にする必要無し。
初めのうちはしたいことを簡潔かつ素直に書くことを心がけていれば大抵は速いし
メモリにも優しい。メモリリークを心配するのはその後でも良い。
実際この程度の関数の是非を云々することで解決するメモリリークはあまり無い。

58 :
わかりました。ちょっと心配になって手が止まってたので、アドバイス頂けてよかったです。
簡潔かつ素直にを心がけたいと思います。
>>54,>>55,>>57
ありがとうございましたmm

59 :
JDO,JPAって何が違うの?

60 :
AWTとSwingくらいの違い。

61 :
なーんだ
大した違いじゃないね

62 :
就活のときの玉手箱ってJRAで動いてるけどマウスのクリックとかキーボードで他の操作してるのって分かるの?

63 :
フォーカスが移ってるか、マウスがウィンドウ上に無いとイベントは取れないはず
昔、コンソール情報出しながらWebテストしてたらヌルポ発生しててびびった覚えが

64 :
2つのListからintersectionをとりたいのですが
Stringのリストの場合は下記のようにすればいいのかと思うんですが
List<String> List1;
List<String> List2;
List1.retainAll(List2);
下のようなクラスを作って、key1とkey2を使い分けて intersectionなどを取りたい場合はどうやればいいんでしょうか?
public static class MyClass {
public String key1;
public String key2;
};
List<MyClass> MyClassList1;
List<MyClass> MyClassList2;

65 :
>>64
まずリストは忘れろ
hashCode と equalsについて学べ
わからなかったらEffectove Java買え

66 :
hashCode()とか関係なくね?
key1とkey2を必ずString#intern()通した値にしとけば
問題なくretainAll()出来る、はず。

67 :
う、やっぱりequals()のオーバーライドも必要だは

68 :
でしょでしょ

69 :
>>64
2つのListのintersectionをとりたいのか
2つの各Listの中にある文字列の各1文字のintersectionをとりたいのかはっきりしないな
もしそれが文字だけのものなら、正規表現でどうにかなるって話になる

70 :
EqualsBuilder
HashCodeBuilder
ですべて解決

71 :
>>69
正規表現?どういうこと?

72 :
>>64 です
やりたいことは2つの集合からキーを使い分けて intersection などを取りたいのです
キーはString以外にもDateやIntなどを使いたいので正規表現等ではなくretainall を使う方法になるかと思います
equalsをオーバーライドすればいいのかとも思ったんですが書き方がよく分からなくて質問しました
for文で回せば可能でしょうがこれだと遅くなりますよね?

73 :
リストならバイナリサーチでも出来るようにしておかない限り
実質for文でぶん回すしかないだろ

74 :
まずequals・hashCodeのオーバーライドで解決するのはこの例の場合不適だと思う。
例えば>>64の例でkey1だけを使ってequalsを評価したりハッシュ値を生成するように
オーバーライドしても、結局はkey1だけを使ってしか比較が出来なくなる。
64がやりたいのはある時はkey1同士を比較してintersection、別の時はkey2同士、
あるいはlist1のkey1とlist2のkey2を比較して、といった使い分けだとエスパー。
かりにそうだとしたら比較に使うフィールドが静的に決まってしまうequals等々の
オーバーライドは適当じゃない。
では何が適当かというと・・・forのぶん回し?

75 :
>>64 です
とりあえずこんな方法にいきつきました
1, まず使いたいキーのデータだけをそれぞれの集合から抽出
2, それのintersectionをとる
3, そのキーを持つものを元の集合から抽出
List<MyClass> MyClassList1;
List<MyClass> MyClassList2;
List<String> List1_Key1 = new ArrayList<String>();
List<String> List2_Key1 = new ArrayList<String>();
for (MyClass obj: MyClassList1) List1_Key1.add(obj.key1); // 1
for (MyClass obj: MyClassList2) List2_Key1.add(obj.key1);
List1_Key1.retainAll(List2_Key1); // 2
List<MyClass> result = new ArrayList<MyClass>();
for (MyClass obj: MyClassList1) { // 3
if (List1_Key1.indexOf(obj.key1) != -1) result.add(obj);
}
for文をネストするよりは速いでしょうか?
使いたいキーの数だけMyClassを継承してそれぞれにequalsを作ったほうがいいのでしょうか?

76 :
indexOf()も中では結局equals()頼りだからなあ。
ratailAll()を高速化するためには
・1番目のリストのremove()高速化
・2番目のリストのcontains()高速化
が必要。
まずremove()される方のリストはArrayListやめてLinkedListにしよう。
2番目のリスト、ListでなくSetでもいいんだよね?HashSetとか。
TreeSetなら後付けでComaparatorも差し替えられるのでエスパー案件もおっけ

77 :
マルチスレッド初心者です。
Aというメソッドを実行し続けるスレッドと、Bというメソッドを実行し続けるスレッドを起動させたとき、必ずA→Bという順序でメソッドを実行させられるように制御したい。
www.dotup.org/uploda/www.dotup.org4085924.zip.html
上記にうpした通りの3ファイルで書いてみたが、処理が途中で止まることがあるようで、どうも不安定であります。
この場合、最もスマートな書き方はどんな感じなのでしょう。

78 :
単純にひとつのスレッドでA→Bと呼べばいいんじゃね
まぁrestartとwaitの間にrestartが呼ばれる競合状態があるんだろう
こんな感じでいいんじゃない
boolean restarted;
synchronized void restart() {
restarted = true;
notify();
}
synchronized void waitMethodA() {
while (restarted == false) {
wait();
}
restarted = false;
}

79 :
>>78
ご丁寧にどうも。
今回は単純化したんだけど、最終的には、スレッドAでデータ取得、スレッドBで保存みたいなことをしたいので、スレッドは別にした方が良いのではないか…と考えています。
A、Bそれぞれのクラスに教えていただいたコードを加えたところ、上手くいきました。ありがとうございます。
しかし、動作がイメージし難いため、なかなか理解が深まりません…

80 :
volatile boolean もしくは AtomicBoolean を推奨

81 :
>>79
スレッドがどう切り替わっても平気なように書かないとだめ
元のプログラムの場合
↓A.run
 ↓B.run
↓this.methodA()
 ↓this.waitMethodB()
↓b.restart()
 ↓this.methodB()
 ↓a.restart()
 ↓this.waitMethodB()
↓this.waitMethodA()
みたいになると止まる

82 :
>>79
A, B 同時に開始させて B には頭にwaitを入れる、ていう方針はどうでしょう?
A, B 同時スタートっていうのはセマフォのいい課題だからどこぞに転がってそうですね

83 :
SynchronousQueue 使ってデータ受け渡せば、何も考えなくていいから楽だな

84 :
>>80
ありがとうございます。
しかし未知の世界だ…
とりあえず、'volatile boolean restarted'とでもしておけば安心なのかしら。
もう少しkwsk教えていただければ幸いです。
>>81
なるほど、片方のスレッドのサイクルがずれてしまって、デッドロックに陥るってことですね。
>>82
同時ってのは考えてなかったですねぇ…
しかし、同時にスタートできても、徐々にずれてしまって、>>81氏の言われるようになるのでは!?

85 :
>>49

86 :
> 最終的には、スレッドAでデータ取得、スレッドBで保存みたいなことをしたいので
素直にBlockingQueueを使ってデータを受け渡ししよう。

87 :
>>83, >>86
サンクス

88 :
static なクラスを、いくつかのスレッドからアクセスしています。
非常に頻繁なアクセスです。
この場合、static なクラスの関数処理が終わる前に別のスレッドがアクセスした場合、
static なクラスの内部にある変数は上書きされるものでしょうか?
それとも別メモリ空間で処理が行われる?

89 :
> staticなクラスの内部にある変数
これの意味が曖昧なので答えは二通りになる。
・クラスのstaticなメンバフィールド -> 全てのスレッドで共有される
・クラスのメソッドの内部で宣言された変数 -> スレッド毎に確保される

90 :
同じstaticメンバなのに、コア間で値が違うとか、普通にありえる。
double値の下半分だけ共有で上半分が別の値とかもありうる。

91 :
はじめまして。このたび晴れてSE見習いになりました吉野と申します
会社の研修でJavaを覚えさせられることになったので先回りして勉強しようと思ったのですが
取り組もうとした矢先、いったいどうやってJavaを作るのか?というところで分からなくなりました
インストールの仕方や基本的な操作を教えていただけるとうれしいのですが、どなたかお教えいただけないでしょうか?

92 :
※ただし有料に限る

93 :
いくら出すんですか?

94 :
>>91
jdkをインストールして
ソースコードを書いて
ソースコードをjavacでコンパイルして
コンパイルしたものをjavaで実行
Java SE Downloads
www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

95 :
Javaを作るってコンパイラ?VM?

96 :
>>91
本屋にいけ、本屋にいってなにもできなかったら進路についてもう一度再考したほうがいい

97 :
>>88
>非常に頻繁なアクセス
どうせ1秒間に数百回程度なんだろ?

98 :
>>91
EclipseかNetBeansをインストールするところから始めよう。
これらはIDE(統合開発環境)というものです。
ダウンロードやインストール方法はググれば出てくるよ。

99 :
自己顕示欲を満たす為だけに回答した無料レスだから
価値はない

100read 1read
1read 100read
TOP カテ一覧 スレ一覧 2ch元 削除依頼
Excel VBA 質問スレ Part29 (485)
C言語なら俺に聞け(入門編)Part 114 (936)
ふらっとVisual C#,C♯,C#(初心者用) Part104 (286)
新言語を開発したい (418)
自然言語処理スレッド その3 (689)
懐かしのMS-DOSプログラミング (385)
--log9.info------------------
【SACRED2】 セラフィム2 【セイクリッド2】 (969)
藤島康介>>>>>>>>>>いのまたむつみ (733)
【完全】テイルズシリーズ超アンチスレ 【否定】 (557)
多人数RPG (409)
どんなRPGがやりたいか貴様らかいていけ (451)
【フラゲ組】DARK SOULSどう?【評価&攻略】 (553)
【PS3】Demon's Souls フェイスメイキングスレ7 (522)
【PS3】テイルズオブエクシリア Part82【TOX】 (419)
TOVとSO4の差wwwwwwwwwwwwwwwww (258)
ペルソナシリーズに順位をつけよう!2 (564)
【トリガー】クロノシリーズPART11.1【クロス】 (283)
【総合】ドラゴンクエストX 目覚めし五つの種族 オンライン part1893【DQ10】 (549)
【DQ10】引退ラッシュが止まらない★54【過疎化】 (703)
【ドラクエ10】ドラゴンクエストX 初心者専用スレ 9組目【WiiU】 (872)
【DQ10】モーモンバザー出品報告スレ 82枠目 (711)
【DQ10】リュウイーソーで時給1万ゴールド以上! 【第2のバサラーナ】 (860)
--log55.com------------------
駄菓子屋にあったゲーセンの思い出
こんなゲーセンはいやだ
山口県のゲーセン事情【20スレ目】
【三冠王】 長崎県佐世保の音ゲー事情 【アーバン】
宮城のゲーセン事情 part53
【千客】なぜQMAプレイヤーはキモいのか【万来】
【めうめう!】鹿児島音ゲー事情7【ぺったん!】
北海道地方音ゲー事情 part3