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

■ このスレッドは過去ログ倉庫に格納されています
2018/06/07(木) 20:17:08.87ID:N8MsK2gr0
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.7
http://mevius.5ch.net/test/read.cgi/tech/1515549964/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured
2018/09/29(土) 11:36:49.65
>>556
ありがとうございます!
答えを聞けば
あーそういう事か・・・
て感じですね、
2018/09/29(土) 16:05:20.80ID:uDDRPkb/M
>>555
ほーそうなんですね、勉強になりました
例えばパッケージとクラス、クラスとコンストラクタ、クラスとメソッドでMap作るとしたら、それぞれをListでまとめた方が管理しやすそうだなぁと。
559デフォルトの名無しさん (ワッチョイ 1bb6-nDc3 [111.90.2.101])
垢版 |
2018/09/29(土) 17:00:45.25ID:JVLIweBX0
>>558
パッケージとクラスは
1つのパッケージに複数のクラスが存在するっって
関係だからキーをリストにしたい理由がよくわからない

こういうキーのリストが欲しいわけじゃなく?
https://paiza.io/projects/XAUg69Mv_3KueQ9s626nQA?language=java
2018/09/29(土) 23:05:55.82ID:uDDRPkb/M
>>559
パッケージをListにする必要はないと思いますが、
パッケージjava.utilとクラス一覧
クラスjava.util.Dateとメソッド一覧

…書いてたら確かにキーはListにする必要なかった。
ありがとうございます。
561デフォルトの名無しさん (ワッチョイ 1b9f-aemA [175.134.57.7])
垢版 |
2018/09/30(日) 00:37:07.97ID:KPqVv5wd0
>>554
こんなのでもできる。これの場合は空白は1文字以上なら何文字でも良い。

String[] list = line.split("\\s+(g10\\s+)?");

ま、正規表現のパターンをどうするかの問題だな。
2018/09/30(日) 21:24:58.06ID:OqFePz/nd
わかんねー。
難しい
2018/10/01(月) 11:44:20.66ID:HXCGmwtoM
すっきりシリーズ実践編7章の練習問題なのですが、突然showMemory();というのが出てきて入力してもエラーになります。
ググっても出てこないのですが、これはいったいなんですか?
564デフォルトの名無しさん (ブーイモ MMeb-XcJu [163.49.203.127])
垢版 |
2018/10/01(月) 13:41:26.81ID:uzbdAfRPM
>>563
ググってだめなら
なぜハゲらないんだ?
2018/10/01(月) 17:20:14.70ID:0G+l/MVn0
>>563
著者か出版社にメールしろ
2018/10/02(火) 18:03:42.82ID:hoDCY76ca
>>563
なんですかと言われてもその本のどこかに書いてあると思う
567デフォルトの名無しさん (ワッチョイ eb80-LozN [153.177.171.243])
垢版 |
2018/10/03(水) 11:00:45.93ID:gJy1D1hJ0
>>521
Linux でのやり方

zip形式の、archive ファイルを解凍する

unzip archive.zip

gunzipコマンドは、gzip形式とcompress形式の、圧縮ファイルを解凍する。
-r で、そのディレクトリ内の、すべての圧縮ファイルを解凍する

gunzip -r ディレクトリ名
2018/10/03(水) 11:57:09.38ID:gJy1D1hJ0
>>563
意味のわからない練習問題なんか、無視すれば?

時間の無駄
2018/10/03(水) 14:57:43.46ID:9+VVYKLPd
難しい
2018/10/03(水) 15:53:09.08ID:daSHmcx9M
クラス分割せず変数に代入してってやつしかできない

複数クラスに分けて引数渡してってやつのやり方がわからないよママン
引数がない場合は◯◯を表示するプログラムを作りなさいとかいう練習問題を出されてるんですが
意味がよくわかりません
引数なかったらコンパイルできないじゃないですか
2018/10/03(水) 16:00:58.28ID:daSHmcx9M
よくわかんないけどsetうんたらとかgetうんたらを使えばいいの?
2018/10/03(水) 16:05:11.87ID:K7uCuHqGM
>>570
何言ってるのかわかんないから問題全文転載して
2018/10/03(水) 16:16:07.98ID:daSHmcx9M
◯◯日後の日付と曜日を表示しましょう

引数に◯◯日後の◯◯を設定その日付y/M/dと曜日を表示
100日後なら100を受け渡し?
引数がない場合はシステム日付を出してくださいっての

