Java入門・初心者質問スレ Part.11

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん (アウアウウー Sa07-jGB0)
垢版 |
2021/06/29(火) 11:42:34.74ID:iGYT4fi4a
次スレを立てる時は本文の1行目に以下を追加して下さい
!extend:on:vvvvv:1000:512

Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.10
https://mevius.5ch.net/test/read.cgi/tech/1585721355/
VIPQ2_EXTDAT: default:vvvvv:1000:512:: EXT was configured
2022/02/06(日) 23:55:34.82ID:Yp2ViaMv0
独習Javaはどうすか?
553デフォルトの名無しさん (ワッチョイ 9fad-zD41)
垢版 |
2022/02/07(月) 02:30:14.57ID:b6RunKLB0
Kotlin もよろしく
2022/02/07(月) 06:59:39.42ID:VlGFXZxF0
>>552
旧版なら糞本、新版でてますか?
2022/02/07(月) 23:41:32.94ID:b3L+kEpa0
>>551
サンクス
でもどうせなら最新を

>>552
独習Javaは昔見たことあるけど、あまり印象に残ってない
2022/02/07(月) 23:56:42.08ID:TWNt6zjr0
>>555
吸盤独習Java なんて忘れたほうがいいですよ、ハーバード・シルトの本にしなさい…
2022/02/08(火) 22:59:01.06ID:PIdUK9FC0
あとは電機大が出してる厚い本とか
2022/02/12(土) 08:24:36.57ID:L9XEDv670
質問です
乱数を得るための方法は主にjava.util.Random()またはMath.random()の2通りあると思うんですが
なぜjava.util.Random()の方はMath.random()と違ってstaticではないのでしょうか?
それとint x = Math.random(n, m); でn以上m以下の整数を得るみたいにしたいんですけど
これを実現するには自分でメソッドを用意する必要がありますか?
2022/02/12(土) 09:00:22.02ID:KQlQ75KL0
>>558
ドキュメント嫁

https://docs.oracle.com/javase/jp/8/docs/api/java/lang/Math.html#random--

https://docs.oracle.com/javase/jp/8/docs/api/java/util/Random.html
2022/02/12(土) 10:05:52.17ID:aqVglo+b0
学校の課題かな?
ランダム値生成のアルゴリズムは最初にシードを与えて値を複数回取り出すという内部状態を保持する操作なのでstaticは合わない
またサブクラス化してアルゴリズムを置き換えられるデザインになっている
クラス設計に慣れないうちはstaticが便利に感じるけど、後からMathのアルゴリズムを置き換えたいと思い立ったときにStrictMathのような似て非なるクラスを作るハメになったりする

整数を得るのはメソッド作るのがいいね
掛け算してから端数を切り捨てて最後に最小値を足す
2022/02/12(土) 15:40:29.63ID:63ijDjoD0
>>559-560
返答ありがとうございます!
大変参考になりました
562デフォルトの名無しさん (アウアウアー Sa6e-lJHB)
垢版 |
2022/02/12(土) 19:08:23.72ID:PUK1mMLna
コンピューターはランダムというのが苦手ですからね。
2022/02/12(土) 19:24:12.62ID:8ted8XK+0
確か、Java の乱数は、線形合同法だから偏るだろ

