トップページ⇒tech
1001コメント273KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/10/20(日) 19:30:39.35
プログラミング言語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
・「\12288 は不正な文字です。」
文字リテラル以外で全角スペースは使えません。半角スペースに。
・その他の質問→「APIのjavadoc見ろ」
・String に == は使うな。equals() を使え。※

前スレッド
★★Java質問・相談スレッド164★★
http://toro.2ch.net/test/read.cgi/tech/1378219684/
0792デフォルトの名無しさん2013/11/18(月) 12:39:28.41
認識がおかしい
newが本体でコンストラクタはオマケ
0793デフォルトの名無しさん2013/11/18(月) 12:42:41.79
newだけで勝手に呼び出してくれるんですか?
0794デフォルトの名無しさん2013/11/18(月) 12:50:14.09
>>791
自分自身のコンストラクタ呼ぶときには付けない。
別クラスが呼び出すなら、まずない。
他はリフレクションでのnewInstanceぐらい。
0795デフォルトの名無しさん2013/11/18(月) 17:30:29.48
スーパークラスのコンストラクタって明示的に呼び出さないとダメなんすか
0796デフォルトの名無しさん2013/11/18(月) 17:34:04.72
>>795
引数なしのデフォルトのコンストラクタでよければいらない
0797デフォルトの名無しさん2013/11/19(火) 01:22:23.74
Smatraってどうよ?
0798デフォルトの名無しさん2013/11/19(火) 03:12:54.36
ArrayList list

list.get(0);
list.remove(0);

これを同時に処理はできるような方法はありますか?
0799デフォルトの名無しさん2013/11/19(火) 03:16:15.59
>>798
釣りなの?removeの戻り値って何か知ってる?
0800デフォルトの名無しさん2013/11/19(火) 03:44:23.53
自己解決しました
0801デフォルトの名無しさん2013/11/19(火) 06:23:14.29
自己解決じゃねえw
0802デフォルトの名無しさん2013/11/19(火) 13:11:30.08
俺も知らなかったw
0803デフォルトの名無しさん2013/11/19(火) 13:19:40.26
スタックから削除と同時に要素も取得とか普通の発想だろ…
0804デフォルトの名無しさん2013/11/19(火) 13:31:51.29
>>803
それはJavaでの常識でしょ
0805デフォルトの名無しさん2013/11/19(火) 13:42:45.77
スレッドセーフの幻想が健在だった頃の名残だよな
0806デフォルトの名無しさん2013/11/19(火) 16:36:36.99
まさか返してくれるなんて・・知らんかったw
0807デフォルトの名無しさん2013/11/19(火) 17:08:01.69
>>804
プログラミング全般の常識だが…
配列操作でpush/pop/shift/unshiftは当たり前のテクニックだし、
Ruby, JavaScript, Perl, Pythonなどスクリプト言語では組み込みでshift関数(配列の先頭の要素を削除して返却)が用意されてる
0808デフォルトの名無しさん2013/11/19(火) 17:14:31.63
>>172
0809デフォルトの名無しさん2013/11/19(火) 17:18:44.15
>>172はオワコン
0810デフォルトの名無しさん2013/11/19(火) 17:54:44.78
>>807
俺もそれが普通の発想だと思うが、世の中には削除と同時に取得するのが安全でないC++という言語もあるんだ
0811デフォルトの名無しさん2013/11/19(火) 18:59:40.99
でまわってるコンテナライブラリなら
スレッドセーフかどうかくらい明記してるとおもう。
0812デフォルトの名無しさん2013/11/19(火) 22:21:10.09
Queue使えよー。ArrayListの頭チョップとか何の罰ゲーム。どこがスタックなのよ。
0813デフォルトの名無しさん2013/11/19(火) 22:21:44.83
3ヶ月javaやって使って、ようやく簡単な画面作れたんだけどさ
これって、時間かかりすぎかな?
ちなみに、職業プログラマね
0814デフォルトの名無しさん2013/11/19(火) 22:25:17.83
tomcatにデプロイしたのですが、*.jarが読み込めないよーみたいなエラーがでます。
/webapps/sample/WEB-INF/libに、*jarを配置したのですが...
何でダメなんですか?
0815デフォルトの名無しさん2013/11/19(火) 22:34:12.02
>>813
ちょっと長いかな程度。注入時間わからないけど。
サーバとか組込とかいろいろあるわけで、Javaというキーワードだけで仕事取ってくる営業は無能だと思うの。言語の文法覚えるのはすぐだが、フレームワークや開発手法を理解するのには時間かかる。
0816デフォルトの名無しさん2013/11/19(火) 22:56:56.62
>>815
会社では.NETで開発しているんだけど、上からjava覚えてきてねーと言われた
だから、3ヶ月間家に帰ってきてから、一人でjavaの勉強しているわけなんだ