俺もよくわかってない
int型の変数Xに100を代入して
100日後は2019/01/11/金です
と表示するだけなら
みたいなやり方でクラスが1個しかないようなプログラムなら本を参照してやっとこさ
できたんだけど
引数のことが全然わからないので困ってます
2018/10/03(水) 16:21:17.36ID:9+VVYKLPd
>>573
問題ってどこで
もらってるの?
2018/10/03(水) 16:32:27.87ID:daSHmcx9M
引数ってルールがややこしくてよくわからないのでmainメソッドで用意した変数でやっちゃってます
2018/10/03(水) 16:49:04.16ID:daSHmcx9M
mainから 引数(50) を渡して50日後の日付を出すのは出来たんですけど

引数がない場合っていう問題の意味がよくわかんなくて
渡す引数のカッコの中になにもなかったらエラーになって動かないじゃないすか
2018/10/03(水) 17:16:08.08ID:SKbAf1Wk0
これで解決
https://www.javadrive.jp/start/member/index6.html
578デフォルトの名無しさん (ワッチョイ d1b6-nDc3 [220.208.88.117])
垢版 |
2018/10/03(水) 20:47:47.84ID:3B507mk50
>>573
引数取らないメソッド作るだけっしょ
579デフォルトの名無しさん (ワッチョイ af9f-XQ2D [175.134.57.7])
垢版 |
2018/10/04(木) 03:42:19.04ID:9/syaOEb0
>>573
その引数って実行時のコマンドラインで渡す引数のこと?
もしそうなら main() に渡される String の配列だよ。
2018/10/04(木) 04:32:34.81ID:FXwcGLCc0
「java コマンドライン引数」で検索!
2018/10/09(火) 17:05:00.58ID:pvyGknIYM
SwingのJTreeで表示される内容をソートしたいのですが、一般的な方法はあるのでしょうか?

ユーザーがデータを登録してJTreeに表示されるようにするのですが、今の知識で出来るのが
登録されるデータをリストにして、登録を行う際にリスト自体をソート→JTree再生成
なんですが、
JTree自体を簡単にソートする機能などはありますか?
2018/10/13(土) 21:42:43.90ID:iFv8AOW0d
switch文のcase部分で正規表現は使えない感じですかね
2018/10/13(土) 23:10:37.09ID:LdRaeBfZM
>>582
Javaにそんな気の利いた機能はない
584デフォルトの名無しさん (ワッチョイ 7b9f-pYQO [175.134.57.7])
垢版 |
2018/10/14(日) 00:49:24.63ID:rKkXAekW0
たとえあっても結局は if で一つづつ調べていくのと同じコードに展開されるだけだろうから見た目が分かりやすくなるという以上の意味はないと思う。
2018/10/14(日) 09:56:40.69ID:ROu9whYDd
なるほど、わかりました
2018/10/14(日) 10:13:31.10ID:r97sA0Aya
>>584
正規表現リテラルが言語に組み込まれているなら、コンパイラが頑張れば
1パスで全てのcaseの正規表現をテストするステートマシンを生成することは普通に可能でしょ
2018/10/14(日) 11:35:15.37ID:3YFeE/uw0
数値型とか文字列型だと排他性が保証されてる、
例えばその数値が0であれば、その数値は0以外のあらゆる数字ではない事は自明なわけだけど、
正規表現だと、ある正規表現にマッチする文字列が
他の正規表現にマッチしない事は必ずしも自明ではないから switch とは馴染まないんじゃないかね?
588デフォルトの名無しさん (アウアウカー Sab5-GU/K [182.251.240.6])
垢版 |
2018/10/15(月) 11:06:57.69ID:eGRIdNe6a
そう。上から順番にマッチするかを調べて行ってマッチした所から実行するというコードにしかできないので if で書いたのとほぼ同じにしかできない。
違いはbreakがなければ下に抜けるところぐらいかな。
2018/10/15(月) 20:02:25.84
ギンギラギンにさりげなくー♪
2018/10/16(火) 09:16:47.63ID:LIpnDMBF0
javaってクロスプラットフォームだからどのosでも実行できる!!
って言うけど他の言語も実行できるよね?
どこが違うの?
2018/10/16(火) 10:32:57.81ID:hibLU9vcd
コンパイルでできるファイルが各OS専用か、そうじゃないかみたいな感じじゃなかったっけ
2018/10/16(火) 10:38:15.43
javaをネガキャンするなー!
2018/10/16(火) 12:28:26.08ID:2ObsWyDna
それ20年前の売り文句だからな
当時としては多分プラットフォーム間の互換性で抜きん出てたんじゃないの、知らんけど
594デフォルトの名無しさん (ワッチョイ 13d2-7vHE [27.139.3.34])
垢版 |
2018/10/16(火) 12:59:45.83ID:iEAeFl+H0
>>590
他のは各OS用に再ビルドが要る
最近はC#もいける場合が多いが
バイナリ互換でGUIまでできるのは未だにJavaだけ
595デフォルトの名無しさん (アウアウカー Sab5-GU/K [182.251.240.40])
垢版 |
2018/10/16(火) 13:11:22.61ID:0QUQFWONa
仮想マシン上で動くからコンパイルしてバイナリを作ればそのバイナリを他のマシンの仮想マシン上で同じように動かせるということ。