Ruby のRandom は、メルセンヌ・ツイスタ・MT19937、
SecureRandom は、/dev/urandom または、OpenSSL
2022/02/12(土) 19:26:57.53ID:38y+ETg9r
MTも200個くらい連続して同じシードの値を取得できれば次を予測できるとか
565デフォルトの名無しさん (ワッチョイ a701-piVT)
垢版 |
2022/02/12(土) 20:56:52.34ID:kBzBXJs50
C++は選んで組み合わせ。
テンプレートでスタティックに。
2022/02/16(水) 19:32:30.84ID:H+eMlsPeM
javaからjnaでcのdllを呼び出した時のmain()ってjna側に取られてるんでしょうか?
main()からしか正常に扱えないライブラリを使おうとしていて、困っています。
ラッパー噛ませても何でもいいですので、jna呼び出しでc側のmain()をハンドリングする方法があれば教えてください。
2022/02/17(木) 15:33:23.38ID:opMSV7ie0
リンカの仕組みわかってなさそう
568デフォルトの名無しさん (ワッチョイ 12ad-rCQD)
垢版 |
2022/02/18(金) 23:26:24.54ID:EylFm52t0
main()からしか正常に扱えないライブラリ?
どういうライブラリだそれ?
2022/02/19(土) 22:57:01.76ID:Oy5N7IRS0
質問です
JavaSE11Silver黒本の204〜205ページにあるメソッドの可変長引数の解説で
(int... num, int value)のように宣言するとどこまでが第1引数でどこからが第2引数なのか判断できませんが、
(int value, int... num)のように宣言すると第1引数と第2引数以降が区別できます とありますが、
可変長引数が複数ない限り前者のパターンでも第1引数と第2引数は区別できる気がするんですけど
先に位置が確定してる引数を当てはめて残りを可変長引数として処理するみたいな逆算はできないってことでしょうか?
2022/02/20(日) 00:00:49.60ID:XdacCmOfM
できるよね
原文読んでないけどたぶん説明が良くないんだと思う
単にシンプル志向なので可変長引数は最後の引数でしか定義できないという言語仕様なだけだと思う
途中に置けるからといって変なところに置かれてもスゲー読みにくいし保守しにくい
2022/02/20(日) 01:16:34.47ID:URWJGBg90
>>570
返答ありがとうございます
納得できました
2022/02/24(木) 10:32:06.60ID:M77OcTbQ0
intellJでjava Enterprise プロジェクトを作成したんですが、サンプルページのHello ServletのURLクリックすると要求されたリソースが〜の404エラーになります。
javaファイルが読み込めてないっぽいのですがファイルの配置が悪いのでしょうか?
アプリケーションサーバーはtomcatです。
どなたか教えて下さるとありがたいです。
2022/02/24(木) 19:45:53.21ID:Egr6Ec660
そんなマイナーなIDEは誰も使ってないから知らんわあほ
2022/02/26(土) 21:26:52.21ID:lcZINIkB0
スッキリの次はどの本読んだらいいか教えてくれませんか?
2022/02/26(土) 22:38:15.58ID:xS/SyeLk0
スッキリのservlet編か
その次はspringあたりか
2022/02/27(日) 00:39:11.36ID:1rka99/l0
>>575
ECサイトを見てみます
ありがとうございました
2022/03/05(土) 05:07:33.50ID:UJmt72ot0
StreamAPIについて質問です
一つのStreamに対して終端処理が1回しかできないのはどういう理由からなのでしょうか?
共通の中間処理に対して複数の終端処理を行いたい場合一旦Collectionに戻してから
それぞれの終端処理に対して再度.stream()で再変換するのが手間に感じるのですが
2022/03/05(土) 09:29:53.13ID:GtenIzBYM
>>577
minとmaxなんかは両方呼びたいという感覚はわかる
でもfindFirstとreduceは共存できない
findFirstを先に呼ぶと要素が見つかったらストリームが終了してしまうし、reduceを先に呼ぶと一つにまとめられてしまう
Streamの仕組みとユースケース的に妥当
共存させるための一般化した方法は二つ思いつく
一つは終端処理の直前で器に一旦溜め込むやり方
まさにcollectで終端させることと同じ
varとStream.toList()が使えれば多少は書きやすくなる
もう一つは複数の終端処理を引数にとり、すべての処理の気が済むまで委譲するという終端処理を用意すること
調べたらCollectors.teeing()というメソッドがJava12から導入されてた模様
2022/03/05(土) 09:38:57.36ID:suTSuZtU0
>>577
ストリームだからとしか。
Streamの元が、もしかしたらネットワークの向こう側から順次流れてくるデータかもしれないわけで、そうなると一度読み取って処理した値をもう一度使うにはメモリ上に溜めておくとかしないといけない。なので、一度Listにするとかが必要になる。
2022/03/05(土) 09:42:36.47ID:suTSuZtU0
>>577
ちな、minとmaxの両方を一度に欲しいとかなら、summarizingIntとか使えば可能。
https://docs.oracle.com/javase/jp/8/docs/api/java/util/stream/Collectors.html#summarizingInt-java.util.function.ToIntFunction-