spring/mybatis/tomcatを作って、画面項目4個でDBへ問い合わせるプログラムを作ってみた
そしたら、進捗遅くねー?って言われた。だから、皆さんどのくらい時間がかかるのかなって思ったんだ
0817デフォルトの名無しさん2013/11/19(火) 23:02:04.86
勤務時間外に勉強してるのに泣かせる話だな
0818デフォルトの名無しさん2013/11/19(火) 23:04:03.51
>>812
一般的なスタックは動的配列のサブセットとして実装されるのが普通だからだよ
だからって動的配列がスタックの操作を提供しなきゃいけないという理屈はないが、慣習的にそうなってることが多い
.NETではスタックと動的配列は別になってて、動的配列のRemoveも値を返さないね
0819デフォルトの名無しさん2013/11/19(火) 23:21:32.22
removeが値を返すのが標準か否かじゃなくてさ
removeをAPIリファレンスも読まずに使ってるのが怖いなあって思うわ
他のメソッドとかも注意書きとかも読んでないで使ってるんだろうなって思う
0820デフォルトの名無しさん2013/11/19(火) 23:23:58.38
phpとかweb(js)からjavaに来たゆとりだとそんなところだろ
0821デフォルトの名無しさん2013/11/19(火) 23:24:55.81
感覚的に使えるものってマニュアル読まなくてもある程度使えちゃうからマニュアル読む人減るんだよね
車や家電の操作だってそう
0822デフォルトの名無しさん2013/11/19(火) 23:47:52.14
LIFOとFIFOの区別は付けとこうな・・・
0823デフォルトの名無しさん2013/11/19(火) 23:49:50.76
>>814
エスパーできねーや、残念
0824デフォルトの名無しさん2013/11/19(火) 23:55:49.00
java.nio.Buffer をなぜリングバッファにしなかったのか、残念
0825デフォルトの名無しさん2013/11/20(水) 00:06:03.54
話のネタにもならない一般の知識しか持ち合わせていないならそろそろブログでやってくれる?
0826デフォルトの名無しさん2013/11/20(水) 00:07:55.33
そのBuffer系列は全部抽象クラスでオーバーライド面倒
0827デフォルトの名無しさん2013/11/20(水) 00:10:34.90
え?
0828デフォルトの名無しさん2013/11/20(水) 00:11:59.02
馬鹿には無理
0829デフォルトの名無しさん2013/11/20(水) 00:56:58.73
java.nio.Bufferはコンストラクタ公開されてないからそもそもオーバーライドできんかったような記憶が……
0830デフォルトの名無しさん2013/11/20(水) 03:31:37.20
メジャーなアプリでのShift_JISなどの日本語文字の対応といい、Javaの公式日本語ドキュメントといい、世界は日本への配慮しすぎだは
0831デフォルトの名無しさん2013/11/20(水) 04:14:36.10
>>810
C++が使いにくいのは確かだが、
Atomicかどうかに言語関係なくないか?
0832デフォルトの名無しさん2013/11/20(水) 13:31:52.47
java8のByteBuffer, java.nioについては、もともとは配列wrapperでもあるしmemory mappedが作れるのだからCharSequence::charsと同じくstream対応の方がいい。
0833デフォルトの名無しさん2013/11/20(水) 22:05:20.55
>>831
810 ではないが、810 で言っている「安全でない」というのは
例外安全性のことであって、GC がない C++ では本質的な問題。
0834デフォルトの名無しさん2013/11/20(水) 23:04:28.14
>>833
なんでGCが?それ、ものすごく狭い範囲で言ってないか?

