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/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
おっぱいざ
657デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.135.216])
垢版 |
2018/10/24(水) 12:15:04.76ID:k2aW8IHEa
>>654
メソッドを呼んで値を取り出す順序とその後の計算順序が違うってことかな?
658デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.135.216])
垢版 |
2018/10/24(水) 12:19:07.90ID:k2aW8IHEa
>>655
他を使えば?
2018/10/24(水) 17:24:32.96ID:SCI/Jnq1a
自分を信じている。
660デフォルトの名無しさん (ワッチョイ ee80-6qH8 [153.177.171.243])
垢版 |
2018/10/24(水) 23:47:39.01ID:2LYWqLo00
paiza, codepad は、ログイン無しで書ける

評価順序・結合規則は、異なる概念

「式1 演算子 式2」がある時に、式内に何かの状態を変える副作用があるとか、
変数を共有していたりすると超危険!

バグる・勘違いする
2018/10/25(木) 00:00:58.67ID:Y/5d8Fwoa
頑張らなきゃ。
2018/10/25(木) 20:52:09.26ID:/sJHXbfH0
javaが有料になるのは本当ですか?
一体何が始まるんです?
2018/10/25(木) 22:48:53.55ID:NF5xn3mp0
終わりが始まるのじゃ
2018/10/25(木) 23:05:07.68ID:Vh4vLvlsM
四季に例えるなら今月からJavaワールドは秋に入った
オラクルにとっては実りの秋、つまり、いよいよ満を持して収穫の時期だ
成長は止まり、次第に終わりに近づいていく
2018/10/25(木) 23:05:48.73ID:8t/VvI+za
諸行無常
2018/10/25(木) 23:16:38.63ID:8t/VvI+za
まじ話、どうしたらいいのですか?
8月からJavaに絞ってプログラミング始めたけど
Javaという選択肢は間違ってたのかな。
2018/10/26(金) 03:38:08.86ID:OsBjME340
>>666
間違っていませんよ
2018/10/26(金) 06:42:50.41ID:RF3v5pwza
信じます。
2018/10/26(金) 18:24:58.78ID:8x+zlsFp0
自分を鍛える。
2018/10/26(金) 21:56:08.51ID:c5tX/A9Y0
Javaは犠牲になったのだ…
ORACLEの買収から続く因縁…
その犠牲にな
2018/10/27(土) 00:26:26.42ID:f5VWw0O9d
ずいぶん勉強したな
まるでOracle博士だ
2018/10/27(土) 20:45:41.22ID:GFYQON7a0
難しい。
でも、頑張る
2018/10/29(月) 22:23:02.20ID:gfMerkhba
標準入力
0
1

sc.nextとかsc.nextIntとかで
0を読み込んで
また、読み込んだら
1になるけど
読み込んでも次の文字に移動しないで
0のまま読み込みできるような
方法ってありませんか?
2018/10/30(火) 09:54:01.25ID:xNl+FZA5a
プログラミングは面倒なものだ。
でも頑張る。
2018/10/30(火) 11:22:14.61ID:TktsfVtm0
プログラミング学習において一番やっちゃいけないこと
それはただやみくもに学習を続ける事
2018/10/30(火) 11:24:12.48ID:qIK5QusDd
ここにいる人が最初に何作ったか気になる
2018/10/30(火) 11:53:41.32ID:yLOLSFfea
高校生の頃に簡単なシューティングゲーム作った
678デフォルトの名無しさん (ワッチョイ 22d2-8L5D [27.139.3.34])
垢版 |
2018/10/30(火) 12:30:56.41ID:8/9eZ6sC0
歴史年表をデータ化して
ランダム4択クイズみたいの作ってたなあ
当時はDBなんて知らないから
ソースにベタ書きだが
2018/10/30(火) 14:16:50.97ID:u5gp0FkU0
自動釣銭機のファームウェアだったわ
2018/10/30(火) 19:16:14.83ID:u4NMPEb2d
>>677
スッキリJavaの入門終わったくらいなんだけど、そこからだとどういう知識付けていったら作れるかな
フレームワークとかまだよくわかってなくて
2018/10/30(火) 19:53:26.35ID:yLOLSFfea
>>680
Javaではゲーム作ったことないからよく分からんけど、
Java ゲーム とかでググるとそれっぽい本がいくつか出てくるからそこらへんを適当に一冊選んで丸写ししてみればいいんじゃないかな
682デフォルトの名無しさん (ワッチョイ c1b6-0EGC [220.208.88.117])
垢版 |
2018/10/30(火) 20:45:03.24ID:xkGCjv5u0
>>673
標準ライブラリには用意されてないんで自作する感じで
https://paiza.io/projects/qS8nTKNW3exoY87rvTwdsg?language=java
2018/10/30(火) 21:34:59.67ID:29XJYIaEa
>>682
ご丁寧にありがとうございます
m(_ _)m
私はまだまだ勉強しなきゃいけない事が多いようですw
2018/10/30(火) 22:19:01.39ID:tLch1bmf0
YouTube にある、T Umezawa の動画が有名

