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

■ このスレッドは過去ログ倉庫に格納されています
2020/05/06(水) 22:12:08.99ID:q8N1X/Ij0
プログラミング言語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() を使え。※

質問時の心得
・コンパイルエラーか実行時エラーか、エラーではないが意図しない動作なのかはっきりしろ。あとエラーメッセージちゃんと読め。
・前提条件としてOS、開発環境、バージョン、使用フレームワーク等を明記。

前スレ
★★Java質問・相談スレッド182★★
https://mevius.5ch.net/test/read.cgi/tech/1542595026/
VIPQ2_EXTDAT: checked:vvvvv:1000:512:: EXT was configured
2020/07/19(日) 00:52:44.46ID:K8KObqvM0
>>366
要件定義から行う仕事なんてしたことも見たこともない
超下流のコーダーさん?
2020/07/19(日) 01:35:06.40ID:upLy8n3G0
兄ちゃん、なんで要件定義書とRFPを混同してしまうん?
2020/07/19(日) 06:02:10.88ID:kCSCaoIZ0
>>367
要件定義はユーザの仕事
請け負いで丸投げされてるん?
2020/07/19(日) 06:09:47.05ID:kCSCaoIZ0
要件定義は開発者がお手伝いをすることはあってもあくまでもユーザの持ち分だよ、丸投げされて自分の仕事だと思ってるだけじゃないかと
2020/07/19(日) 06:10:44.18ID:kCSCaoIZ0
>>368
どっちもユーザが書くものだよ
2020/07/19(日) 06:49:58.96ID:h1wfGu7fd
SIジジイのエクセルのお話なんてどうでもいいから言語の話してよ
どうせJava1.8すら使えない古臭いとこなんでしょ
2020/07/19(日) 07:05:46.34ID:kCSCaoIZ0
くっ・・・なぜそれを
2020/07/19(日) 09:51:11.26ID:K8KObqvM0
そんな認識だから老いたら使い捨てにされるんだと思うよ?
小さい仕事でも、ユーザの漠然とした妄想から完成させることを学んだほうがいい。
2020/07/19(日) 09:56:39.08ID:CbpSzaa/0
派遣奴隷の一時雇いのコーダーがそんな上流に関与するわけないだろ。
関与しないんじゃなくて、関与できない。無能のゴミクズだから。
2020/07/19(日) 09:58:10.91ID:K8KObqvM0
自己紹介ももう間に合ってます。
2020/07/19(日) 12:32:29.88ID:eo122ZhDd
お前も>>374で自己紹介してるじゃん
ブーメラン上手だね
378デフォルトの名無しさん (ワッチョイ ee02-PDgx)
垢版 |
2020/07/19(日) 12:59:10.23ID:OVvPblbF0
お前らリアルでもこんな程度の低い喧嘩するの?
2020/07/20(月) 20:15:25.36ID:vJ2ISq+M0
句読点マンはただのなんちゃっての荒らしだろ
仕事したことないのに雑談スレでもいっつも知ったかぶりで頓珍漢なこといってるキチガイだから
380デフォルトの名無しさん (ワッチョイ 5ab9-sTnA)
垢版 |
2020/07/21(火) 05:48:51.37ID:3tWEjcVj0
句読点で個人を識別できる、特定の人物の異なるIDのコメントを特定できていると思うのは病気
2020/07/21(火) 06:03:12.02ID:mDiZ6cR10
よぉキチガイ
382デフォルトの名無しさん (ワッチョイ 5ab9-sTnA)
垢版 |
2020/07/21(火) 07:19:22.60ID:3tWEjcVj0
俺の書き込みいくつか挙げてみて
383デフォルトの名無しさん (ワッチョイ 5ab9-sTnA)
垢版 |
2020/07/21(火) 07:34:54.50ID:3tWEjcVj0
>荒らしだろ
>よぉキチガイ