操作のAtomicityは実装によるわけで、
DBのトランザクションみたいに、
きちんと気をつけてないと、例外安全にはならないよ。
0835デフォルトの名無しさん2013/11/20(水) 23:13:49.81
removeの戻り値を誰かがきちんと評価してやらないと
C++でfree()するチャンスが永遠に失われるよ、と言う話でわ
0836デフォルトの名無しさん2013/11/20(水) 23:19:45.99
コピーコンストラクタが例外を投げうるということが本質であって
Atomicity は関係ない。だからスクリプト言語のようにすべての
オブジェクトをヒープにおいてコピーしないようにすれば
例外安全に pop できる。
もちろんコピーコンストラクタが例外を投げないクラスであれば
例外安全に pop できるが、テンプレートで実装されているので
C++ である以上仕方ない。
0837デフォルトの名無しさん2013/11/21(木) 00:22:18.67
stlに限っての話でしょ?
結局実装によるって事じゃん。
0838デフォルトの名無しさん2013/11/21(木) 00:30:08.08
>>832の付け足しで思い出したんだけど、charsでIntStreamを取得するだけでなく、各Bufferのバルク処理用としてforEachも欲しいなってこと。
0839デフォルトの名無しさん2013/11/21(木) 00:41:37.28
いや配列に読み出せよ
一個ずつforEachなんてやってたらクソ遅くなってバッファの意味ないぞ
0840デフォルトの名無しさん2013/11/21(木) 01:00:15.55
そうそう、配列、配列。
配列で何か引っかかって考えてたんだけど、streamは、配列で使うよりBufferでラップして、buf.intStream(); buf.forEach();がjavaぽいなと思って。
allocateDirectのときもあるし、配列に読み出すとコピーが発生するし、配列はreadonlyにできないし。
場合によってはIterable, Collectionのように、iterator, spliterator, forEachがBufferに追加された方がバルク処理にはいいかもしれない。
0841デフォルトの名無しさん2013/11/21(木) 01:07:58.32
SIMDではfloatが主役なんだからFloatStreamも追加しろよおい
0842デフォルトの名無しさん2013/11/21(木) 04:29:36.48
javaやってる人間にc++なんて理解できるわけないじゃないですか><
0843デフォルトの名無しさん2013/11/21(木) 11:36:55.05
別に理解しなくていいよ
Javaの常識がプログラミング全般で通用すると思わないでいてくれればそれで
0844デフォルトの名無しさん2013/11/21(木) 16:10:44.72
手続き型言語なら大概通用する
C++が変態すぎる
0845デフォルトの名無しさん2013/11/21(木) 21:45:39.87
CとかC++は自由度が高いからなー
色々経験しとくとおもしろいぞ。