あるいはreduceとかで自分で集計すれば、一度でも色々できはする。
2022/03/05(土) 10:46:22.36ID:ijTxjZdoM
https://udemy.benesse.co.jp/development/system/java-if-else.html

>>Javaでネスト(入れ子)したif文の使い方

>> if( num1 > 5 ) {
>> System.out.println("5〜15の間");

×:(num1 > 5)
○:(num1 >= 5)

×:udemy
○:usomy

Java以前の問題
2022/03/05(土) 11:08:53.14ID:T37B/JxU0
>>578-580
返答ありがとうございます
とても詳細で解りやすく仕組みまで含めてすんなり理解できました
2022/03/05(土) 12:00:38.16ID:YJGHHadX0
多態性について質問です

https://paiza.io/projects/UevdJ8eMt3M3RHe7IEHBPQ
上のコードで、24行目のa.method();を実行した際に、
なぜサブクラスのメソッドが呼ばれるのか分かりません
確かに参考書にはそう書いてあるのですが、21行目のA a = b;を
実行した瞬間に変数aはサブクラスの情報がそぎ落とされてしまうような気が
するのですが…
2022/03/05(土) 12:55:32.36ID:E5axBTdN0
>>583
スーパークラスだからイメージがわかないのかもしれないけどインタフェースでイメージしたらわかりやすいかな
インタフェースは実装を持たないけど左辺の型としては使えるよね
だとしたら実装はどこになるのかといったら右辺のインスタンスにある
これも同じで左辺はスーパークラスの型だけど実態は右辺のインスタンスだから動くのも右辺のインスタンスの処理
2022/03/05(土) 15:36:27.34ID:YJGHHadX0
>>584
レスありがとうございます
ではサブクラス型の変数をスーパークラス型の変数に代入する時には、
サブクラスとしての情報は残したまま代入されるという解釈でよろしいでしょうか?
2022/03/05(土) 16:09:21.61ID:GtenIzBYM
Aに代入したからといってBがAに化けるわけじゃないよ
BをAとして認識するというニュアンス
例えば車両クラス(A)から派生した戦車クラス(B)のインスタンスをnewで一台生産したとする
戦車(B)であると知っている上官が前進しろと命令したら運転手はキャタピラで進む
ただの車両(A)としてしか認識してない交通整理員が前進しろと命令しても同じようにキャタピラで進む
動作するのはあくまでnewされて実体を得た本人
ただし車両としてしか認識してない人からしたら、砲撃メソッドを実装していることを意識してないので呼び出せない
でも車両クラスのメソッドをどう演じるかは本人の実装次第
2022/03/05(土) 16:10:37.95ID:tv2gNRUqM
おそらく変数に代入っていうイメージが間違ってる
参照型のイメージができてなさそう
2022/03/05(土) 16:57:36.99ID:ucLsxDYZ0
>>587
俺もそう思う
2022/03/05(土) 16:59:54.39ID:ucLsxDYZ0
>>588の続き

参照型はイメージ的にはC言語のポインタみたいなものかな
実際には別物だけど
変数よりは近い
2022/03/05(土) 17:39:28.28ID:YJGHHadX0
>>586-589
ありがとうございます

難しいですね
確かにその辺りの理解はあやふやになっています…

結局、先の例では、スーパークラスA型の変数aがサブクラスB型のインスタンスbを
参照する時、Bでオーバーライドした(元々Aで定義されている)メソッドは、
Bに基づく動作内容で呼ぶことになり、Bで新しく定義した(Aにはない)メソッドは
aからは呼べなくなるってことですよね?
2022/03/05(土) 18:01:27.61ID:E5axBTdN0
>>590
Eclipseとかのエディタのコード補完(.を打った時に呼び出せるメソッドが出てくるやつ)では
A型として識別されるからaからは呼べないように見える。
2022/03/05(土) 18:04:49.47ID:E5axBTdN0
途中で投げてしまったすみません。

だけど、実態としてはあるからリフレクションであれば呼び出せる。
2022/03/05(土) 18:15:28.23ID:ucLsxDYZ0
>>590

> >>586-589
> ありがとうございます
>
> 難しいですね
> 確かにその辺りの理解はあやふやになっています…
>
> 結局、先の例では、スーパークラスA型の変数aがサブクラスB型のインスタンスbを
> 参照する時、Bでオーバーライドした(元々Aで定義されている)メソッドは、
> Bに基づく動作内容で呼ぶことになり、Bで新しく定義した(Aにはない)メソッドは
> aからは呼べなくなるってことですよね?

大体合ってると思う
ただ、> スーパークラスA型の変数aがサブクラスB型のインスタンスbを の部分が違う気がする

あまり詳しくはないけど、まずnewで生成したオブジェクトのアドレスに相当するものがaに入る
そして、そのオブジェクトの動きはnewした方のクラスから見たものになる
だけど、動かすことのできるメソッド等は「親クラスにあるものだけ」になるね

継承した後のクラスは直接動かせない
もちろん、メソッド内で間接的に呼び出すとかなら可能だけど

簡単に言えば、mainメソッドとかのオブジェクトを動かす方からすれば「親の方で考える」ってこと
上のやつだとAの方にあるものだけ使える

デザインパターンのFactoryパターンのように、生成するメソッドで生成するって考えるとわかるかも
2022/03/05(土) 21:14:30.65ID:YJGHHadX0
>>591-593
ありがとうございます

>>593
えーとですね、俺頭が弱いので全部は理解出来なかったです…
2022/03/05(土) 22:07:38.34ID:ucLsxDYZ0
>>594
うーん、別に頭の良し悪しじゃなくて、単にイメージがしづらいだけじゃないかな

概念的なこと聞くより手を動かした方がいいかも
俺もいろんなとこで聞いたけど理解できずに、デザインパターンをやったりいろいろ工夫して手を動かしたらすんなり理解できるようになったし

まずデザインパターンのFactoryパターン辺りをやってみて?

Parent obj = new Child();
という生成をFactoryパターンでやると、
Parent obj = Factory.Create();
のような感じになるはず

そしたらこのobjを動かす方は内部でChildでnewしているかどうかは見えないよね?
単にParent型である保証しかされてない
でも言い換えると「Parentにあるメソッドはと持ってる」だよね?
実際の処理はオブジェクトであるobjが知ってるからobjに紐付いているメソッドを動かす

オーバーライドしてる場合は直近の「自身で再定義した方」
と解釈され、オーバーライドされてない場合は直近の「親の方」と解釈される
だって「自身で再定義した方」はないからね

そしてobjを動かす方からすれば(Childでnewしていようと)Childかなんてわかんない
だからChild独自のメソッドは使えない

もちろん、C#だとasとかでキャストしたりすれば(Childで生成しているなら)Child独自のメソッドも使えるけどね

FactoryMethodパターンはFactoryパターンの拡張版だからFactoryパターンを理解してみて)
2022/03/05(土) 22:11:54.81ID:ucLsxDYZ0
>>595だけど、すまん
C#じゃなくてJavaだったね