こういう発言は確実にコミュニティにとって害悪だから辞めて欲しい
2020/07/21(火) 08:17:00.45ID:mDiZ6cR10
精神病院に行こうなキチガイ
385デフォルトの名無しさん (ワッチョイ ee01-XySS)
垢版 |
2020/07/21(火) 16:58:54.04ID:NpytZS490
>>380
そこでAIですよ
2020/07/23(木) 14:26:07.44ID:EM/Nepkm0
androidでトランプのゲームを実装していて行き詰まりました
イベントループがあってupdate(delta)とdraw(Canvas,delta)を各オブジェクトが呼ぶような実装です
flashを参考にtweenerというクラスを作って
オブジェクトをtweenerに渡すとアニメーションができるようにしました
しかし、tweenerにもupdateとdrawを呼ばないといけないため
元のオブジェクトとtweenerと両方がupdateとdrawを呼ぶため
オブジェクトが二重に表示されてしまうクソ設計でした
一般にアニメーションをクラス化するのにどういう方法がありますか
並行して処理したり逐次で処理したりが選べるといいのですが
自分の頭では限界です
2020/07/23(木) 16:42:10.92ID:VwI/djxX0
androidはjavaではありません
388デフォルトの名無しさん (アウアウエー Sae3-Ar/h)
垢版 |
2020/07/23(木) 17:11:16.56ID:otdPxTIka
>>386
AndroidはJavaのようでJavaじゃないので別のAndroidスレへ行きましょう
そしてデバッガーを使って処理を追いかけましょう
2020/07/23(木) 17:17:22.14ID:XY8OSufi0
分からないから外に追いやる無能な俺たちを許してくれ
ここは学生レベルか競プロ程度のことしか分からない人達の集まりなんだ
390デフォルトの名無しさん (アウアウエー Sae3-Ar/h)
垢版 |
2020/07/23(木) 17:38:59.17ID:otdPxTIka
ええ、ご自身で原因と対処法を書かれていますのでこちらでそれ以上わかる事はございません
>>386
【原因】クソ設計でした
【対処法】
並行して処理したり逐次で処理したりが選べるといい
2020/07/23(木) 18:54:40.33ID:61Ja/AqO0
Androidスレはどこよ
392デフォルトの名無しさん (アウアウエー Sae3-Ar/h)
垢版 |
2020/07/23(木) 19:12:38.23ID:otdPxTIka
[タイトルで検索]🔍
2020/07/25(土) 11:59:44.47ID:nH9VX+zP0
リモートデバッグの場合にはHot Code Replaceは使えないんですか?
2020/07/25(土) 12:19:22.39ID:lvLHFRIva
>>393
VSCの事ならスレチ
だいたいリモートでデバッグってクライアントで起動してるのか
サーバーで起動してるのかでコンパイルしてるマシンが違うだろうに
2020/07/25(土) 12:26:01.12ID:CLKbPK7s0
Androidのことじゃないかな
だから俺は無視してたんだけど
2020/07/25(土) 12:43:18.35ID:S/hmdynOa
Android Studio だと Hot Code Swappingって言うんじゃ・・
replaceは置き換えでクライアントとサーバー間
Swapは交換でエディタとバーチャルデバイス間
どっちも似たようなもんだけど
397デフォルトの名無しさん (ワッチョイ fb01-hxF4)
垢版 |
2020/07/25(土) 12:44:14.28ID:dauW6/ij0
いやらしい
2020/07/25(土) 12:49:10.35ID:y1ZBGfCN0
VSC? Android? 何の話だ?
リモートデバッグもホットコード置換もJVMの古典的な機能だろ
リモートデバックでは置換はできないはず、大概別VMだしロードされた位置にあるclassやjar自身が変わらないし、置換できる方が不自然だと思う
2020/07/25(土) 13:19:07.58ID:nH9VX+zP0
>>394
Eclipseの話です
リモードなのでプログラムは別のマシンで起動してます
サーバーはGlassFish

>>396
すいませんJava経験浅いので色々種類があるのはシリませんでした
デバッグ中にブレークポイントで止めてメソッドの中身を修正するとすぐに反映される機能のことです