日本語で書くCOBOLとかな
0846デフォルトの名無しさん2013/11/21(木) 23:03:42.58
streemって並列化が効果出るような何万個もあるような要素数じゃないと元々意味ないぞ。
0847デフォルトの名無しさん2013/11/21(木) 23:16:45.09
javaでは元々小手先技は通用しないから、streamは個々の処理の高速化が期待できるという代物ではないと思うよ。
0848デフォルトの名無しさん2013/11/21(木) 23:26:51.03
>>847
いや、悪い。
そうだから外部イテレータ使う処理にforEach使っても意味ないぞと>>840に言いたかったんだが安価忘れた。
やるなら無限ストリームにしなきゃ使い道がない。
0849デフォルトの名無しさん2013/11/21(木) 23:43:45.14
ん?
streamの設計目的は元々バルク処理の効率化(と多少のメモリアクセスの高速化)がメインじゃなかった?
つまり内部イテレートをしたいからstreamを導入したんじゃなかったか。
lambdaはコンカレントの煩雑コード削除と、アクセスをnew経由からmethodhandle経由に切り替えるのが目的だし、lambda,streamはそのゴールは微妙に違う。
基本型のstreamを考慮しているかどうかは知らないけど、project sumatraを見てると基本型int,float,long,doubleのstreamは必要となってくるんじゃないのかと思うけど。
日本語のブログばかり見て勉強した気になってないで、ちゃんと英語ブログとかjavaoneとかの一次二次資料もみないと、どうやって使うのか、どういうときにつかうのか全然理解できなくなるよ。
0850デフォルトの名無しさん2013/11/21(木) 23:58:18.00
一要素一操作ごとに仮想メソッド呼ぶのに速くなるわけないでしょ
相当に粒度の大きい処理でないと大幅に遅くなるよ
0851デフォルトの名無しさん2013/11/22(金) 00:01:21.88
Servletの高速化やってたとき思ったのは、ストリーム使うと
処理の途中で処理されたものから逐次転送されていって効率的になることが実感できた。
まとめて転送より遥かに早い。
0852デフォルトの名無しさん2013/11/22(金) 00:04:54.54
そりゃそうだけどw
そういう話なら別にjava8関係ないだろw
0853デフォルトの名無しさん2013/11/22(金) 00:06:33.68
C++の関数呼び出しとJavaのメソッド・コールはまったく別物と考えた方がいいですよ。
そもそもJavaではメソッドのコールは、hotなものはJITでその環境に最適化されてネイティブ・コンパイルされて、コールのコストは無しを前提(つまりこれを単位元として)として考えます。
0854デフォルトの名無しさん2013/11/22(金) 00:24:37.85
>>851はまさに逐次処理じゃん
プリミティブ型のstreamによるバルク処理の効率化がどうのとは全く関係ない
そもそもIOバウンドだろうから元々全く別の話だけど
0855デフォルトの名無しさん2013/11/22(金) 00:27:01.99
>>854
昔ストリーム指向なんて言葉があってね。そんな限定的な目的で作られたんじゃないんだよストリームは
0856デフォルトの名無しさん2013/11/22(金) 00:28:40.01
流れ切りすみません

現在、JavaでAndroidアプリを開発する研修をうけているのですが、
その中で、HTMLとPHPファイルを端末の方に送信して、
端末側でHTMLとPHPを動かすことを習いました。