【Java】ゲームプログラミング超入門
https://youtu.be/FsRHdL_r0pE?list=PLJ86MSrhnFKVQPf-E8y0FZKv7uzR4L4Dt

Windows8.1とJava8の組み合わせによる最新版:http://youtu.be/Wp34YbKfWag
C#版: https://youtu.be/zSiER0sxexw

次:http://youtu.be/_MY7yPD58JE
685デフォルトの名無しさん (アウアウウー Sae3-hDoO [106.132.120.52])
垢版 |
2018/10/31(水) 12:51:34.27ID:umCB7isma
最初に?というとこんなやつかな。

10 PRINT "*";
20 GOTO 10
686デフォルトの名無しさん (ブーイモ MM9a-gvvc [49.239.67.180])
垢版 |
2018/10/31(水) 15:52:18.08ID:P9zyHHGGM
*
*
*
*
*
*
*
*
*
*
BREAK AT 10
687デフォルトの名無しさん (アウアウウー Sae3-hDoO [106.132.120.52])
垢版 |
2018/10/31(水) 17:19:04.35ID:umCB7isma
マイコンの素晴らしさに感動。
これがあればなんでもできる。

と、本気で思った。
2018/10/31(水) 17:35:46.14ID:WYczTFcia
Javaがあれば何でも叶う!
2018/10/31(水) 17:38:20.63ID:WYczTFcia
Javaで夢が広がる!
2018/11/03(土) 16:41:01.50ID:5ctS1VyRa
才能ないけど頑張ってます。
691デフォルトの名無しさん (ワッチョイ a69f-PRUr [121.111.15.11])
垢版 |
2018/11/04(日) 11:32:46.08ID:hQdPSgHl0
ブリッジパターンの応用手順のブログみたい。パッケージを開発する時を前提にしているね。
https://blogs.yahoo.co.jp/kamyu_2010/35480077.html
2018/11/04(日) 11:56:02.10ID:BezIGIRZa
定期的にクソ見辛いブログをステマしていくやつなんなの
2018/11/04(日) 13:56:16.32ID:66vK87J40
全くの未経験で転職先でjavaを使用するという事で学習していこうと思ってるんだけど
先にHTML、CSSからやっていかないとダメな感じ?
694デフォルトの名無しさん (ワッチョイ 6e9f-eUrQ [175.134.57.7])
垢版 |
2018/11/04(日) 15:02:34.71ID:eEexL0w40
              \   ∩─ー、
                \/ ● 、_ `ヽ
                / \( ●  ● |つ
                |   X_入__ノ   ミ 俺は釣られないクマ ・・・
                 、 (_/   ノ
                 \___ノ゙
                 / 丶' ⌒ヽ:::
                / ヽ    / /:::
               / /へ ヘ/ /:::
               / \ ヾミ  /|:::
              (__/| \___ノ/:::
2018/11/04(日) 17:42:51.19ID:hcv1KEF/a
頑張ります!
2018/11/04(日) 23:00:14.19ID:l3etVQHq0
javascriptがjavaの仲間だと思っていた時期が俺にもありました…
2018/11/05(月) 09:00:32.02ID:SxXiYgd60
今でもそう思ってます
698デフォルトの名無しさん (アウアウウー Sa6b-AdN2 [106.132.120.66])
垢版 |
2018/11/05(月) 09:20:20.54ID:fSW0Oxfca
悔い改めよ
2018/11/05(月) 10:40:33.26ID:9O10s3S2d
むしろ今となってはjavascriptのほうが使いやすい
700デフォルトの名無しさん (アウアウウー Sa6b-AdN2 [106.132.120.66])
垢版 |
2018/11/05(月) 11:13:59.19ID:fSW0Oxfca
慣れの問題と何を作るかの問題だな。
2018/11/05(月) 11:22:08.13ID:/yhagSUO0
ブラウザと周辺ライブラリの進歩がデカイ
2018/11/06(火) 00:13:10.82ID:lOm/SiQT0
わからん。。。
嫌になる
でも、頑張る
703デフォルトの名無しさん (アウアウウー Sabf-orkQ [106.180.15.233])
垢版 |
2018/11/11(日) 21:19:15.74ID:ajreNdVSa
ttps://pastebin.com/5QkYYhdg
Stringのインデックスエラーが出るのですが、何かいけないのでしょうか?
704デフォルトの名無しさん (アウアウカー Sa9b-Gc0T [182.251.134.39])
垢版 |
2018/11/11(日) 21:22:14.23ID:B3f/927da
Java有料化で仕事無くなるかもなのに頑張るのか。。。
2018/11/11(日) 21:28:16.21ID:/etMYVvT0
無くなるの?
706デフォルトの名無しさん (アウアウカー Sa9b-Gc0T [182.251.134.39])
垢版 |
2018/11/11(日) 21:56:52.92ID:B3f/927da
Java有償化まとめ
https://mevius.5ch.net/test/read.cgi/tech/1532325790/
707デフォルトの名無しさん (ワッチョイ fbb6-aHr0 [220.208.88.117])
垢版 |
2018/11/11(日) 23:54:14.92ID:/c5AFHPv0
>>703
charIndexがリセットされないのがいけない

"123456"を表示するときにcharIndexは0から5に増えて
"7"を表示するときにcharIndexは5だからNG
708デフォルトの名無しさん (アウアウエー Saa2-orkQ [111.239.255.57])
垢版 |
2018/11/12(月) 19:49:08.82ID:x1RQowFZa
>>707
ありがとうございます。

breakの前にcharIndex=0を設定することでエラーは解消されました!
2018/11/15(木) 07:04:39.94ID:F2s/LBqta
同じ文字を含まないっていう正規表現があるなら教えて欲しいです。


マッチする
abc
acb
bac
bca
cab
cba

マッチしない
aab
cbc
710デフォルトの名無しさん (ワッチョイ 03b6-gXlk [220.208.88.117])
垢版 |
2018/11/15(木) 07:19:32.06ID:xSjlziKZ0
>>709
ないです、素朴に数えましょう
2018/11/15(木) 07:27:10.15ID:AxNEuJ7Oa
そうですか残念です。
2018/11/15(木) 08:34:12.11ID:g74yzjtM0
Ruby なら、uniq で、配列内の重複した要素を削除できるから、それで文字数を数えて比較すれば?
split で1文字ずつ、配列の要素にする

str = "abca"

str.length #=> 4
str.split( "" ).uniq.length #=> 3
713デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 09:43:30.75ID:RDhHOc3na
>>709
同じ文字を含むなら (.).*\1 でできると思うので、プログラムの側でこれにマッチしないものを処理すれば良いのではないかな。
714デフォルトの名無しさん (アウアウカー Saa7-ZFLo [182.251.134.39])
垢版 |
2018/11/15(木) 13:03:21.57ID:lNkjj0jra
>>709

重複要素の無いコレクション
https://docs.oracle.com/javase/jp/8/docs/api/java/util/Set.html


>>712
Rubyならじゃねえ。
Javaに同じ機能無いかくらい調べやがれ。
こちとら10年くらいJava触ってねーぞ。
2018/11/15(木) 15:12:37.43ID:pPH/bz/I0
>>713
ありがとうございます。
参考にさせてもらって、その正規表現の効果をぐぐって見て
自分でもいけそうな気がしたのですが。
NGになってしまいます。
何が間違えてますか・・・

String a ="aac";

if(a.matches("(.).*\1")){

System.out.println("OK");

}else{

System.out.println("NG");

}

>>712
>>714
ありがとう、ございます。
それらとは別のやり方ですがヒントになりました。
特定の文字をAllreplaceで""にして原本とのlength()の差で
選別する感じでひとまずいけました。
716114 (アウアウカー Saa7-ZFLo [182.251.134.39])
垢版 |
2018/11/15(木) 15:16:26.15ID:lNkjj0jra
>>715
解決したようで何より。
717デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 15:17:43.39ID:RDhHOc3na
>>715
\ 記号はエスケープ文字なので \\ にする。
2018/11/15(木) 15:32:48.07
ありがとうございます。
\\でもNG出て
if(a.matches(".*(.).*\\1.*")){
にさせてもらったら
期待通りの結果がでるようになりました。
ありがとうございました。
719デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 16:12:34.80ID:RDhHOc3na
あー。そうか。matches() は前後に暗黙の ^$ が入るんだったな。
2018/11/15(木) 19:45:12.42ID:y/xxNwdx0
配列変数の宣言と配列を作成する文において、配列の型を2回記述しないと
いけない理由は何ですか?
例) int[] array = new int[5];
インスタンス変数の宣言文と似ていますが、もしかして配列においても
多態性が使えるんですか?
721デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 20:07:38.69ID:RDhHOc3na
元々Javaは型推論しない言語だからなあ。
2018/11/15(木) 20:56:36.68ID:zE6igjOyd
bronzeの問題見てるけどインクリメントの後置やらfor文のブロック省略やら、引っ掻けたいだけの問題多すぎない?
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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