asみたいなキャスト をダウンキャストして とかみたいに読み替えてね
2022/03/07(月) 00:20:26.58ID:UdMygMD90
>>595-596
丁寧にありがとうございます
2022/03/08(火) 10:00:08.97ID:fDKm90VIM
バッファってなんや
2022/03/08(火) 10:22:50.69ID:HM66xeZmM
音楽の父や
2022/03/08(火) 10:49:04.07ID:fDKm90VIM
バッハじゃなくて……
2022/03/08(火) 11:02:44.47ID:44N8vijo0
>>598
文脈次第だとは思うけど「変数や配列のこと」だと思う
Stringとかみたいな
2022/03/08(火) 12:02:51.15ID:HM66xeZmM
イメージ的にダムとかコンデンサとかみたいな何かを貯めておくものを指すよ
ダムに水を貯めておけば日照りが続いても安定して水が飲めるし、川上が増水しても川下の村が水浸しにならない
しょぼい乾電池でも電流をコンデンサに貯めれば強烈なフラッシュを炊ける
プログラミングの場合も同じ
典型的には、ネットワークから受信したりプログラムで動的に生成したデータをファイルに書き込みたいときとか、互いの読み書き速度が違う2つのデータの流れがあるとき、互いの性能差を埋めつつ資源を有効活用する(読み書き回数を減らしたり専有時間を最小化する等)ときとかに使う
2022/03/08(火) 17:48:34.50ID:mkTZ49v/0
例えばファイルを読み込むときにFileStreamのバッファサイズが1Mだと
ディスクから1M読み込んで処理してまた1M読み込むから効率が悪くなる。
バッファサイズを100Mにすればディスクから100Mまとめて一気に読み込むから効率が良い。
でも、その分メモリを消費するから性能とメモリのトレードオフ。
604デフォルトの名無しさん (アークセー Sx4f-kpC5)
垢版 |
2022/03/09(水) 12:05:39.48ID:BxY0cuLtx
java初心者です。初案件でjavaのマイグレーションとのことで入ることになりました。
現状これ以上の情報がまだはいっていません。
Javasilverは独学にて取得済みです。
これって経験としてどうなんでしょうか。どなたか教えて頂きたいです。
よろしくお願いします。
2022/03/09(水) 13:17:42.06ID:YihDzyuxM
>>604
そもそもマイグレーションって何だかわかってますか?
606デフォルトの名無しさん (アークセー Sx4f-kpC5)
垢版 |
2022/03/09(水) 17:03:56.48ID:BxY0cuLtx
>>605
ありがとうございます。
いえ、あんまりわかってないです。ネットで調べた程度で
活用中のシステムを別の環境やバージョンへ「移行すること」
だそうで、リプレイスとは違うとかなんとか。
現行のシステムから移行計画をたてて、テストして、本番環境
に切り替える程度の認識です。
これって上流工程なのかテストもあるし、そんなにスキル
がつくのかもわからないです。
一応まだ断ることもできるんですが、
何かしらアドバイスいただけたらありがたいです。
2022/03/09(水) 21:18:10.88ID:y0Y93q++M
Javaのバージョン上げるだけとかならそれなりに出来ることありそうだけど
それ以外ならテスター要員だろうな
2022/03/10(木) 08:01:42.64ID:Uh43IBqs0
到達不能コードのコンパイルエラーについて質問です
JavaSE11Silver黒本の3章18問に下記のコードの結果を答える問題があり、答えは「Cが表示される」なのですが
このときnum = 10ならば必ずCが表示され、Dは絶対に表示されないため
到達不能コードでコンパイルエラーが発生する気がするのですが
ifの判定文まで到達可能ならば例えばif(false)であってもその中身は到達不能コードには当たらないのでしょうか?
int num = 10;
if (num == 100)
System.out.println("A");
else if (10 < num)
System.out.println("B");
else
if (num == 10)
System.out.println("C");
else
if (num == 10)
System.out.println("D");
609デフォルトの名無しさん (ワッチョイ 9fd1-OYGG)
垢版 |
2022/03/10(木) 08:13:43.65ID:bRBcjGmR0
あくまで補助機能だからね
判断はご自分でとうぞ
2022/03/10(木) 08:25:16.02ID:9QpyAq00M
そういう仕様のはず
テスト的に処理の冒頭で例外を起こしたいとき if (true) throw Exception(); みたいに書ける
2022/03/10(木) 09:12:34.07ID:Uh43IBqs0
>>609-610
返答ありがとうございます
自分でコードを書けばエラーが発生するかどうかは明らかですが
試験でunreachable codeが発生するかどうか問われた時は内容次第なので
状況毎に暗記する必要があるということですか?
612デフォルトの名無しさん (ワッチョイ 9fd1-OYGG)
垢版 |
2022/03/10(木) 09:18:54.74ID:bRBcjGmR0
解らない問題に答える必要あるの?
経験者むけサービスかもよ?
2022/03/10(木) 10:15:57.73ID:Sbdp6iYa0
素直に言語仕様読め