そこで思ったのが、
ゲームアプリを開発すると仮定して、
複雑な処理がいらず、画面を表示するだけならHTMLで記述し、
ゲームなど複雑な処理がいる部分はJavaで書き、
サーバーにアクセスする必要のある処理は、PHPで行うという、
言語の使い分けをして、一つのアプリを作るということは、
技術的に可能でしょうか?
それとメリットとかあるのでしょうか?
個人的には、HTMLは比較的短時間で完成するものなので、
全てJavaで行うよりは負担が少ないと考えているのですが、どうでしょうか?
0857デフォルトの名無しさん2013/11/22(金) 00:38:31.43
>>856
そりゃ画面がHTMLなら基本的に全てサーバーサイドだよ
アニメーションなどで必要ならJavaScriptを使う
AndroidアプリはWebView貼るだけでJavaはほとんどいらない
最近だとリッチなゲームを作るためにクライアントをUnity(C#)なんかで作ってるのも多いね
その場合はサーバーは画面に関知しないでAPIを提供するだけだよ
0858デフォルトの名無しさん2013/11/22(金) 00:41:25.52
>>856
端末でphpを使うの? それなんてフレームワーク?
普通はサーバ側でphpにより動的にhtmlやjsonを生成し、端末へ送る。
0859デフォルトの名無しさん2013/11/22(金) 00:42:26.04
AndroidのWebViewでアプリ作るなら、中で動かすHTML+CSS+JavaScriptは
なるべくシンプルにしないとドツボにはまるよ
WebViewのバグも多いし、特にCSS周りをリッチな作りにすると死ねる
CSSアニメーションとかは期待できない

何かのクライアントアプリなら充分いけるけど、ゲームとかを
AndroidのWebViewで作るのは自殺行為
0860デフォルトの名無しさん2013/11/22(金) 00:42:54.40
>>850のようにバッファで必要一括で取って来て処理するのが、メモリキャッシュも期待できるし、その外部イテレートのブロックで処理するので関数呼び出しコストもないし、処理だけに着目した方法としては従来の単純なそれが一番理にかなってます。
しかしjavaでいう効率化とは、外部イテレートを使うと一時変数が必要になったり(代表ではfor loopのcounter変数など)、ブロック外に状態を管理したりする変数が必要になったり、メイン処理以外の下準備が必要なことが多くなりますが、
内部イテレートだとそういった状態管理はsqlのように実装任せに出来ます。
例えば>>851だと、メモ化(キャッシュ)によってコードが大幅に簡略化し、ステートフルにも出来て、作業(処理)の効率化がなった(処理コードが分離した)といえます。
これは高速化とは別の効能であり、言語・ライブラリの仕様レベルでこのような効果が簡単にできる仕組みがlambda,streamで行えるということです。
速度を求めるだけならc++でやればいいでしょうが、javaではパフォーマンスは一応考慮してますが、ネイティブでもないですしc++とは目指しているところがまったく違います。
0861デフォルトの名無しさん2013/11/22(金) 00:45:49.71
>>854
javaでもfileのmemory mappingできるけど
0862デフォルトの名無しさん2013/11/22(金) 00:57:55.43
>>857
レスありがとうございます。
講師の先生は、HTMLとPHPを区別して述べていたので、それに習いました。
そうなると、サーバーにアクセスする必要な処理、例えば、ガチャのようなランダムでキャラクターが出る、
戦闘画面で登場する敵のデータとかをPHPで受け渡して、
そのデータをクライアントに渡して、ガチャを引き当てたり、
決まったステージの敵が出てきたりという処理を行う形になるでしょうか?

Unityも勉強していますが、プログラムがわからないので、
きちんとプログラム勉強してからチャレンジしたいと思い、
まずJavaできちんとしたゲームを作れてから、挑戦したいと思います。
0863デフォルトの名無しさん2013/11/22(金) 01:03:28.49
アンドロイドはすれ違い
0864デフォルトの名無しさん2013/11/22(金) 01:07:32.07
スレ間違えてすみませんでした。
androidアプリ開発向けのスレが見つからなかったので、
こちらに質問させてもらいました。
どちらに行けばよろしいでしょうか?
0865デフォルトの名無しさん2013/11/22(金) 01:57:08.02
>>864
Androidプログラミング質問スレ Part37
http://toro.2ch.net/test/read.cgi/tech/1382430603/
0866デフォルトの名無しさん2013/11/22(金) 02:05:36.84
>>865
ありがとうございます。
早速行ってきます。
0867デフォルトの名無しさん2013/11/22(金) 09:41:53.09
配列を後ろから取り出したいのですが綺麗な方法ありますでしょうか?
for (String hoge : hoges) {
}
みたいな綺麗な書き方ができればいいのですが、添え字を計算しないと
ダメでしょうか?
0868デフォルトの名無しさん2013/11/22(金) 10:55:02.20
>>867
http://docs.oracle.com/javase/jp/1.5.0/api/java/util/Collections.html#reverse(java.util.List)
0869デフォルトの名無しさん2013/11/22(金) 11:10:09.04
Collections.reverse(Arrays.asList(hoges));
for (String hoge : hoges) {
}
0870デフォルトの名無しさん2013/11/22(金) 11:17:13.72
reverseって降順にソートされちゃいませんか?
0871デフォルトの名無しさん2013/11/22(金) 11:31:53.24
ソートはしない
順番を上下ひっくり返すだけ
もういっかいやれば元に戻る
0872デフォルトの名無しさん2013/11/22(金) 11:37:49.16
おお。すばらしいです。ありがとうございます。
0873デフォルトの名無しさん2013/11/22(金) 18:07:37.63
逆順のイテレータ使うんは古いんすかねえ
0874デフォルトの名無しさん2013/11/22(金) 19:31:50.63
>>873
そういうゴチャゴチャしたの以外がないかってことかと
0875デフォルトの名無しさん2013/11/22(金) 19:51:27.38
File.existsでfalseが返ってくるのに
mkdirsするとエラーになってしまうのってどういう原因があるのでしょうか
0876デフォルトの名無しさん2013/11/22(金) 19:53:26.26
どうせ書き込みの権限がないんだろ
0877デフォルトの名無しさん2013/11/22(金) 19:56:18.50
sがついているから。
0878デフォルトの名無しさん2013/11/22(金) 20:21:30.70
>>876
たまになんです
0879デフォルトの名無しさん2013/11/22(金) 20:29:12.07
File.existsで確認したあと、かつ、mkdirするまえ
のタイミングでディレクトリが作成されてるとか
0880デフォルトの名無しさん2013/11/22(金) 20:31:47.07
>>878
たまにが、
同じパラメータなのに、たまに起きるのか、
たまに起きるパラメータがあるのか、
によって大きく違うと思う。
0881デフォルトの名無しさん2013/11/22(金) 20:54:17.83
質問です、組み込みの方の配列(int[] など)をコピーする際は
Arrays#copyOfを用いればネイティブな性能でコピーできることを教わったのですが、
例えば、int[]型のインスタンスをdouble[]型になるようにコピーしたり
キャストするような方法は提供されてるのでしょうか?
また、もし無い場合は効率的な方法などがありますでしょうか?
(自分で考えつくのはFor文でコピーしていく程度です・・・)
0882デフォルトの名無しさん2013/11/22(金) 20:54:45.85
>>879
そんなはずはないんですよね。

>>880
同じパラメータで連番がつくだけです。

ただ共有フォルダにmkdirしてます。
0883デフォルトの名無しさん2013/11/22(金) 21:19:02.62
>>881
ない。そもそもintからdoubleに変換する必要性がわからん。
そのままintを使えばいい。
0884デフォルトの名無しさん2013/11/22(金) 21:24:29.12
>>883
それもそうですね。ありがとうございます、設計を見なおしてみます
0885デフォルトの名無しさん2013/11/22(金) 22:42:51.71
アプリケーションサーバはどこがおすすめ?
JBossは本当に人気があるのか疑問
0886デフォルトの名無しさん2013/11/22(金) 22:48:38.57
>>875
なんてエラーメッセージが出てるの?

File (Java Platform SE 7 )
http://docs.oracle.com/javase/jp/7/api/java/io/File.html#mkdir()

File (Java Platform SE 7 )
http://docs.oracle.com/javase/jp/7/api/java/io/File.html#mkdirs()
0887デフォルトの名無しさん2013/11/22(金) 22:50:34.83
お前ら職業なに?
0888デフォルトの名無しさん2013/11/22(金) 22:52:37.94
SNEPというエリート職だよ
0889デフォルトの名無しさん2013/11/22(金) 22:57:13.06
農協の工員です
0890デフォルトの名無しさん2013/11/22(金) 23:46:52.58
自宅安全警備保障に24時間臨戦態勢で在籍しております。
0891デフォルトの名無しさん2013/11/23(土) 00:14:47.77
>>885
金があればベンダーにプレゼンさせろよ
0892デフォルトの名無しさん2013/11/23(土) 02:03:34.60
>>882
共有ってネットワーク経由か。そりゃ失敗するかも。
■ このスレッドは過去ログ倉庫に格納されています