ただし現実はOS毎の仮想マシンに違うバグがあったりして中々うまくいかなかったりする。

それとプログラム作る側も気を付けてないとうまく行かない事がある。例えばファイルのディレクトリの区切り文字がUNIX系OSとWindowsでは違うとかね。
そういう違いを考慮して作れるようにはなっているが考慮しないプログラムも作れるようになっている。
2018/10/17(水) 11:21:17.67ID:5AnSWZbJa
そもそもpythonだのRubyだのは各OSごとにコンパイルという概念がないから、
そこらへんが当たり前になった今ではいまいちピンとこないのも無理はない
2018/10/17(水) 12:08:39.22ID:TU0+elbq0
同じjavaでもバイトコードコンパイルしたバージョンが違うと呼び出し失敗するとかな
2018/10/17(水) 12:30:38.33ID:tHw/Qu/EM
>>594
それは間違い
JavaはJREが正式に廃止されたから、今月からはクライアントアプリについては
各プラットフォームに向けて個別にランタイムを同梱したパッケージをビルドする必要がある
599デフォルトの名無しさん (アウアウカー Sab5-GU/K [182.251.240.19])
垢版 |
2018/10/17(水) 12:46:57.34ID:8efdFbKLa
>>596
内部的には似たようなもんだよな。Perlも実行時に素早く中間コードにコンパイルしてから実行してるし。
600デフォルトの名無しさん (ワッチョイ b1e3-zuq5 [218.231.167.225])
垢版 |
2018/10/17(水) 16:58:25.10ID:8mlz8GGc0
$ ./Hage.java
Hello, ハゲ!
2018/10/18(木) 20:24:57.59
パイザのBランクになれました。
2018/10/18(木) 21:36:17.32ID:CSkK3ONp0
あー。あの問題解くやつか。そういやこの頃やってなくてすっかり忘れてたが今見たら俺もBだった。
トロフィー3つだって。
2018/10/18(木) 23:09:40.13ID:8EKXnxGLa
ほんの数日前にJavaの勉強を始めたものです
自宅PCでも環境を整えようとJDK11とかいうものを入れてからEclipseをインストールしたのですが動きません
上のレスを少し読んだところJREが廃止されたと聞きました(たしかに本の解説と違ってJDKインストール時にJRE云々がありませんでした)
学校もEclipseなので使えないと本当に困るのですが私はどうすればよいのでしょうか?
604デフォルトの名無しさん (ワッチョイ 82d2-CW5R [27.139.3.34])
垢版 |
2018/10/18(木) 23:26:55.18ID:r8wg0Ock0
>>603
本に書いてあるのか学校と同じバージョンでやればいい
2018/10/18(木) 23:54:35.05ID:8EKXnxGLa
>>604
ありがとうございます
学校は8だったのでとりあえず11アンインストールしてそのようにしたらなんとかなりました(アンインストールもレジストリのあれこれですぐには出来なくて苦労しましたが)

