Java入門・初心者質問スレ Part.8
■ このスレッドは過去ログ倉庫に格納されています
Java初心者のためのスレッドです。
※前スレ
Java入門・初心者質問スレ Part.7
http://mevius.5ch.net/test/read.cgi/tech/1515549964/
VIPQ2_EXTDAT: checked:vvvvvv:1000:512:----: EXT was configured ああ、文の評価順序を確かめたかったのか
たぶん左から評価して、その値を、( )の優先順位で足していくのだろう
a[0] = 0 + (0 + (0 + 0))
a[0] = 0 + (0 + 0)
a[0] = 0 + 0
a[0] = 0
これは、知っていないとマズイ。
漏れも、知らなかったけど >>645
元の質問は括弧の中から計算していきそうなのにそうではなかったので仕様が知りたかったということだよ。 >>631
それ実際に実行されるのはこれだ。
java.util.regex.Pattern.compile("e$").matcher(word).matches()
最後の matches() は java.util.regex.Matcher クラスのメソッドだ。
ドキュメントには「領域全体をこのパターンとマッチします。」と書いてある。
全体とだ。つまりパターンには前後に隠された ^$ が最初から入っているような状態になる。
なので例えば word が "e" ならマッチするが e の前後に一文字でも何かあればマッチしない。
だから ".*e$" だとマッチする。(というか最後の $ は不要)
grep コマンドへ与えるパターンみたいにやりたい場合は Matcher クラスのインスタンスで find() したりするしかない。 これでもOKかな。
if (word.endsWith("e")) >>649
正規表現不要ならそっちの方が分かりやすいな。 >>638
Ruby で以下を実行したら、ABCDE の順番になった
ary = [ ]
def getValue ( str )
puts str; 0
end
ary[ getValue("A") ] = getValue("B") + ( getValue("C") + ( getValue("D") + getValue("E") ) ); ()は決して先に計算するという意味ではなく、結合の優先順位を変えるんだよ
a = (b + c) + f(x) は、=, +についてもそれぞれを引数2つの関数とみると
=(a, +(+(b, c), f(x))
というツリー構造になる
これをどういう順序で評価するかはいくつかやり方があるが、
Javaや糞Ruby糞を含む多くの言語では正格評価と呼ばれる方式が採用されており、これは外側の関数から内側の順に式を評価する
引数リスト中での評価順序は言語によって様々だが、Javaの場合は原則的に左から右の順に評価する 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 >>654
メソッドを呼んで値を取り出す順序とその後の計算順序が違うってことかな? paiza, codepad は、ログイン無しで書ける
評価順序・結合規則は、異なる概念
「式1 演算子 式2」がある時に、式内に何かの状態を変える副作用があるとか、
変数を共有していたりすると超危険!
バグる・勘違いする javaが有料になるのは本当ですか?
一体何が始まるんです? 四季に例えるなら今月からJavaワールドは秋に入った
オラクルにとっては実りの秋、つまり、いよいよ満を持して収穫の時期だ
成長は止まり、次第に終わりに近づいていく まじ話、どうしたらいいのですか?
8月からJavaに絞ってプログラミング始めたけど
Javaという選択肢は間違ってたのかな。 Javaは犠牲になったのだ…
ORACLEの買収から続く因縁…
その犠牲にな 標準入力
0
1
で
sc.nextとかsc.nextIntとかで
0を読み込んで
また、読み込んだら
1になるけど
読み込んでも次の文字に移動しないで
0のまま読み込みできるような
方法ってありませんか? プログラミング学習において一番やっちゃいけないこと
それはただやみくもに学習を続ける事 歴史年表をデータ化して
ランダム4択クイズみたいの作ってたなあ
当時はDBなんて知らないから
ソースにベタ書きだが >>677
スッキリJavaの入門終わったくらいなんだけど、そこからだとどういう知識付けていったら作れるかな
フレームワークとかまだよくわかってなくて >>680
Javaではゲーム作ったことないからよく分からんけど、
Java ゲーム とかでググるとそれっぽい本がいくつか出てくるからそこらへんを適当に一冊選んで丸写ししてみればいいんじゃないかな >>682
ご丁寧にありがとうございます
m(_ _)m
私はまだまだ勉強しなきゃいけない事が多いようですw 最初に?というとこんなやつかな。
10 PRINT "*";
20 GOTO 10 *
*
*
*
*
*
*
*
*
*
BREAK AT 10
ロ マイコンの素晴らしさに感動。
これがあればなんでもできる。
と、本気で思った。 定期的にクソ見辛いブログをステマしていくやつなんなの 全くの未経験で転職先でjavaを使用するという事で学習していこうと思ってるんだけど
先にHTML、CSSからやっていかないとダメな感じ? \ ∩─ー、
\/ ● 、_ `ヽ
/ \( ● ● |つ
| X_入__ノ ミ 俺は釣られないクマ ・・・
、 (_/ ノ
\___ノ゙
/ 丶' ⌒ヽ:::
/ ヽ / /:::
/ /へ ヘ/ /:::
/ \ ヾミ /|:::
(__/| \___ノ/::: javascriptがjavaの仲間だと思っていた時期が俺にもありました… むしろ今となってはjavascriptのほうが使いやすい ttps://pastebin.com/5QkYYhdg
Stringのインデックスエラーが出るのですが、何かいけないのでしょうか? Java有料化で仕事無くなるかもなのに頑張るのか。。。 >>703
charIndexがリセットされないのがいけない
"123456"を表示するときにcharIndexは0から5に増えて
"7"を表示するときにcharIndexは5だからNG >>707
ありがとうございます。
breakの前にcharIndex=0を設定することでエラーは解消されました! 同じ文字を含まないっていう正規表現があるなら教えて欲しいです。
例
マッチする
abc
acb
bac
bca
cab
cba
マッチしない
aab
cbc Ruby なら、uniq で、配列内の重複した要素を削除できるから、それで文字数を数えて比較すれば?
split で1文字ずつ、配列の要素にする
str = "abca"
str.length #=> 4
str.split( "" ).uniq.length #=> 3 >>709
同じ文字を含むなら (.).*\1 でできると思うので、プログラムの側でこれにマッチしないものを処理すれば良いのではないかな。 >>713
ありがとうございます。
参考にさせてもらって、その正規表現の効果をぐぐって見て
自分でもいけそうな気がしたのですが。
NGになってしまいます。
何が間違えてますか・・・
String a ="aac";
if(a.matches("(.).*\1")){
System.out.println("OK");
}else{
System.out.println("NG");
}
>>712
>>714
ありがとう、ございます。
それらとは別のやり方ですがヒントになりました。
特定の文字をAllreplaceで""にして原本とのlength()の差で
選別する感じでひとまずいけました。 >>715
\ 記号はエスケープ文字なので \\ にする。 ありがとうございます。
\\でもNG出て
if(a.matches(".*(.).*\\1.*")){
にさせてもらったら
期待通りの結果がでるようになりました。
ありがとうございました。 あー。そうか。matches() は前後に暗黙の ^$ が入るんだったな。 配列変数の宣言と配列を作成する文において、配列の型を2回記述しないと
いけない理由は何ですか?
例) int[] array = new int[5];
インスタンス変数の宣言文と似ていますが、もしかして配列においても
多態性が使えるんですか? bronzeの問題見てるけどインクリメントの後置やらfor文のブロック省略やら、引っ掻けたいだけの問題多すぎない? >>720
理由と言われても、そう言う言語仕様だから。もう20年以上前に設計された言語だから、今の基準で見たら冗長な表現が多々ある。
あと配列においても多態性が〜、の部分は何が言いたいのか分からない。 >>723
ありがとうございます。
その部分は勝手な憶測なので気にしないで下さい。
例えば、int型はdouble型に型変換されることもあり得るので、
例) double[] array2 = new int[5];
のような記述が出来るのかな?と思っただけです。 >>724
それは多態性というか暗黙的なキャストだな。
Javaではそれは出来ない。暗黙的キャストは便利なこともある反面、意図しないキャストでバグを生み出す可能性があるからJavaの設計思想とは相容れない。 >>724
子の型の代入を認めるのを共変というのだけれども
配列の型は共変だから型が継承関係にあるならば代入できるよ
Number[] a;
a = new Integer[5];
a = new Double[5]; >>722
まぁ自分が何気なく書いて意図した結果にならなくて混乱するようなことになるなよってことだと思う >>722
プログラミング言語の資格はそういうもの。
そもそもC言語の影響を受けた言語では細かい部分を知っていないと、他人が書いたコードが読めない。 >>725
ありがとうございます。
>>726
ありがとうございます。プリミティブ型は継承関係に無いから駄目ですね。 https://qiita.com/syu_chan_1005/items/46f94412f7493d6e60eb
このサイトに従ってBuild ArtifactsまでしてコマンドプロンプトでIdeaProjects\test\out\artifacts\test_jarから
「java test」
と実行したのですが
「エラー: メイン・クラスtestが見つからなかったかロードできませんでした」
と言われ実行できません。どのようにすればよろしいでしょうか。 >>730
自己解決しました。
.jarをjavaで走らそうとしたのが問題だったみたいで、
java -jar test.jarと入力したら無事出力されました。 スッキリわかるJava入門の第8章の練習問題を解き、以下のような
Clericクラスを作ったのですが、
https://pastebin.com/EZdvVESb
英語にすると訳が分からなくなる言葉もあったので、それらはローマ字に
した結果、英単語とローマ字が混在するコードになってしまったのですが、
問題でしょうか? >>733
自分1人しか弄らないなら好きにすればいいよ。
どうせならローマ字じゃなくて漢字や平仮名を使って日本語でそのまま命名することもできるから試してみるといい。
ただし一般論、というか仕事でやる開発なら英語で統一するのが普通なのでそれは忘れちゃいけない。 入門に出てくるようなクラス名は普通に出てくる単語ばっかだろうからさっさと覚えたほうがいいでしょ >>733
ソース見たけど、確かにkaifukuryoとか死ぬほど読みにくいから、これならいっそ「回復量」の日本語でもいいと思うw うちの社内システムは何年も前から部分的に日本語変数名も使ってるけど、特に問題が起きたことはないよ
ただこの話題で議論が紛糾して荒れるのをネットで見かけるから、何がなんでも絶対に許さない人達がいるのは間違いないw うちの会社でうっかりそんなことしたら中国語で溢れるよ。あとドイツ語と英語。
あ、英語はいいのかw 総称型配列を生成したい…リフレクション使えばいける? 答えてくれた方、ありがとうございました。
なるべく英語で行くようにしたいと思います。 ローマ字は特に気にしないけどおかしな英語だとモヤる
登録でregistってなんやねん >>739
Array.newInstanceの結果をダウンキャスト
警告が出るが気にしない
外から引数でClass<T>を受け取るようにすれば多少はタイプセーフ風な雰囲気を醸し出せるかもしれない
Javaのジェネリックがハリボテの糞と呼ばれる所以だ >>741
すまん。昔量産してしまった
区分フラグとかも ■ このスレッドは過去ログ倉庫に格納されています