>>398
逆に言うとclassがどこに有るかわかればイケるということでしょうか?
例えば「ソース変更検知→build→rsyncでサーバーにclassを送信」する自作スクリプトとか
2020/07/25(土) 14:09:07.54ID:P/SMu1Ur0
>>393
賢い質問のしかた
https://www.ranvis.com/articles/smart-questions.ja.html
2020/07/25(土) 15:21:24.99ID:y1ZBGfCN0
>>399
クライアントだけでなくサーバー側もEclipseコンパイラでビルドしておけば置換できるらしい
http://dplatz.de/blog/2018/java-hot-code-swapping.html
ついでにここの筆者も同じことで驚いているけど、長年Javaで開発してるのにホットコード置換を知らない人は多いみたいだな
2020/07/25(土) 17:09:07.27ID:nH9VX+zP0
>>401
情報どうもです
gradle-eclipse-compiler-pluginとやらを試しましたがビルドエラー(´・ω・`)まだ先は長そうです
ちな>>399で思いついたsshでclassを送信するアイデアは効果なし
単純にclassを置き換えるだけでは意味がないみたいですね…
403デフォルトの名無しさん (ワッチョイ 5110-pSrU)
垢版 |
2020/07/28(火) 19:48:48.58ID:QYiJZeTL0
index.xhtmlとbeanを連携させてからもう一つ別のxhtmlファイル作って別のbeanクラスと連携させることってできないの?
2020/07/29(水) 16:00:54.37ID:EYlQulrhM
なんで今どきXHTMLなんか使ってんだよw
2020/07/29(水) 16:01:16.30ID:EYlQulrhM
なんで今どきXHTMLなんか使ってんだよw
2020/07/29(水) 21:54:50.30ID:XHby/Lgy0
Java EE 8
データソースを動的に決定したいんですけどなんかいい方法ないですかね?
より具体的に言うとHost、Port、User、Passwordを環境変数で指定したいです

@DataSourceDefinition ← ソースに定数ベタ書きは論外...
web.xml ← ビルド時差し替えは出来るけど実行時に変更できないのでダメ...
407デフォルトの名無しさん (ワッチョイ 4161-INOy)
垢版 |
2020/07/30(木) 10:29:37.00ID:pj6/aIsg0
System.getenv()
2020/07/30(木) 12:27:57.74ID:VqHv0XM70
spring bootを使うとデータソースの動的変更ができるみたい、知らんけど
2020/07/30(木) 12:31:52.70ID:w/yk6K7I0
bootなら設定不要で環境変数で設定できるね
JavaEEでそういうことができないのだとすると辛いな
2020/07/30(木) 18:36:24.37ID:VqHv0XM70
Java EEではbootが使えないの?
2020/07/30(木) 19:18:20.48ID:VqHv0XM70
CDIじゃだめか?
412デフォルトの名無しさん (ワッチョイ cdf1-SFhf)
垢版 |
2020/07/31(金) 15:32:38.50ID:POkjU+r00
Eclipseはじめたばかりですが
背景色を黒系にしたいのだけど
そのための設定はどこをいじればいいでしょうか?
413デフォルトの名無しさん (アウアウエー Sa22-DfbS)
垢版 |
2020/07/31(金) 15:35:04.09ID:q3J+IOFQa
>>412

Eclipse統合M36【Java/C++/Ruby/Python/Scala】 [無断転載禁止]©2ch.net
https://itest.5ch.net/mevius/test/read.cgi/tech/1503723668
2020/08/01(土) 08:05:19.17ID:ZDBQ6bpl0
皆開発環境eclipseだけどatom使ってる人いないの?
415デフォルトの名無しさん (ブーイモ MMbe-SFhf)
垢版 |
2020/08/01(土) 08:50:37.12ID:hCmXm23hM
いかなる点でatomよりVSCodeが優れていると聞いて
もうじきatomは消滅すると聞いた。
416デフォルトの名無しさん (ワッチョイ faa5-JYmi)
垢版 |
2020/08/01(土) 09:21:36.80ID:notoYvF50
M$がグループごと買収して作ったのがVSCodeじゃなかったっけ
2020/08/01(土) 16:48:59.15ID:jILzPVKB0
WebカメラからH264のrtspを受信して、mp4ファイルに出力したいです。
2020/08/01(土) 16:51:28.62ID:jILzPVKB0
>>417 途中で送信してしまったので続きです。
PureJavaならオープンソースのライブラリでも大丈夫です。
2020/08/01(土) 17:04:25.72ID:N2vdAsng0
頑張れ
420デフォルトの名無しさん (ワッチョイ fa55-xE3T)
垢版 |
2020/08/02(日) 12:36:44.63ID:hOgQnHyE0
Robert Segewick and Kevin Wayne著『Algorithms 4th Edition』では、ジェネリクスを使って、スタックを実装しています。

文字列のスタックの配列を作る時には、以下のように書かなければならないと書いてあります。

Stack<String>[] a = (Stack<String>[]) new Stack[N];

一方、Itemが型パラメータであるとき、Item型の配列を作るには、以下のように書かなければならないと書いてあります。

a = (Item[]) new Object[cap];

自然に、なぜ以下のように書かないのかという疑問が思い浮かびます。

Stack<String>[] a = (Stack<String>[]) new Object[N];

こう書かない理由が以下のように書かれていますが、これが何を言っているのか分かりません。

You might have expected to use Object instead of Stack. When using generics, Java checks for type safety at compile time,
but throws away that information at run time, so it is left with Stack<Object>[] or just Stack[], for short, which we must cast
to Stack<String>[].

何を言っているのでしょうか?
421デフォルトの名無しさん (ワッチョイ fa55-xE3T)
垢版 |
2020/08/02(日) 12:39:17.55ID:hOgQnHyE0
特に、

When using generics, Java checks for type safety at compile time,but throws away that information at run time,

の意味が分かりません。
422デフォルトの名無しさん (ワッチョイ fa55-xE3T)
垢版 |
2020/08/02(日) 12:41:56.68ID:hOgQnHyE0
ちなみに、

type safetyとは何か知りませんし、
at compile timeとat run timeというタイミングの違いによってどういう影響があるのかも分かりません。
423デフォルトの名無しさん (JP 0H62-3SEW)
垢版 |
2020/08/02(日) 12:48:47.81ID:H7597eyiH
学術の巨大掲示板群 - アルファ・ラボ ttp://x0000.net
数学 物理学 化学 生物学 天文学 地理地学
IT 電子 工学 言語学 国語 方言 など

simulationライブラリで純粋な関数式プログラミングをする
UIライブラリ (C#, 2D) を作ったよ
連続と離散を統一した!
4Dエンジン
matrixのライブラリ
ある強力なFor関数
SQLライブラリ

☆ VM + ASM を書いた (C#, DX) * x86 ではない!
ttp://up.x0000.net/files/TSimulang.zip
☆ malloc / free を実装してみた (C#)
ttp://up.x0000.net/files/TMallocTest.zip
2020/08/02(日) 13:24:35.87ID:xoqILXiMM
>>420
書籍が古いんでしょ
つ var a = new Stack<String>[N];
425デフォルトの名無しさん (ワッチョイ ce01-Nz8z)
垢版 |
2020/08/02(日) 13:47:16.78ID:HWQVFDgv0
>>424
ジェネリクスの配列は作れないんよ

>>420
> 自然に、なぜ以下のように書かないのかという疑問が思い浮かびます。
> Stack<String>[] a = (Stack<String>[]) new Object[N];

実行できないからでしょ
Objectの配列をStackの配列にキャストできないから
実行時にObjectになるのはジェネリクスの型であってStackではないです
426デフォルトの名無しさん (ワッチョイ ce01-Nz8z)
垢版 |
2020/08/02(日) 13:53:28.09ID:HWQVFDgv0
> When using generics, Java checks for type safety at compile time,but throws away that information at run time,

ジェネリクスを使うとき
Javaはコンパイル時に型の安全性をチェックします
しかし、実行時にはその情報を破棄します

と、いうことなので
ジェネリクスの型が正しいかはコンパイル時にチェックされて
実行時にはジェネリクスの型の情報はありませんよという
ジェネリクスの型のイレイジャを説明してるんだと思います
427デフォルトの名無しさん (ワッチョイ 2590-roBb)
垢版 |
2020/08/02(日) 13:54:11.18ID:5Ildc2NV0
https://docs.google.com/forms/d/e/1FAIpQLSebBwIO42wM8X7Jzv8STJvoEp4h_BjjcaMQBfY84ucao17qcQ/viewform?usp=sf_link
2020/08/02(日) 14:07:22.33ID:hOgQnHyE0
>>426
型の安全性とは、=の左右の型が一致しているということですか?
実行時には、型が安全であったかどうかという情報を破棄するというのは、どうしてそうするのですか?
なぜ、コンパイル時に行う処理と実行時に行う処理に分けるのですか?
429デフォルトの名無しさん (ワッチョイ ce01-Nz8z)
垢版 |
2020/08/02(日) 14:42:16.64ID:HWQVFDgv0
>>428
> 型の安全性とは、=の左右の型が一致しているということですか?

左右の一致もそうだけどジェネリクスの型が関わるところはすべて
Javaは静的型付き言語なので型は実行前に決まるからコンパイルが通ったら
型の不整合は存在しないってこと

> 実行時には、型が安全であったかどうかという情報を破棄するというのは、どうしてそうするのですか?

イレイジャ方式を採用してるから、なぜイレイジャ方式なのかは過去のものとの互換性のためらしい
詳しくはこのあたりを参照いただければ
贖罪のイレイジャ - プログラマーの脳みそ
https://nagise.hatenablog.jp/entry/20160520/1463744926

> なぜ、コンパイル時に行う処理と実行時に行う処理に分けるのですか?

イレイジャ方式を採用してるから実行時にキャストが必要になる
2020/08/02(日) 14:53:18.78ID:hOgQnHyE0
>>429
ありがとうございました。
431デフォルトの名無しさん (ワッチョイ a910-Hcnj)
垢版 |
2020/08/09(日) 01:04:45.45ID:yhrtA4So0
((num%31536000)/8)/86400を実行すると213になってしまうんだけど原因わかりますか?
26になるはずなんですが
432デフォルトの名無しさん (ワッチョイ 1b01-h+bK)
垢版 |
2020/08/09(日) 01:14:13.88ID:HZ7sqguG0
>>431
numの値はいくつなん?
433デフォルトの名無しさん (ワッチョイ a910-Hcnj)
垢版 |
2020/08/09(日) 08:11:57.22ID:yhrtA4So0
>>432
int num = 50000000
です
2020/08/09(日) 09:01:29.00ID:2MS+1Fma0
int
2020/08/09(日) 11:53:54.73ID:0YrfFsHe0
そもそも期待通りの値がnumにセットされてないと予想
436デフォルトの名無しさん (ワッチョイ 1b01-h+bK)
垢版 |
2020/08/09(日) 14:33:10.46ID:HZ7sqguG0
26になった
https://paiza.io/projects/guG3riR84R7AdO6vN10wRw
2020/08/09(日) 16:05:44.65ID:yOL8Hbuo0
intに意図通り設定できずorz
438デフォルトの名無しさん (ワッチョイ 13a5-w77N)
垢版 |
2020/08/09(日) 17:16:17.36ID:r8wfwf1H0
>>431
解決したか?

javaの計算についてpublic class UnixTime { private int utime;pri... - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q13229755313

java の計算についてpublic class A { private int u; private static int... - Yahoo!知恵袋
https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q11229753136
439デフォルトの名無しさん (ワッチョイ a910-Hcnj)
垢版 |
2020/08/09(日) 18:18:51.83ID:yhrtA4So0
>>438
一応解決しました
440デフォルトの名無しさん (ワッチョイ ff01-dFmy)
垢版 |
2020/08/25(火) 23:18:31.97ID:5sKkPFkq0
ジェネリクスの型引数はどうして一文字なんでしょうか?
省略せずにわかりやすく書くのが現代のプログラミングの基本だと思うのですが
いつまでJavaはわかりにくい書き方に固執するのですか?
441デフォルトの名無しさん (ワッチョイ ff01-dFmy)
垢版 |
2020/08/25(火) 23:20:48.35ID:5sKkPFkq0
型引数はクラスと同格なので、名前が一文字のクラスがあったらぶちギレでしょう
なぜ、型引数では一文字が常識とされているのかまったくわかりません
2020/08/25(火) 23:25:38.24ID:8Q4E/UJjM
char型が1文字だからじゃないの
443デフォルトの名無しさん (ワッチョイ ff01-dFmy)
垢版 |
2020/08/25(火) 23:28:49.55ID:5sKkPFkq0
>>442
い、意味が、わかり、ません
2020/08/25(火) 23:29:06.78ID:zUVX4/T30
他のクラス名と被らないから
445デフォルトの名無しさん (ワッチョイ ff01-dFmy)
垢版 |
2020/08/25(火) 23:33:06.46ID:5sKkPFkq0
たとえばLinkedListクラスはこうなってます
LinkedList<E>

どう考えてもこうすべきでしょう
LinkedList<Element>

EだけだとErrorなのかEmptyなのがEggなのかわかりませんよね
僕はわかりましたけどみなさんはわかりませんよね
446デフォルトの名無しさん (ワッチョイ ff01-dFmy)
垢版 |
2020/08/25(火) 23:34:00.11ID:5sKkPFkq0
>>444
Javaにはパッケージという仕組みがあるわけですから
クラス名がかぶっても問題ないです
2020/08/25(火) 23:58:41.15ID:foaBkBNu0
確かに一文字ってのは妙な文化だな
強いて理由を探すならこんなところ?
・ユーザー定義の型が入るワイルドカード感をどことなく醸し出したかった
・イレイジャーの存在感の希薄さをほんのり匂わせたかった
2020/08/26(水) 00:09:28.52ID:DcWpENc0M
C#ではTElementだね
普通の型名ではない感を十分に醸し出しつつも説明性を犠牲にしない優れたアイデアだと思う
2020/08/26(水) 04:24:04.60ID:B+00leH+0
>>445
Elementは既にあるし
被らないならそれに越したことはないよ
450デフォルトの名無しさん (ワッチョイ a23c-kl6l)
垢版 |
2020/08/26(水) 12:54:18.80ID:sUxjWWoe0
>>414
わしはKate+Konsoleじゃ。
451デフォルトの名無しさん (ワッチョイ 8255-1etN)
垢版 |
2020/08/26(水) 17:25:21.99ID:jQHqTTLQ0
順列組合せ関連の質問です。

例えば、{1, 2, 3, 4}の元の数が2の部分集合をすべてほしいとします。

Iteratorがループを回るたびに、そのような元の数が2の部分集合を返すようにしたいのですが、どのように実装すればいいか
分かりません。

単に元の数が2の部分集合をすべてプリントせよという問題ならばできます。
452デフォルトの名無しさん (ワッチョイ 8255-1etN)
垢版 |
2020/08/26(水) 17:37:36.24ID:jQHqTTLQ0
再帰が使えないようなのが難しい原因のように思います。
2020/08/26(水) 17:41:00.03ID:BpaQECb00
Ruby なら、この順番

a = [1, 2, 3]
a.permutation(2).to_a

#=> [ [1,2],[1,3],[2,1],[2,3],[3,1],[3,2] ]
2020/08/26(水) 17:45:55.94ID:BpaQECb00
stack だろ
>>453
では、

1 push
2 push 出力
2 pop
3 push 出力
3 pop
1 pop

2 push
1 push 出力
1 pop
3 push 出力
3 pop
2 pop
455デフォルトの名無しさん (ワッチョイ 8601-4Kjr)
垢版 |
2020/08/26(水) 21:02:49.85ID:3xqKZ5M90
>>451
再帰での書き方はわかるっしょ
まず書いてみるっしょ
https://paiza.io/projects/BB_QvDo2fNb3gOJuUSJmcw

スタックを使ってそれをループに置き換えるっしょ
スタックフレームのオブジェクトを作って値を保存すると良い
https://paiza.io/projects/g7vJtyJzqluM_Her1CxQYQ

あとはイテレータを適当にでっちあげれば完成
https://paiza.io/projects/fviG9H33Fj2X64mF5xZHdQ
2020/08/26(水) 21:06:25.84ID:El1cFvrX0
最も初歩的なインデックスを使ったイテレーションが素朴に2つのインデックスになるだけでいいのでは
イテレーターに変数leftとrightを持たせて、初期値は1と2
rightだけインクリメントしていく
rightが末端まで到達したら先頭に戻してleftをインクリメント
rightとleftが同値ならとばす
とてもシンプル
2020/08/26(水) 21:16:13.78ID:B8valtQ50
以下で "x" のところをA, B, C, Eのどれかにすると
java.util.ConcurrentModificationException
が発生するのに、Dにしたときだけ発生しないのはなぜですか?

¦ ArrayList<String> list = new ArrayList<>();
¦ list.add("A");
¦ list.add("B");
¦ list.add("C");
¦ list.add("D");
¦ list.add("E");

¦ for (String str : list) {
¦ ¦ if ("X".equals(str)) {
¦ ¦ ¦ list.remove(str);
¦ ¦ }
¦ }
2020/08/26(水) 21:35:33.62ID:SAEXbqesM
ホントだ。何ぞこれ
459デフォルトの名無しさん (ワッチョイ 82a5-oC+/)
垢版 |
2020/08/26(水) 21:41:16.73ID:70gZaOXI0
C++じゃ良く聞く話だけれどもJavaでは上手い説明サイトが無い
460デフォルトの名無しさん (ワッチョイ 8601-4Kjr)
垢版 |
2020/08/26(水) 21:52:05.32ID:3xqKZ5M90
>>457
コンパイルするとこうなるっしょ

Iterator<String> it = list.iterator();

while (it.hasNext()) {
  String str = it.next();

  if ("X".equals(str)) {
    list.remove(str);
  }
}

next()の処理で変更されたかがチェックされている
hasNextはこうなっている

public boolean hasNext() {
  return cursor != size;
}

"D"のときに値を1個削除するとcursor == sizeとなってnextが呼ばれずに処理が終了する
なので、"C"のときには値を2個削除すればエラーにならないって感じ
461デフォルトの名無しさん (ワッチョイ 8255-1etN)
垢版 |
2020/08/27(木) 06:33:50.16ID:bgNZHReb0
AとBがIterableインターフェイスを実装したクラスのインスタンスであり、
A = {1,2,3}
B = {4,5,6}
みたいになっているとします。

for (int i : A) {
for (int j : B) {
System.out.println(i + ", " + j);
}
}

を実行すると、
1, 4
1, 5
1, 6
で終わってしまいます。

Bの先頭からまた繰り返したいのですが、どうすればいいでしょうか?
2020/08/27(木) 06:34:59.81ID:bgNZHReb0
昨日質問した組合せのIteratorは解決しました。ありがとうございました。
2020/08/27(木) 06:38:27.97ID:YgLmJLaS0
A側の実装がぶっ壊れてるからだろ
2020/08/27(木) 06:39:11.36ID:bgNZHReb0
あ、リセットするような機能をつければいいみたいですね。
2020/08/27(木) 06:48:12.41ID:9xGPySdg0
>>460
ありがとうございます
すみません、理解できなかったです

ご提示いただいたように Iterator を使って以下のように書いてみたら
A〜Eどれも例外発生しなかったです

ArrayList<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");

Iterator<String> ite = list.iterator();
while (ite.hasNext()) {
String str = ite.next();
if ("C".equals(str)) {
ite.remove();
}
}
2020/08/27(木) 06:58:27.19ID:9xGPySdg0
すみません間違えてました

誤 ite.remove();
正 list.remove(str);
ですね

これだと事象再現できて、>>460さんの説明を理解できた気がします
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況