ttps://docs.oracle.com/javase/specs/index.html
ttps://docs.oracle.com/javase/specs/jls/se17/html/jls-14.html#jls-14.22
> 14.22. Unreachable Statements
>
> It is a compile-time error if a statement cannot be executed because it is unreachable.
>
> This section is devoted to a precise explanation of the word "reachable."
> The idea is that there must be some possible execution path
> from the beginning of the constructor, method, instance initializer, or static initializer
> that contains the statement to the statement itself.
> The analysis takes into account the structure of statements.
> Except for the special treatment of while, do, and for statements
> whose condition expression has the constant value true,
> the values of expressions are not taken into account in the flow analysis.
2022/03/10(木) 10:31:00.79ID:Uh43IBqs0
>>612-613
ありがとうございますとても参考になりました
規則をよく読んで理解を深めたいと思います
615デフォルトの名無しさん (アークセー Sx4f-kpC5)
垢版 |
2022/03/10(木) 10:43:42.56ID:gMDgr+Ggx
>>607
ありがとうございます。なるほど、
テスター要因ですか。
今のところ言語をJavaへ変更するとのことで
バージョン上げるではなさそうです。
2022/03/10(木) 14:00:24.98ID:Pbl5vAiZM
>>611
そんな細かいところまで覚えなくても試験受かるよ
2022/03/11(金) 20:56:48.66ID:dOzyUYLo0
>>607