ググったら結構深刻な問題なんですね
とりあえず今はどうにかなりましたが今後が心配です
2018/10/19(金) 00:28:28.89ID:UgWipG/ea
Java8入れたなら今後重大な脆弱性が見つかってもパッチが提供されない可能性があるから、
今や存在そのものがセキュリティホールであるJavaアプレットは必ず無効にしておくこと
あと今月からは開発以外の用途で使ったら(Java製の5chブラウザとか)ライセンス違反だから注意ね
2018/10/19(金) 00:53:41.40ID:9Ye0KfSK0
paizaよりAtCoderの方がいいぞ
2018/10/19(金) 23:40:19.01ID:QtXhI67L0
あー。サウジの件は経済的にも影響があるからWBSでも報道することになったか。
2018/10/19(金) 23:40:43.25ID:QtXhI67L0
ごめん。誤爆。実況に書いてるつもりでここに書いちゃった。w
2018/10/20(土) 00:54:54.45
俺はお前を許す
611デフォルトの名無しさん (ワッチョイ 2e9f-Fc6z [121.111.15.11])
垢版 |
2018/10/20(土) 20:52:13.49ID:7w/MX7TC0
ブリッジパターンについてのこのヤフーブロはこのページからおもろいし、ためになるわ。
https://blogs.yahoo.co.jp/kamyu_2010/35442561.html
2018/10/20(土) 22:48:08.58ID:wp9EeO+Ya
Javaのデザインパターンの解説なんか腐るほどあるのによりによってなぜこんなバカっぽいのをチョイスしたのか
本人乙?
2018/10/21(日) 10:29:55.80ID:iKutjjfua
何このゴミ記事は
晒し上げのつもりなん?
2018/10/21(日) 12:40:49.44
不細工なコードしか書けない。
(涙)
2018/10/21(日) 14:07:53.47ID:2oCbSQP00
デザパタどころか継承も使ってないうちのシステム
共通化もなく同じコードを数百のソースにベタ書きしてるんだけど
目眩がするわ…
616デフォルトの名無しさん (ブーイモ MMa2-hSSp [49.239.70.39])
垢版 |
2018/10/21(日) 17:19:25.72ID:6w48E+U+M
よくわかってないけど
転職の面接で継承じゃなく委譲だ!
617デフォルトの名無しさん (ブーイモ MMa2-hSSp [49.239.70.39])
垢版 |
2018/10/21(日) 17:20:57.22ID:6w48E+U+M
と力説しまくれば受かりますか?
みんなあまりできる人いなそうなら面接官にもつっこまれないかな。
618デフォルトの名無しさん (ブーイモ MMa2-hSSp [49.239.70.39])
垢版 |
2018/10/21(日) 17:22:05.37ID:6w48E+U+M
理解してない面接官のプライドもあるから
よし、君は合格!となることを期待して
2018/10/21(日) 17:28:03.33ID:SPKWiuHwd
Java固有じゃないかもですが質問させて下さい
(x==1|x==3|x==100)
みたいに左辺が同じ論理式って簡略化して表記する方法ありますか?
620デフォルトの名無しさん (アウアウカー Sa89-dUTK [182.251.132.225])
垢版 |
2018/10/21(日) 17:28:07.59ID:TsGKjBTxa
使えない奴が入る率が高過ぎたら、そいつの責任になるから、流石にそれなりに勉強してると思うぞ。。。
少なくとも中小は人事なんて無いから、開発責任者とかが面接官する。
大企業も1人くらい分かる奴を面接官に入れるだろ。

ろくな面接官がいないのは派遣会社くらいじゃ無いか?

百歩譲って入れたとして、使い物にならなかったら陰湿なイジメが待ってるぞ。(経験者談)
2018/10/21(日) 17:30:21.04ID:PQvzxFzPM
>>615
レベルの低い現場で継承使ってると最悪だぞ(俺はレベルに関わらず全ての実装継承はクソだと思ってるが)
全部ベタ書きの方が遥かにマシ
622デフォルトの名無しさん (ワッチョイ 81b6-/3OO [220.208.88.117])
垢版 |
2018/10/21(日) 18:16:07.43ID:3Lw0xmRE0
>>619
こういう書き方なら時々やる
List.of(1, 3, 10).contains(x)
Stream.of(1, 3, 100).anyMatch(i -> i == x)
2018/10/21(日) 18:20:52.15ID:SPKWiuHwd
>>622
なるほど、配列を自分で定義したりするよりはスマートな感じですね
有り難うございます
2018/10/21(日) 18:45:27.07ID:gNVlu9Yw0
>>616
>継承じゃなく委譲
最近、この問題はコンストラクタの記述能力に依存することがわかってきました
継承を使う場合、Java のコンストラクタで書ける内容が C++ のコンストラクタでは書けない、ならばおしなべて委譲にするしかない、と
625デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.128.174])
垢版 |
2018/10/21(日) 19:45:35.27ID:0dWokXAIa
>>619
swith使えばいいのでは?

swithはbreakさせなければ下に抜けるからな。

switch (x) {
case 1:
case 3:
case 10:
 System.out.println(x);
}

