★★Java質問・相談スレッド183★★
■ このスレッドは過去ログ倉庫に格納されています
プログラミング言語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 >>256
行や列と同じでブロックも要素数9のコレクションとして表現すればいいんでは?
javaだと少し面倒くさそうなのでpythonの例で
https://ideone.com/9vaTYC 9X9の配列から縦一列、横一列、3X3のブロックを取り出すルーチンが大事やで。 mementoというAndroidのDBを使っています
主キー(プライマリキー)の設定がないようで
javaで書くしかないようです
過去のレコードで最大の物に+1ずつしていく、というのはどう書くのですか? Set<Integer>に一票だけど、本質的には要素のソーティングだと思う。配列とかソーティングをうまくすると、Set<Integer>より少し速くなるかも。 俺のレベルだと
switch(row){
case 0: case 1: case 2:
blockrowstart =0;
break;
case 3: case 4: case 5:
blockrowstart=3;
break;
って分けていく案を出すのでやっとだった
Set<Integer>でどうやればいいのかわからない
というか未経験でIT業界入って1ヶ月もたたないうちに挫折しそう 数学的に抽象化して考えれば、写像であることは明白。
写像が分からないなら、大学で写像と集合論を勉強すれば? 行列の基本法則も知らなかったのにずい分偉そうだな。 ビンソート使って
int[] b=new int[10];
for(int i=0; i<a.length; i++){
for(int j=0; j<a[i].length;j++){
b[a[i][j]]++;
}}
ってやれば、この後b[1-10]のチェックをしても、配列アクセス18回位で重複検出できる。 ラムダ式とか考えたやつは死ねばいいと思うんですけど
使ってる方たちはやっぱ難しい構文使えてるおれカッコイとか思ってるんでしょうか? >>272
軽薄なラムダ野郎かそうでないかを識別する良い質問がある
「ラムダ式で不動点コンビネータを記述できる者のみラムダ式を使うがよい」 >>272
良いソーティングのプログラムを作った後で、比較の仕方をちょこちょこ変えたい時、どんな方法を取る? 俺もラムダ式あまり好きじゃないなあ
書くのは楽なんだよIDEの補完機能があるから
だけど後で見直したときに変数名だけで型が分からないからコード読みにくいなあって思う
変数名にマウスカーソル合わせればIDEの機能で型がポップアップ表示されるけどね
コード読みながらそんなことしててバカらしくなっちゃった >>274
ただのStrategyの話で、それがラムダかどうかなんてどうでもいいことじゃん。 VBおじさんやCOBOLおじさんがオブジェクト志向なんて分かりにくくなるだけだ必要ない!って怒ってるのと同じ構図?
卵から孵ったときに最初に何を見たかだけの域を出ないなら微妙な話
ストラテジーのような頻出のデザインパターンがスッキリ簡潔に書けるだけでも嬉しいじゃん
慣れてないとStreamでビックリしちゃうし読むときにペースが落ちると思うけど、それでもifとforで書いてあるよりステップ数も圧縮されてるんだから別に損してないと思うぞ 実は根深い問題なんだよなあ
高階関数を活用したプログラミングというのは、企業のプログラミング研修やIPAの試験など、現在の日本のプログラミング教育システムでは基本的に全く出てこない概念なんだよ
VBおじさんやCOBOLおじさんがまともな構造化プログラミングやオブジェクト指向プログラミングができないのは「不勉強な馬鹿」で片付くのだが、
高階関数がわからないのはそもそも教育システムに無いからという大義名分があって、仕方のないことだとも言えてしまう JavaScriptやってりゃ嫌でも覚えるだろ
んで今どきJS教えない会社なんて存在せん 必要に応じて高階関数を自作できたり
関数を受け渡ししたりできるかどうかって
言語に関係なく脱初心者の重要な試金石
JavaはまあアレとしてCなら関数ポインタ、C#ならDelegate
使ったことないけどCOBOLにも関数ポインタはあるらしい delegateはJavaのメソッド参照じゃないですかね >>281
いやー、高階関数の概念無いと
プログラム作るの大変だと思うよ。
でも、言語によっては無理なのかなぁ?
私が知る限りでは・・・それができない言語を知らない。
私が知らないだけかもしれないけど 高階関数って言うとあれだけど、GUI的にはただのリスナでしょ?
いうほど習わないかな… Java8以降は簡潔に高階関数を表現できるようになっただけで
Java7以前のJava脳でもインターフェース使って高階関数と同等のことが実現できるから
それを理解して使いこなせてる人はだいたい初心者の域は脱してる
抽象度が1つ上がるからJSみたいな言語を使ってたとしても初心者のうちは少し難しい 代入文に伴ってコードが呼び出される事なんてないよね?
代入文実行直後にコードが呼び出されてるようで、そのコードで例外が出て、
例外発生個所の周辺ではブレークポイントが無視される。
スタックトレース出るけど代入文から呼び出されてる事が書かれてないし
これはEclipseのバグか? v1 = v2
みたいな単純な行で、実行直後に別のメソッドが呼び出されて例外が出る。
ステップ実行で確認したし間違いない。
その例外のスタックトレースもおかしいし
クラスファイルが破損してるとかそういうバグが出ているとしか思えない たぶんどっかのブレークポイントプロパティにコードが書かれてて
バグでそのブレークポイントの実行箇所がずれてたとかか ビルド後にソースを編集したり切り替えたりしたとき、ソースとビルド結果の行がずれることはよくある >>272
そりゃ後から拡張して使えるようにした言語だから余計にそう感じるだけでは?
ということで Kotlin もよろしく。 Kotlinとか考えたやつは死ねばいいと思うんですけど
使ってる方たちはやっぱ新しい言語使えてるおれカッコイとか思ってるんでしょうか?
せっかくAndroid開発にJavaをマスターしつつあるのに、また変な言語が主流になったらその学習コストがでかすぎる。 PHPでいいのにアホが考えたRuby
WindowsでいいのにMAC
Wordでいいのに一太郎
AndroidでいいのにiPhone
かな入力でいいのに打つ回数が無駄に多いローマ字入力
アホのせいで頭のいい人が無駄にコストを背負う。 Kotlinを考えたのはJetBrainsだぞ
死んだらIntelliJ IDEAがなくなるだろうが! 初めてのアンスタからKotlinを始めて3日目くらいから、コレは楽チンて感じだったよ、
型宣言の書き方は慣れないと気持ち悪いけど
各種言語良いとこどりして記述の簡略化この流れいいんじゃないかな?
本格的に仕事で使えないだろうけど
Kotlinが主流になって欲しい今日で6日目 初心者だから解説サイトとかよく見るけど
Kotlinしか載ってないことが多い
Kotlin読めないから難しいわ >>300
自分も初めて6日目の初心者なので
何処で読めなくって詰まるのかが知りたいです
何処でつまらなくなりますか? Kotlinにおけるクラス、プロパティ、コンストラクタ、データクラス、シングルトン (1/3)
https://www.atmarkit.co.jp/ait/spv/1804/02/news009.html
このページくらいの内容なら分かるけど次の
SwiftとKotlinの構文比較 (2) 〜クラス、列挙体、構造体、プロトコル、拡張
https://qiita.com/y-some/items/286fb15fe8e0bd9aa5ef
こんなページになると何やってんのかさっぱりちんぷんかんぷんです。 結局後ほどの保守運用を考えるとScalaとかKotlinを使うぐらいならJavaかGoが良いよねってなる
ScalaとKotlinはとにかく使える人が少ないから誰も改修できない属人化うんこシステムになりがち Scalaは既に死んで負債化してるしなあ
Kotlinは事実上Android専用みたいなもんで寿命短いからまあいいとしても、今だとRustあたりはやばそう Androidでよく使われるのならじわじわとKotlinプログラマー人口は増え続けるということだよ。
まあでも大多数の他の人と同じのを使いたいみたいなのはいかにもヘタレで保守的な日本人って感じだよね。寄らば大樹の陰って感じか。そして思い切り牛後となると。
「俺が徹底的に使いまくって世界中に広めてやる」ぐらいの勢いのあるやつは居ないのか?居ないんだろうな。まあ日本に居なくても他の国にいるから良いんだけども。 徐々にFlutterに移行してるからKotlinはやばいよ >>305
アホ。
わたしはすでにマルチプログラミング言語sのマスターだから
これ以上中途半端な言語が増えてよけいで無駄な学習コストを消費したくないのだよ。 Java経験者がKotlin覚えるのなんてコストのうちに入るのかな
言語仕様を覚えるコストは微々たるもので、大変なのは膨大なクラスライブラリ群を覚えることだと思うんだが
英語の基本文法は簡単に覚えられるけど単語の学習は果てしないような話で ラムダ式は多分消滅する
数年後に迷惑な過去の遺産になるよ
システム統括する開発するメンテする運用する立場からしたらこんな迷惑なもの無い
理解しにくく可読性も良くない、一部のPGだけがマスターしてる構文なんて
そんなもの使わないでくれって思うよ JSで画面まわりのみで使うならともかく
ビジネスロジックでそんなもの、冗談でしょ 簡単なロジックを簡単に書けるってだけじゃん
マスターもクソもないよw
どんだけレベル低い会社なんよ カッコイイなあ
さぞかし優秀なエンジニアが揃ってる会社なんだな
是非日本のIT業界を背負って立って貰いたい
いい会社に在籍できて羨ましいなあ ラムダ式は微妙だけどOptionalは良いと思う
そんでOptionalを上手く使うには結局ラムダ式も必要なんだ ラムダ式の必要性はコーディングしてたら分かる。
10台の頃の俺でもクロージャの必要性を認識してたからな。
それが分からんってどんなレベルなんだと。
一方でちゃんとエラーメッセージが出ない場合があるのでまだ周辺ツールが成熟してるとは言えない。
あとシリアライズ・デシリアライズもしないほうがいいからコーディング上の注意点は多い。
なんにせよラムダ式は必須だし、ほとんどの主流言語で採用されつつあるんで
Cでもクロージャ書くライブラリあるし
自然消滅なんてとんでもない。
Javaの流行推移をみるとJava8実装後に急激に利用者が増えてる。
ラムダ式実装でようやくまともな言語になったという評価を得て、かろうじて今も生き残ってるんだ。
ラムダ式が無かったら見捨てられてただろう。 >>310
わかりました。つまりあなたはこう言いたいのですね。
「ぼくには難しくてわからない」 お前らってなんで煽りあわずに普通に会話できないの? >>310
大抵のプログラミング言語には備わってる機能なのに今更消えるわけ無いだろ。無学さを恥ろ
javaの言語仕様はモダン言語の中で最もシンプルかつ洗練されたうちの一つなのにそれすら満足に扱えないとか低能にも程がある でも最近Javaも無駄に複雑化してきてると思う
varも良くない。Recordもまあ要らんかな。
var v = method(); これだとvの型がぱっと見分からん
JPMSも面倒なだけで何の役にも立たないし
日付クラスは無駄にごちゃついてるし
SwingとJavaFXでGUIフレームワーク乱立感あるし
これが最もシンプルだっていうなら、簡単に超えれる Javaで型推論使うぐらいなら動的型付け言語使うわ var i = 0;
これはint iなのかInteger iなのかどっち?まあintか?
でも複雑な型推論が行われてIntegerとして使われてる部分があればIntegerなのか?
var使わんからわからん。 やっぱvarあかんな
var i =0;//int
var i2 = getIntegerMethod();//Integer
var i =0;//int
i = getIntegerMethod();//int なんでSEは黒本があるのにEEの試験対策本はないの? 推論された結果が格納されるだけで何でも入る箱じゃないのだから何もおかしくないだろ。
あとvar i = 0のほうはリテラル0の型を考えなよ >>317
JSのラムダもJava8のラムダも何年か前に使ったがJavaのラムダの部分は忘れた
調べ直す気は無い
>>319
Java自体はレガシー言語だ。何が無学さを恥ろだ
よく恥ずかしげもなくそんなこと言えるな Most Popular Programming Languages 1965 - 2019
https://youtu.be/Og847HVwRSI
1.Python
2.JavaScript
3.JAVA 1.モデル
2.ビュー
3.コントローラー
の棲み分けな感じ >>323
これであかんかどうかはわかんないんだけど、
var i3=getIntegerMethod()+1;
の時は型はどうなるの?
int? このくらいはいちいち確認しなくてもわからないとダメだろ。 相性悪いねえ
それでIOExceptionの非検査例外版とか追加されたし
なんだかなあ やっぱ相性、悪いよな
検査例外さえなければ、もうちょいマシな言語になってたかと思うと惜しいね >>330
int
だからちょっとコードをいじって+1とリテラルを足したり
intを返すメソッドgetIntMethod()の返値を足したりすると
varの型が変わっちゃうわけ。
じゃあ、それを回避するためにどうするの?とか
varのせいで余計なテクニックが生じてくる。
これってボクシングによるコーディング上のメリットを潰してない? 俺はvarが無い言語を使いたい。kotlinもvarに汚染されてる そういう時は明示すればいいだけじゃん。
何言ってんだか。 varしか使っちゃだめな呪いでもかかってるのかな? いつもワンパターンでやった方がコーディングが楽だから
varが常に使える汎用的なものでないなら
「この場合は先々でこういうコードになるからvar、この場合は型明示」
というような設計判断が必要になる。そういうのがコーディングを遅くする。
最初から型明示で一本化しておけば問題に遭遇しない。 intとIntegerの違いを過度に恐れるのはぬるぽが怖いからだろ
Javaの限界だな
結局Kotlin使いたいという結論になる Javaはローカル変数まわりでしかvarを使えない
だからあまり混乱しない
しかし素人集団が作る業務システムだと5000行のメソッドとかザラにある
そういう害悪から徹底排除していきたい Integer + intやInteger + Integerでintが返されるのが以前からのJavaの仕様じゃないの? >>344
int iと型明示されてたらそうだろうけど
var iだとどっちになってるのか分かりにくいという事
そもそもプリミティブだけじゃなくて
var i = method();
これは常に分かりにくい。IDEが無いと読めない
でもgithubとかgitクライアントとかでIDEの支援なしでコードを読む場合がある
varの良さは「何も考えずとりあえず型をvarにする」
という意識上のコストカットにあるはずだけど
そんなに楽に使えるものじゃない(使用場面を吟味しないといけない)という印象 >>343
マジでそんなんあるの?
ひとつのメソッドで5000行ってやばくないか? >>343
リファクタリングしがいがあるじゃないw int i = method()
なんてのは実際にはまずない
実際にはこんなのが多い
Employee employee = getEmployee(employeeId)
くどいな
var employee = getEmployee(employeeId)
少しマシになった >>346
すまんザラにあるは言い過ぎた
1メソッド5000行はまれにある Employee employee←こういう無意味な変数名は避けたい
Employee updated = EmployeeStore.get(employeeId);
//updatedの更新処理
...
EmployeeStore.update(updated);
これで概ね意味のある名前になってる。 >「何も考えずとりあえず型をvarにする」
何言ってんだか。 >>345
var i = Integer + Integerでもiの型はint
varと関係なく算術演算の仕様だから
https://ideone.com/DY0QvE
チーム全員が仕様を理解してる環境にいるなら
var i = getInteger() + 1;のようなケースでvarを使ってもいいと思うし
そうじゃないなら使わないよう規約で決めとけばいいだけ 規約で決めとけばいいというけど
Java案件においてvarが使われてるか、Javaプログラマーがvarに慣れてるか
ばらばらになっていくからJavaエコシステムの悪化になる。
varを使って何かメリットがあるならまだいいけど、何もないように思う。
「冗長な記述がなくなって可読性が上がる」という主張が全く分からない。 var使いまくってるけどわかりにくくて困ったことはあまりない
コードがスッキリして見通しは良くなった気がする
var便利だよ、みんなも使いまくったら良いと思う varは簡単なコードが簡単に見えるっていうのが良いよね
大したことやってないのに長々とクラス名が書かれてあたかもすごいこと
やってるように見えるのはイヤ
クラス名を省略したらわかりにくくなるしvarは便利 意識の高いJava使い達はローカル変数の型にもインターフェイスを使うべきと主張し、他言語の型推論を見下していたわけだけど
梯子外されちゃってこれからどうすんだろうね ソースコードにvarが残らないほうが良いよな
型推論って静的に型が決まるじゃん
ならIDEでvarって入力したらそのときに型を解決してEmployeeになれば十分だったんじゃないか?
入力の手間も省ける
結果のソースコードの可読性も損なわれない
IDEが当たり前の世界なんだから、言語としてコードを短く書けるということにこだわり過ぎないで欲しいな 認知バイアスの一種に、人間が新しい事実に直面したとき、それまで持っていた考えに固執してその考えを徐々にしか変化させられない
というのがあるからねー、それを乗り越えるのは実際に体験してみることなんじゃなかろうかと
新しいことを取り入れることをやめると時代に取り残されるだけだから
新しいものは使いまくってみるのがいんじゃないかなーと思う >>357
それは新しい発明だな
メソッドを書きあげたらメタコンパイルで
varを使ったコードからvar無しコードに変換する
良いアイデアかもしれん
ある種のメタコンパイルを駆使する事でプログラミング言語の在り方が変わるかもしれん >>358
一番Javaのスレらしからぬレスだな
こういうメンタルの人たちはそもそも言語選択の段階でJavaなんか浮かんでこなさそう ■ このスレッドは過去ログ倉庫に格納されています