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 よくわかってないけど
転職の面接で継承じゃなく委譲だ! と力説しまくれば受かりますか?
みんなあまりできる人いなそうなら面接官にもつっこまれないかな。 理解してない面接官のプライドもあるから
よし、君は合格!となることを期待して Java固有じゃないかもですが質問させて下さい
(x==1|x==3|x==100)
みたいに左辺が同じ論理式って簡略化して表記する方法ありますか? 使えない奴が入る率が高過ぎたら、そいつの責任になるから、流石にそれなりに勉強してると思うぞ。。。
少なくとも中小は人事なんて無いから、開発責任者とかが面接官する。
大企業も1人くらい分かる奴を面接官に入れるだろ。
ろくな面接官がいないのは派遣会社くらいじゃ無いか?
百歩譲って入れたとして、使い物にならなかったら陰湿なイジメが待ってるぞ。(経験者談) >>615
レベルの低い現場で継承使ってると最悪だぞ(俺はレベルに関わらず全ての実装継承はクソだと思ってるが)
全部ベタ書きの方が遥かにマシ >>619
こういう書き方なら時々やる
List.of(1, 3, 10).contains(x)
Stream.of(1, 3, 100).anyMatch(i -> i == x) >>622
なるほど、配列を自分で定義したりするよりはスマートな感じですね
有り難うございます >>616
>継承じゃなく委譲
最近、この問題はコンストラクタの記述能力に依存することがわかってきました
継承を使う場合、Java のコンストラクタで書ける内容が C++ のコンストラクタでは書けない、ならばおしなべて委譲にするしかない、と >>619
swith使えばいいのでは?
swithはbreakさせなければ下に抜けるからな。
switch (x) {
case 1:
case 3:
case 10:
System.out.println(x);
}
なんていう風に書いとくとxが 1, 3, 10 の時だけ出力するよ。 >>620
大手ユー子に転職したけど面接のときに技術わかるやつ一人もいなかったぞ
現場離れた部長と人事だけ
Javaほとんど出来ないけどあっさり採用されてしまったわ
独立中小の方が職人多かったよ >>625
冗長になりそうでswitchは敬遠してましたが意外と視読性良さそうですね
有り難うございます bronze取ったら現場探したほうがええんか?
未熟さで迷惑かけて対人ストレスとか抱えるくらいならsilverくらい取ってからにしようかと思うんだけど
いやまぁ資格と現場で使えるかが別物ってのはとりあえず置いといてよ bronzeは「わたしはjavaができません」と申告してるようなもんだから
書かないほうがよいのでは?w >>626
現場離れた部長が技術分かる奴なんじゃないの?
別に特定の言語を知らなくても何か一つ言語使えてれば、他の言語の文法覚えるだけで即戦力(扱い)だし。
本当に未経験でも結果的に使える奴になれば良いけどね。 abcdeの末尾がeならokと出力したいのですが
↓では期待通りにならないのですが
どうしたら上手くいくか教えて下さい。
String word= "abcde";
if(word.matches("e$"))System.out.println("ok"); これだと動くから、なんかはしょりすぎてるんでは?
String word = "abcde";
if (Pattern.compile("e$").matcher(word).find())
System.out.println("ok"); ありがとうございます
修正して
if(word.matches(".+e$"))System.out.println("ok");
で期待通りになったんですが、
これでもいいのかな。 Ruby でやったけど、文字列が、"e" だけの場合に「.+ .*」で違いがある
"e".match /.+e$/
#=> nil
"e".match /.*e$/
#=> "e" >>635
*は直前の文字が0文字以上で+は直前の文字が1文字以上なのでそうなって当然だと思う。 式の評価順について教えてください
下記のプログラムで
カッコが先に処理されて
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;
} >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"
+ 演算子は単に、文字列の連結だろ >>639
それのどこに書いてあるのか教えて欲しいのです >>640
文字列は表示してるだけで戻り値はintですよ >>641
英語の方ならExpressions、Evaluation Order、
日本語の方なら式、評価順序のあたりを読めばいいよ。 ああ、文の評価順序を確かめたかったのか
たぶん左から評価して、その値を、( )の優先順位で足していくのだろう
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()の差で
選別する感じでひとまずいけました。 ■ このスレッドは過去ログ倉庫に格納されています