Java入門・初心者質問スレ Part.11
■ このスレッドは過去ログ倉庫に格納されています
次スレを立てる時は本文の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 >>16
俺はProcessingにJavaのライブラリインポートして
ControlP5乗っけてGUIアプリ作ってる JPanelのインスタンスに巣複数個のJButtonを追加しており、各ボタンをプログラム上でクリック処理してみたいのですが、
どのようすればいいのでしょうか? 自決しました。
for (Component c : getContentPane().getComponents()) {
if (c instanceof JButton) {
}
}
で大丈夫かと思います。失礼いたしました。 質問です
// インデントはアンダースコアで表しています
public class MyClass {
__private final int num;
__public MyClass(int num) {
____this.num = num;
__}
__…
}
という文はエラーにならないですか?
変数numは、宣言時ではなく、コンストラクタに渡された瞬間から
定数扱いになるという理解でよろしいですか? blank final ね。大昔の 1.1 だか 1.0 あたりだとエラーになるんだっけか?
宣言された瞬間から(初期化されていない)定数扱い。
コンストラクタ(もしくはインスタンス初期化子)でないと初期化できない。
全てのコンストラクタで初期化されていないとコンパイルエラー。
コンストラクタ(もしくはインスタンス初期化子)以外の場所では初期化済み扱いになる。 newする度に変更される可能性のある変数をどうしてfinalにできようか ああ、static付いてない場合か
すまん忘れてくれ 答えてくれた方、ありがとうございました
コードはFE試験を参照して抜き出しました、難解ですね… >>52
滅相もない…
読んでてよく理解できない箇所があったのでお聞きしただけですよ csvで¥,(カンマをエスケープしている)が含まれるデータを読み込みたいのですが
いつも通りにスプリットしてもエスケープ文字が邪魔します
何か良い方法ありませんか?
一つは¥,を全く別に置き換えてから
再度置き換えるなどを考えてます >>55
それは否定的後読みを使えば良いだろう
split("(?<!\\\\),") アホくさライブラリいくらでもあるだろ、いかにコード書かないかが勝負な 客先(エンドユーザ)がどうしてもExcel使いたい場合などは解るが
システム間のデータやり取りCSVみたいなフォーマット要求してくる
アホなソフト屋どうにかしてほしいわ >>55
\,を別の文字に置き換えるのがよいと思う
\がエスケープ文字に使われてるので
「\ + 任意の文字」に置き換えればいい
任意の文字はカンマ以外で他のエスケープシーケンスと被らなければ何でも良い
\cとかがわかりやすくていんじゃないかな
,でスプリットして要素を復元するときに\cを,に変換する感じ
\ → \\
, → \,
に変換されてるとするなら、こんな感じでreplaceだけで完全に復元できるはず
https://paiza.io/projects/JmNXy546I6CrIn48Z9L0kQ CSV/TSV, JSON, YAML は一般的
これらの構造物に正規表現を使うのは、おかしい。
パーサーを使うべき
各データ(要素)内に、行区切り文字・列区切り文字・クォート文字などの特殊文字がある場合は、
その要素をクォート文字で囲む必要がある >>55
修正しました
https://paiza.io/projects/JmNXy546I6CrIn48Z9L0kQ
\ → \\
, → \,
と変換されてる場合は
\\ → \ + 任意の文字
\, → \ + 任意の文字
の順番でreplaceすればOK >>62
クオートで囲むのはCSVがRFC4180に従ってる場合でしょ
エスケープするのはRFC4180の形式ではないよ
エスケープするならクオートで囲む必要はないよ
RFCのCSVは扱いにくいんだよね
テキストの行数とCSVのレコード数が一致しないしパーサも結構複雑
エスケープ方式の方があきらかにコンピュータで処理しやすい
CSVのRFCは人類の負の遺産だと思う 基本、自作したものは、バグるので使えない
CSV/TSV, JSON, YAML などは一般的だから、
たいていの言語の標準ライブラリにある
車輪の再開発はダメ。
開発・テストコストが掛かって、低品質になるから使えない 例えば、Ruby のCSV で、
各要素内に、行区切り文字(改行)・列区切り文字(カンマ)・クォート文字(ダブルクォーテーション)がある場合。
要素内のクォート文字" は、連続する" で出力される
require 'csv'
input = <<"EOT"
"a""a","b,b",あ
"c
c","d\nd"
EOT
p input_ary = CSV.parse( input ) # 2次元配列
#=> [["a\"a", "b,b", "あ"], ["c\nc", "d\nd"]]
# 2次元配列を、CSV 文字列に変換する
csv_str = input_ary.map( &:to_csv ).join
puts csv_str
出力
"a""a","b,b",あ
"c
c","d
d" >>65
Javaの標準ライブラリにはないよ
ここはJavaのスレだよ
ドメイン特化な軽量フォーマットを作るのは僕はありだと思うけどなあ
他人が作ったものが高品質とも限らないし標準ライブラリがバグってることもあるよ
ケースバイケースかな >>66
それはRFCに従ってる感じっすね
RFCのCSVはテキストの行数とCSVの行数が一致しないから
grepコマンドでレコードを検索できないしwcコマンドでレコード数を調べることもできない
はなはだ使いにくいと思うんだよね、いわば前例踏襲だけで生き残ってるゴミ仕様だと思うんだよね、SMTPと同じですわ
もうええやろって思う ちなみにJavaの標準ライブラリのString.splitは末尾の空文字列を無視するから
CSVのパースに使うと列の数が変わってしまう
標準ライブラリでもクセがあるから注意
車輪の再開発はケースバイケースだよ
いびつな車輪で走り続けるよりも、よりよい車輪を作って走ったが良いこともある
車輪の再開発だからダメだ、良いのだというものではないという話 >>70
replaceするだけの処理にライブラリ使ったら負けだと思う RFCのCSVを読む場合はライブラリ使ったが良いだろうね
僕はふだんSuper CSVを使ってる
スピード重視ならuniVocityかSimpleFlatMapperかな
Super CSV、Opencsv、Apache Commons CSVは処理が遅い なんの勝ちか負けか知らんけど
CSVなんか扱ってる時点で負けてるんだから実利取っとけよw >>73
お給料はどうやろうと変わらないっしょ
実利なんてないんですよ、好きにしたらええでしょ 僕はCSVのこと好きですけどね
Oracleの100倍好き CSVなど要求してくるところは仕様にエンコーディングすら記載してない
確認するとTextファイルはShift_JISが当たり前と思ってるアホで
フィールド長要件もShift_JIS換算バイト数だったりして糞面倒くさい
俺は大嫌いだ、CSVのコードなど1秒も時間かけたくないね CSV入出力は自作しないでライブラリ使うなあ。
ていうかCSVに限らずライブラリあるならそれ使って入出力をする。
学習や趣味であえて自作する場合は別として。 >>76
多分そういうのってWindowsのExcelで読みたいんだろうね。あれCSVの拡張子にしとくとシフトJISとして読んでくれるので。TXTにしとけばウィザードになって文字コード指定も出来るけどな。 ExcelはBOM付きのUTF-8なら文字化けせずに開けるはず エンドユーザ向けの出力なら許せるが、同業者だったり...
当然そういうアホにはREST API用意しますからなどという代替案は通じるはずもなく 確かに、RFC のCSV は、
grep, wc などで、簡単には使えない
でも一般的だから、色々なアプリで読み込めるし、可搬性も高い MinecraftでModの開発をしていたのですが昨日から突然コンパイルができなくなり,
>Process 'command 'C:\Program Files\Java\jdk1.8.0_251\bin\java.exe'' finished with non-zero exit value 1
というメッセージが表示されます. 調べてみたところ開発環境に問題があるようなんですが具体的に何が原因なのか分かりませんし,何かそういう操作をしたような覚えもありません.
開発環境としては1年前にインストールしたJDK1.8.0_251なんですが,別のバージョンで試した方がいいでしょうか? 原因や対処法わかる方いましたら教えて頂きたいです. 「java.exe javaw.exe」「java.exe javac.exe」で、違いを検索すれば?
>突然コンパイルができなくなり
コンパイルは、java じゃなくて、javac じゃないの? Gradleでビルドから実行までやってるんじゃないかなと思った >>83
レスありがとうございます
MOD_IDをmods.tomlに合わせて変えてみたんですが,Minecraftが起動すると
mods.toml missing metadata for modid ○○
と表示されて先に進めないです…
---- Minecraft Crash Report ----
// Don't be sad, have a hug! <3
Time: 21/09/27 16:34
Description: Mod loading error has occurred
java.lang.Exception: Mod Loading has failed >>79
あー。UTF-8のBOM入りってそこで使えるのか。
あんな無駄なもん何処で使うんだろうと思ったら。 >>81
CSV用のgrepってあったらいいよな。
ライブラリ使えば簡単そうだからお題スレに出しておくかな。 たかがファイル入出力するのにライブラリ使うとかどんだけレベル低いんだよ Java演習問題(継承)について教えて欲しいです。(初心者です)
・スーパークラス
メンバ変数(private int):a,total
aのgetter,aのsetter
・サブクラス
メンバ変数(private int):b,c
b,cのコンストラクタ
メソッド(public):calculate (処理はtotal=b*c)
・実行用クラス
サブクラス test =new サブクラス(10,2)
test.calculate()
このときに、実行すると、
スーパークラスのtotalが参照できないとエラーがでます
解答例としては、サブクラスのcalculateメソッドが、
public void calculate(){
int total =b*c
setTotal(total)
}
となっているのですが、直接スーパークラスのメンバ変数totalに入れずに、
サブクラス内で別領域を作成して、それをsetする理由がよく分からないです... ↑訂正します。スーパークラスのsetter getterはaではなく(誤)、totalのsetter getterです。 >>93
エラーとしては、「不可視です」と出力されるのですが、ググると、priveta をpublicで緩和するか、setterやgetterがあるか確認してなければ作成を検討する、という方法を見つけました
スーパークラスにtotalのsetterやgetterがあるのに何故かなと思って質問させてもらっています getter/setterあるのに代入文使えないのは何故っての質問の意図か?理解するの難解すぎるw
javaには多言語にあるようなプロパティ構文はないgetter/setterといっても単なるメソッド setter/getterを単なるメソッドというと誤解あるか?
フレームワーク使ったりJ2EEな領域になるとルールになる場合もあって説明が難しい
その様式はカルチャー以上、文法未満、どうせショートカット一発自動生成 >>96
色々後出しで申し訳ないです。
そもそも代入出来ないため、一旦別領域を経由して再度変数を入れないといけない、と理解しました。
助かりました、ありがとうございます。 >>97
それは単に冗長なコーディングスタイルってだけだが switch~casaて何のために使うのでそか?
意味が分かりません
if使えばいいじゃないでそか switchの場合ラベルに飛ぶだけ
ifの場合if毎に条件判定がいる 条件簡略化してるように見えてるだけで言ってること同じやん
雰囲気で適当回答するのやめろアホ switchは条件分岐に使う
条件分岐はifでもできる
switchはパターンマッチが強化されたら関数型のような
書き方ができるから伸びしろがあるのはswitch >>104
回数が決まってない(分からない)ループの時に使うんじゃない? if(a=1 && b=1 || c=1)
を
switchでやることは可能ですか? >>107
for (;;) {
}
で代替できるので >>109
主観の問題になるけど、while文の方がスマートな記述になる気がする
それとdo while文を使いたい時はどうするの? >>110
for (int i = 0;;) {
System.out.println(i);
i++;
if (i >= 10) {
break;
}
}
こうですね なんか経験浅い奴ほどwhile使いたがるような気がする
終端が必ずあるループで安易に使うなよ >>114
1/2の確率でループする場合は終端があると思いますか? >>114
よく分からないな
使い分けた方が良いって言ってるだけなんだが
for文縛りとか不便なだけだろ、ぶっちゃけ i >= 10 よりも
10 <= i の方がいい while使うなっていうのは
goto使うなと同じくらい原理主義でニワカっぽい なんつーかこういう言ってることが理解できないバカが安易にwhile使うんだよな
主義とかどうとか以前にwhileっていう選択肢を選んだ時点で無駄に一つの不安要素を抱えるから
一般的な思考してたら終端ないようなやむを得ない場合でしか使わないんだよな
クッソ単純な条件ループなら妥協できないわけでもないがわざわざ使わない
だから経験浅い奴ほどなんの不安も抱かないから安易に使う 可読性とのトレードオフならまだわかるけど経験浅い奴はそういう事なんて当然考えてるわけもなく
動けばいいや的なソースコードを思うがままに書く
素人が業務でよくやる思考停止2大案件
思考停止大量フラグ
思考停止大量ネスト whileを書いてるからダメだ ← これが思考停止でなくて何だってこと ソースコードは好きに書いたらええ ← 経験深い僕の言葉 全然書いてること理解してないよね
小学生レベルの読解力すらないし
浅いっていうか学生だろお前 >>127
while使ったらダメだって君は考えてるってことだよね
完全に理解したよ、君はwhileに不安を感じてるから
whileは書くべきではないって思ってるわけだけよ
君のレベルが低いだけ 学生の僕よりレベル低いプログラマがwhile禁止の自分ルールを語るほど浅いことはないです 大人は同じことは何回も教えてあげないんだよ
>>127のレスを10回音読してそれすらも理解できないならバカすぎて向いてないからプログラムは諦めとけ >>130
あなたは大人じゃないですね
歳だけは重ねてるかも知れませんが言ってることが浅すぎるので
そういう浅い経験しか積んでこなかった人です
whileに不安を覚えているあなたの方がプログラム向いてないです
ここで一句
プログラマ、若い人ほど頭が良い あぁ〜whileが書いてあるよどこでループ抜けるかわからないよガクガク ← アホ丸出しですw 素人が業務でよくやる思考停止3大案件(大きい順)
・思考停止while禁止
・思考停止大量フラグ
・思考停止大量ネスト 大好きなwhile否定されただけでこのファビョりようw
すげぇガキだな・・w
読解力もスキルもないくせにプライドだけはこんなエベレスト級だと
社会出たら速攻で自分の頭の悪さに嫌気さして自殺するんじゃねぇかな
まぁそもそもこれじゃ肉体労働しかなさそうだから関係ないかw >>136
あなたはニコニコ動画観てそうな自称大人の人って印象です ドワンゴ関係者かな? なんかちょっとそういう気がしたので ■ このスレッドは過去ログ倉庫に格納されています