>>606はテスターも務まらないだろう。
奴は自分が楽をするために結果を捏造するでしょう。
2022/03/12(土) 17:05:26.26ID:d2Iz9kMm0
質問です
https://paiza.io/projects/b4a4wtvE8DNSwj1jy0ciTg
上のコードの7行目の出力結果がab, aになる理由が分かりません
str2はstr1と同じものを参照しているので、str1の参照先が変われば
str2の参照先も変わると思うのですが
2022/03/12(土) 17:23:02.54ID:UYsDHEDe0
こういうC/C++のポインタ、文字列定数、newとかの理解なしにJavaだけやろうとすると間接参照の構造が理解できなくて分からんくなるよね
JavaのStringクラスはイミュータブルといって内容を途中で変更しないポリシーになっている
正しいかは知らんけど下記のような意味になる
String str1=new String("a");
String str2 = str1;
str1=new String(str1 + "b");
文字列結合演算子は新しいStringクラスを生成する
str1とstr2は結果として異なるものを指しているのでab,aとなる
2022/03/12(土) 17:57:26.72ID:GGUhV+6j0
str2
str2 = str1 の時点で新たな領域を確保してるんじゃないかな
str2 = str1 の直後にデバッガで str1 の値を変更しても st2 の値が変わらない
文字列の足し算をしたときに str1 が別の領域を指すようになるというのはその通りだけども
2022/03/12(土) 18:20:39.50ID:GGUhV+6j0
間違いでした。str1 に文字を足した時点で str1 が別の領域を指すようになるが正しいですね。失礼しました。
2022/03/12(土) 19:13:53.68ID:Pwg7r5DPM
> 同じものを参照しているので、str1の参照先が変わればstr2の参照先も変わる