なんていう風に書いとくとxが 1, 3, 10 の時だけ出力するよ。
2018/10/21(日) 23:36:03.78ID:2oCbSQP00
>>620
大手ユー子に転職したけど面接のときに技術わかるやつ一人もいなかったぞ
現場離れた部長と人事だけ
Javaほとんど出来ないけどあっさり採用されてしまったわ
独立中小の方が職人多かったよ
2018/10/21(日) 23:48:18.28ID:SPKWiuHwd
>>625
冗長になりそうでswitchは敬遠してましたが意外と視読性良さそうですね
有り難うございます
2018/10/22(月) 04:20:27.70ID:UcRlErit0
bronze取ったら現場探したほうがええんか?
未熟さで迷惑かけて対人ストレスとか抱えるくらいならsilverくらい取ってからにしようかと思うんだけど
いやまぁ資格と現場で使えるかが別物ってのはとりあえず置いといてよ
629名無しさん@そうだ選挙に行こう! Go to vote! (ブーイモ MM0d-hSSp [210.149.251.242])
垢版 |
2018/10/22(月) 08:37:05.02ID:gS6quPUmM
bronzeは「わたしはjavaができません」と申告してるようなもんだから
書かないほうがよいのでは?w
630名無しさん@そうだ選挙に行こう! Go to vote! (アウアウカー Sa89-dUTK [182.251.132.225])
垢版 |
2018/10/22(月) 10:01:40.15ID:3rTgJh0aa
>>626
現場離れた部長が技術分かる奴なんじゃないの?
別に特定の言語を知らなくても何か一つ言語使えてれば、他の言語の文法覚えるだけで即戦力(扱い)だし。

本当に未経験でも結果的に使える奴になれば良いけどね。
2018/10/22(月) 12:21:35.68
abcdeの末尾がeならokと出力したいのですが
↓では期待通りにならないのですが
どうしたら上手くいくか教えて下さい。

String word= "abcde";

if(word.matches("e$"))System.out.println("ok");
2018/10/22(月) 12:24:08.82ID:mTnahwQV0
/.*?e$/
とかかな
2018/10/22(月) 12:43:07.54ID:DMneX9TO0
これだと動くから、なんかはしょりすぎてるんでは?

String word = "abcde";
if (Pattern.compile("e$").matcher(word).find())
System.out.println("ok");
2018/10/22(月) 12:55:50.18
ありがとうございます
修正して
if(word.matches(".+e$"))System.out.println("ok");

で期待通りになったんですが、
これでもいいのかな。
635デフォルトの名無しさん (ワッチョイ ee80-6qH8 [153.177.171.243])
垢版 |
2018/10/22(月) 18:59:00.82ID:u6NjsIb00
Ruby でやったけど、文字列が、"e" だけの場合に「.+ .*」で違いがある

"e".match /.+e$/
#=> nil

"e".match /.*e$/
#=> "e"
636デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.136.44])
垢版 |
2018/10/22(月) 19:08:12.53ID:8WYgXfgna
>>635
*は直前の文字が0文字以上で+は直前の文字が1文字以上なのでそうなって当然だと思う。
2018/10/22(月) 19:53:44.41ID:HK8Vf3a+0
あ*
あ+
覚えられたら楽しそう。
638デフォルトの名無しさん (ワッチョイ 81b6-/3OO [220.208.88.117])
垢版 |
2018/10/22(月) 20:46:03.82ID:Ohiki0Rb0
式の評価順について教えてください
下記のプログラムで
カッコが先に処理されて
DECBAと出力されると予想したのですが
実際はABCDEと出力されました
これの仕様が書かれたドキュメントを教えてください

public static void main(String[] args) {
 int[] a = new int[1];
 a[getValue("A")] = getValue("B") + (getValue("C") + (getValue("D") + getValue("E")));
}

static int getValue(String s) {
 System.out.println(s);
 return 0;
}
2018/10/22(月) 21:48:42.82ID:zi5Z/69B0
普通に言語仕様読むのが一番早い。

英語読めるなら本家
https://docs.oracle.com/javase/specs/
古いのなら日本語版もある
http://www.y-adagio.com/public/standards/tr_javalang/
2018/10/22(月) 22:06:15.12ID:u6NjsIb00
>a[getValue("A")] = getValue("B") + (getValue("C") + (getValue("D") + getValue("E")));

(getValue("C") + (getValue("D") + getValue("E")));
これは、"C" + "D" + "E" → "CDE"

getValue("B") + "CDE" → "BCDE"