これが誤解
参照先が一緒に変わることはない
もしそんなことが起こる言語仕様なら、一時的に同じものを参照させていたけど、後からまた別々のものを参照させたい、という操作ができなくなってしまう
2022/03/12(土) 21:48:07.71ID:d2Iz9kMm0
>>619-622
回答ありがとうございます

>>618のコードの4行目ではstr1とstr2は同じアドレスを参照していて、
6行目でstr1の参照先だけが変わり、str2は変わらず同じアドレスを指している
という理解でいいですかね?

https://paiza.io/projects/5peEJB86LZ16u2cgEFvEgA
int型変数の場合も同じような挙動になるようですね
2022/03/13(日) 12:26:10.29ID:1xjzmzRe0
>>623
プリミティブ型は値そのものを持っているから
そのレベルなら基礎の本を最初に読んだ方がいいと思う
2022/03/13(日) 18:43:53.11ID:sEX+LZN60
>>624
ありがとうございました
2022/03/14(月) 22:21:25.59ID:0OByol6E0
スレチだったら申し訳ないのですが、imgui-javaをM1 macで使うことって可能でしょうか?
githubのissueに「I won't support it macOS arm64」とあるので既にダメそうではあるのですが…

issueで報告されているエラーではなくCan't load library: libimgui-java64.dylibというエラーが出たのみだったのでどうにか解決できないかなと感じてます
2022/03/15(火) 08:26:03.34ID:7JI7znBe0
↑ですが解決しました
お騒がせいたしました
628デフォルトの名無しさん (ワッチョイ 095f-vveo)
垢版 |
2022/03/15(火) 17:44:34.36ID:xLirFsOB0
try{
 処理
} catch(ArrayIndexOutOfBoundsException e){
 処理
} catch (IOException e) {
 処理
} finally{
 処理
}
上記のプログラムで
ArrayIndexOutOfBoundsExce
IOException
を問わずexceptionが発生したら実行したい処理があります
何か良い方法はありませんでしょうか
catchは処理の都合でわざと分けています
2022/03/15(火) 18:25:38.65ID:Cmsuiz4vM
共通処理をprivateメソッドに切り出して双方から呼ぶ
2022/03/15(火) 20:51:31.95ID:2TepCKpy0
>>628
3個目のcatchにException eとすれば?
2022/03/15(火) 21:13:33.30ID:w32P7zDl0
>>628,624
ああ、そういうことね
IOExceptionとかの親(継承や実装する前のやつ)で受け取ればいいはず
632デフォルトの名無しさん (ワッチョイ 095f-vveo)
垢版 |
2022/03/15(火) 22:12:25.19ID:xLirFsOB0
>>630
exceptionは共通して処理したいんですよ
種類に関わらず
ioとか決まったのは一部処理を追加したいのです
2022/03/15(火) 22:28:50.19ID:7LI6bjmj0
>>628
>>629の方も書いてますが、例外処理用にメソッドを用意しておいて
双方のcatchブロック内で呼び出すのが良いのでは?
2022/03/16(水) 00:10:57.72ID:94N7KM3GM
finallyで例外発生判定して処理をいれるかな
2022/03/16(水) 09:42:24.80ID:sDB+P2C+0
>>634
やっぱそうだよなぁ
俺でもそうするかも
フラグを保持してIOExceptionのときにtrue,デフォではfalse

finallyでフラグが立っているときだけ独自の処理
かなぁ
2022/03/16(水) 10:14:39.11ID:Cxe0x8xaM
まぢか
637デフォルトの名無しさん (ワッチョイ 7979-8qwV)
垢版 |
2022/03/16(水) 10:29:07.64ID:DqmOUHXz0
} catch(ArrayIndexOutOfBoundsExce | IOException e){
 if(e instanceof ArrayIndexOutOfBoundsExce){
 
 } else if(e instanceof IOException){
 
 }
 /*
 共通の処理
 */
}
2022/03/16(水) 10:57:20.37ID:vuvQrc+kM
いやこんな問題にフラグはやめようよ…
脱初心者しようぜ
if文なしで表現できるコードにif文を使わないのは可読性維持のセオリー
関数の各種メトリクスが改善する

finallyの中に置くのもやめよう
それが本質的にfinallyに書くべき処理でない場合は書かないでくれ
その例外処理の中でさらに例外が出たときに、本来必ず実行されるはずだったfinallyのリソース解放などが実行されなくなってしまう
2022/03/16(水) 11:02:02.05ID:vuvQrc+kM
変数の数を減らす、if文を減らす、どっちも改善の定石なんよ
フラグは手っ取り早く動くコードを書くのに便利だけどgotoのようにスパゲッティを招く諸刃の剣
2022/03/16(水) 14:15:12.53ID:sDB+P2C+0
>>637,639

え、catchするときって、複数の例外ってできたんだ…
(本当に知らなかった)

それができるのならそっちを選ぶかな
639が言うようにできるだけ変数を減らしたりするのがベターだろうけど、catch( MyEx | TestEx e ) 的なものができること自体知らなかったからC#みたいに別の例外でラップして再送するか、finallyで分岐させるかしか思いつかなかったわ…

複数例外をcatchできると知っていたらそっちの方を書いていたかも
2022/03/16(水) 14:16:57.11ID:sDB+P2C+0
640の追記でJava SE 7以降で追加されたやつっぽいね

https://docs.oracle.com/javase/jp/7/technotes/guides/language/catch-multiple.html
2022/03/16(水) 16:03:46.18ID:FemHJp4N0
>>640
一種の多態性だね
2022/03/16(水) 16:29:45.19ID:SGyptLP1M
catchは処理の都合でわざと分けてるって言うからマルチキャッチは知ってて使えないケースのお題かと思ったわ
privateメソッドに切り出すのは何が嫌なんだろ
複雑化する感覚があるのかな
2022/03/16(水) 17:09:10.32ID:3w6VtJRl0
>>640
C#も似たようなことできるよ
2022/03/16(水) 17:35:36.75ID:V6fjUOMTM
サンプルだからなのかもしれないが
IOExceptionとIndexOutOfBoundsの2つだけを一つのcatchにまとめるのは種類が違いすぎてかなり違和感がある
2022/03/16(水) 17:45:45.22ID:prpzjaFx0
JavaSE11から存在する単一のソースファイルならばコンパイルを介さずに
>java Main.javaで直接起動できる機能についてお聞きします
下記のページの解説だとソースファイルと同名のクラスファイルが既に存在している場合には
エラーが出るとあるのですが、自分で試してみたところMain.classが既に存在する場合でも
>java Main.javaで直接起動してもエラーが出ずに正常に終了します
自分の解釈が悪いのか仕様が変更になったのか教えて欲しいです
https://openjdk.java.net/jeps/330
2022/03/16(水) 18:11:27.06ID:sDB+P2C+0
>>644
みたいだね
648デフォルトの名無しさん (ワッチョイ 8dba-8k9/)
垢版 |
2022/03/17(木) 17:52:11.09ID:efbJz0WM0
ttps://pastebin.com/auZDmFp7

矢印キー(上か下)を押下した際に、道路の幅がズレる(滑らかなでない)状況です。
y座標の計算に問題があると思うのですが、どのように修正したらいいのでしょうか?
drawPolygon()は整数をとるのでdoubleが使えない状態です。
2022/03/18(金) 22:04:29.65ID:q2/HZ4bm0
↑もう見られない
650デフォルトの名無しさん (ワッチョイ 51ba-Ww1w)
垢版 |
2022/03/19(土) 11:34:53.69ID:BPQikdeF0
>>649
再度アップロードしてみました。
ttps://pastebin.com/28pAYitY
2022/03/19(土) 15:33:58.19ID:4fsbAAf/0
Threadクラスについて質問です
volatile修飾子とsynchronized修飾子の使い分けがよく分かりません
どなたか教えて頂けませんか?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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