+ 演算子は単に、文字列の連結だろ
641デフォルトの名無しさん (ワッチョイ 81b6-/3OO [220.208.88.117])
垢版 |
2018/10/22(月) 22:09:05.28ID:Ohiki0Rb0
>>639
それのどこに書いてあるのか教えて欲しいのです
642デフォルトの名無しさん (ワッチョイ 81b6-/3OO [220.208.88.117])
垢版 |
2018/10/22(月) 22:09:45.42ID:Ohiki0Rb0
>>640
文字列は表示してるだけで戻り値はintですよ
2018/10/22(月) 22:24:12.06ID:zi5Z/69B0
>>641
英語の方ならExpressions、Evaluation Order、
日本語の方なら式、評価順序のあたりを読めばいいよ。
644デフォルトの名無しさん (ワッチョイ 81b6-/3OO [220.208.88.117])
垢版 |
2018/10/22(月) 22:29:43.80ID:Ohiki0Rb0
>>643
ありがとうございます!ありました!
2018/10/22(月) 22:57:47.71ID:u6NjsIb00
ああ、文の評価順序を確かめたかったのか

たぶん左から評価して、その値を、( )の優先順位で足していくのだろう

a[0] = 0 + (0 + (0 + 0))
a[0] = 0 + (0 + 0)
a[0] = 0 + 0
a[0] = 0

これは、知っていないとマズイ。
漏れも、知らなかったけど
2018/10/23(火) 01:01:39.75ID:IQhrGGp+d
インクリメントの前置後置とかな
647デフォルトの名無しさん (ワッチョイ 069f-d4gP [175.134.57.7])
垢版 |
2018/10/23(火) 01:37:49.72ID:SDpmiZwh0
>>645
元の質問は括弧の中から計算していきそうなのにそうではなかったので仕様が知りたかったということだよ。
2018/10/23(火) 02:55:50.13ID:SDpmiZwh0
>>631
それ実際に実行されるのはこれだ。
java.util.regex.Pattern.compile("e$").matcher(word).matches()
最後の matches() は java.util.regex.Matcher クラスのメソッドだ。
ドキュメントには「領域全体をこのパターンとマッチします。」と書いてある。
全体とだ。つまりパターンには前後に隠された ^$ が最初から入っているような状態になる。
なので例えば word が "e" ならマッチするが e の前後に一文字でも何かあればマッチしない。
だから ".*e$" だとマッチする。(というか最後の $ は不要)

grep コマンドへ与えるパターンみたいにやりたい場合は Matcher クラスのインスタンスで find() したりするしかない。
2018/10/23(火) 07:18:01.29ID:e9JCNKc90
これでもOKかな。

if (word.endsWith("e"))
650デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.133.223])
垢版 |
2018/10/23(火) 11:26:07.55ID:QwHjyvjPa
>>649
正規表現不要ならそっちの方が分かりやすいな。
2018/10/23(火) 12:28:50.46
ありがとうございます
勉強になります。
652デフォルトの名無しさん (ワッチョイ ee80-6qH8 [153.177.171.243])
垢版 |
2018/10/24(水) 02:19:49.67ID:2LYWqLo00
>>638
Ruby で以下を実行したら、ABCDE の順番になった

ary = [ ]

def getValue ( str )
puts str; 0
end

ary[ getValue("A") ] = getValue("B") + ( getValue("C") + ( getValue("D") + getValue("E") ) );
2018/10/24(水) 08:47:38.46ID:XKgg3tJUa
()は決して先に計算するという意味ではなく、結合の優先順位を変えるんだよ
a = (b + c) + f(x) は、=, +についてもそれぞれを引数2つの関数とみると
=(a, +(+(b, c), f(x))
というツリー構造になる
これをどういう順序で評価するかはいくつかやり方があるが、
Javaや糞Ruby糞を含む多くの言語では正格評価と呼ばれる方式が採用されており、これは外側の関数から内側の順に式を評価する
引数リスト中での評価順序は言語によって様々だが、Javaの場合は原則的に左から右の順に評価する
2018/10/24(水) 10:14:03.79ID:hDrHSdWT0
public class test {
static int n = 2;
public static void main(String[] args) {
System.out.println(getValue("A") * (getValue("B") + getValue("C")));
}
private static int getValue(String s) {
System.out.println(s);
n++;
System.out.println(n);
return n;
}
}

A
3
B
4
C
5
27

かっこの中が先に実行されていたら、5 * (3 + 4) = 35
2018/10/24(水) 11:58:03.23ID:yjyY64DY0
助けて下さい、パイザ恐怖症です。
2018/10/24(水) 12:14:05.89ID:wgd96425M
おっぱいざ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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