X



Java入門・初心者質問スレ Part.8

■ このスレッドは過去ログ倉庫に格納されています
0644デフォルトの名無しさん (ワッチョイ 81b6-/3OO [220.208.88.117])
垢版 |
2018/10/22(月) 22:29:43.80ID:Ohiki0Rb0
>>643
ありがとうございます!ありました!
0645デフォルトの名無しさん (ワッチョイ ee80-6qH8 [153.177.171.243])
垢版 |
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

これは、知っていないとマズイ。
漏れも、知らなかったけど
0647デフォルトの名無しさん (ワッチョイ 069f-d4gP [175.134.57.7])
垢版 |
2018/10/23(火) 01:37:49.72ID:SDpmiZwh0
>>645
元の質問は括弧の中から計算していきそうなのにそうではなかったので仕様が知りたかったということだよ。
0648デフォルトの名無しさん (ワッチョイ 069f-nBLa [175.134.57.7])
垢版 |
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() したりするしかない。
0650デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.133.223])
垢版 |
2018/10/23(火) 11:26:07.55ID:QwHjyvjPa
>>649
正規表現不要ならそっちの方が分かりやすいな。
0652デフォルトの名無しさん (ワッチョイ 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") ) );
0653デフォルトの名無しさん (アウアウウー Sa45-tSmu [106.181.125.27])
垢版 |
2018/10/24(水) 08:47:38.46ID:XKgg3tJUa
()は決して先に計算するという意味ではなく、結合の優先順位を変えるんだよ
a = (b + c) + f(x) は、=, +についてもそれぞれを引数2つの関数とみると
=(a, +(+(b, c), f(x))
というツリー構造になる
これをどういう順序で評価するかはいくつかやり方があるが、
Javaや糞Ruby糞を含む多くの言語では正格評価と呼ばれる方式が採用されており、これは外側の関数から内側の順に式を評価する
引数リスト中での評価順序は言語によって様々だが、Javaの場合は原則的に左から右の順に評価する
0654デフォルトの名無しさん (ワッチョイ 1965-nBLa [222.15.235.177])
垢版 |
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
0657デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.135.216])
垢版 |
2018/10/24(水) 12:15:04.76ID:k2aW8IHEa
>>654
メソッドを呼んで値を取り出す順序とその後の計算順序が違うってことかな?
0658デフォルトの名無しさん (アウアウウー Sa45-L0SM [106.132.135.216])
垢版 |
2018/10/24(水) 12:19:07.90ID:k2aW8IHEa
>>655
他を使えば?
0660デフォルトの名無しさん (ワッチョイ ee80-6qH8 [153.177.171.243])
垢版 |
2018/10/24(水) 23:47:39.01ID:2LYWqLo00
paiza, codepad は、ログイン無しで書ける

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

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

バグる・勘違いする
0678デフォルトの名無しさん (ワッチョイ 22d2-8L5D [27.139.3.34])
垢版 |
2018/10/30(火) 12:30:56.41ID:8/9eZ6sC0
歴史年表をデータ化して
ランダム4択クイズみたいの作ってたなあ
当時はDBなんて知らないから
ソースにベタ書きだが
0685デフォルトの名無しさん (アウアウウー Sae3-hDoO [106.132.120.52])
垢版 |
2018/10/31(水) 12:51:34.27ID:umCB7isma
最初に?というとこんなやつかな。

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

と、本気で思った。
0691デフォルトの名無しさん (ワッチョイ a69f-PRUr [121.111.15.11])
垢版 |
2018/11/04(日) 11:32:46.08ID:hQdPSgHl0
ブリッジパターンの応用手順のブログみたい。パッケージを開発する時を前提にしているね。
https://blogs.yahoo.co.jp/kamyu_2010/35480077.html
0694デフォルトの名無しさん (ワッチョイ 6e9f-eUrQ [175.134.57.7])
垢版 |
2018/11/04(日) 15:02:34.71ID:eEexL0w40
              \   ∩─ー、
                \/ ● 、_ `ヽ
                / \( ●  ● |つ
                |   X_入__ノ   ミ 俺は釣られないクマ ・・・
                 、 (_/   ノ
                 \___ノ゙
                 / 丶' ⌒ヽ:::
                / ヽ    / /:::
               / /へ ヘ/ /:::
               / \ ヾミ  /|:::
              (__/| \___ノ/:::
0698デフォルトの名無しさん (アウアウウー Sa6b-AdN2 [106.132.120.66])
垢版 |
2018/11/05(月) 09:20:20.54ID:fSW0Oxfca
悔い改めよ
0700デフォルトの名無しさん (アウアウウー Sa6b-AdN2 [106.132.120.66])
垢版 |
2018/11/05(月) 11:13:59.19ID:fSW0Oxfca
慣れの問題と何を作るかの問題だな。
0703デフォルトの名無しさん (アウアウウー Sabf-orkQ [106.180.15.233])
垢版 |
2018/11/11(日) 21:19:15.74ID:ajreNdVSa
ttps://pastebin.com/5QkYYhdg
Stringのインデックスエラーが出るのですが、何かいけないのでしょうか?
0704デフォルトの名無しさん (アウアウカー Sa9b-Gc0T [182.251.134.39])
垢版 |
2018/11/11(日) 21:22:14.23ID:B3f/927da
Java有料化で仕事無くなるかもなのに頑張るのか。。。
0707デフォルトの名無しさん (ワッチョイ fbb6-aHr0 [220.208.88.117])
垢版 |
2018/11/11(日) 23:54:14.92ID:/c5AFHPv0
>>703
charIndexがリセットされないのがいけない

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

breakの前にcharIndex=0を設定することでエラーは解消されました!
0710デフォルトの名無しさん (ワッチョイ 03b6-gXlk [220.208.88.117])
垢版 |
2018/11/15(木) 07:19:32.06ID:xSjlziKZ0
>>709
ないです、素朴に数えましょう
0713デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 09:43:30.75ID:RDhHOc3na
>>709
同じ文字を含むなら (.).*\1 でできると思うので、プログラムの側でこれにマッチしないものを処理すれば良いのではないかな。
0715デフォルトの名無しさん (ワッチョイ 8f9f-z0W7 [113.153.104.20 [上級国民]])
垢版 |
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()の差で
選別する感じでひとまずいけました。
0716114 (アウアウカー Saa7-ZFLo [182.251.134.39])
垢版 |
2018/11/15(木) 15:16:26.15ID:lNkjj0jra
>>715
解決したようで何より。
0717デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 15:17:43.39ID:RDhHOc3na
>>715
\ 記号はエスケープ文字なので \\ にする。
0718デフォルトの名無しさん
垢版 |
2018/11/15(木) 15:32:48.07
ありがとうございます。
\\でもNG出て
if(a.matches(".*(.).*\\1.*")){
にさせてもらったら
期待通りの結果がでるようになりました。
ありがとうございました。
0719デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 16:12:34.80ID:RDhHOc3na
あー。そうか。matches() は前後に暗黙の ^$ が入るんだったな。
0720デフォルトの名無しさん (ワッチョイ 63b9-xL3o [180.178.88.6])
垢版 |
2018/11/15(木) 19:45:12.42ID:y/xxNwdx0
配列変数の宣言と配列を作成する文において、配列の型を2回記述しないと
いけない理由は何ですか?
例) int[] array = new int[5];
インスタンス変数の宣言文と似ていますが、もしかして配列においても
多態性が使えるんですか?
0721デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.124.87])
垢版 |
2018/11/15(木) 20:07:38.69ID:RDhHOc3na
元々Javaは型推論しない言語だからなあ。
0724720 (ワッチョイ 63b9-xL3o [180.178.88.6])
垢版 |
2018/11/16(金) 00:48:09.83ID:weOG1xUa0
>>723
ありがとうございます。

その部分は勝手な憶測なので気にしないで下さい。
例えば、int型はdouble型に型変換されることもあり得るので、
例) double[] array2 = new int[5];
のような記述が出来るのかな?と思っただけです。
0726デフォルトの名無しさん (ワッチョイ 03b6-gXlk [220.208.88.117])
垢版 |
2018/11/16(金) 07:10:27.50ID:tlDZCd2g0
>>724
子の型の代入を認めるのを共変というのだけれども
配列の型は共変だから型が継承関係にあるならば代入できるよ

Number[] a;
a = new Integer[5];
a = new Double[5];
0728デフォルトの名無しさん (アウアウクー MM67-nbxn [36.11.225.112 [上級国民]])
垢版 |
2018/11/16(金) 16:52:39.39ID:OkLwTKGUM
>>722
プログラミング言語の資格はそういうもの。

そもそもC言語の影響を受けた言語では細かい部分を知っていないと、他人が書いたコードが読めない。
0730デフォルトの名無しさん (ワッチョイ cfe8-maOp [153.151.198.252])
垢版 |
2018/11/17(土) 17:43:14.07ID:/eM8wfkM0
https://qiita.com/syu_chan_1005/items/46f94412f7493d6e60eb
このサイトに従ってBuild ArtifactsまでしてコマンドプロンプトでIdeaProjects\test\out\artifacts\test_jarから
「java test」
と実行したのですが
「エラー: メイン・クラスtestが見つからなかったかロードできませんでした」
と言われ実行できません。どのようにすればよろしいでしょうか。
0733デフォルトの名無しさん (ワッチョイ 63b9-xL3o [180.178.88.6])
垢版 |
2018/11/19(月) 17:22:08.06ID:ZS5AqKuz0
スッキリわかるJava入門の第8章の練習問題を解き、以下のような
Clericクラスを作ったのですが、
https://pastebin.com/EZdvVESb
英語にすると訳が分からなくなる言葉もあったので、それらはローマ字に
した結果、英単語とローマ字が混在するコードになってしまったのですが、
問題でしょうか?
0734デフォルトの名無しさん (ワッチョイ e376-unLA [14.3.57.9])
垢版 |
2018/11/19(月) 18:13:02.26ID:vHw2N8A80
>>733
自分1人しか弄らないなら好きにすればいいよ。
どうせならローマ字じゃなくて漢字や平仮名を使って日本語でそのまま命名することもできるから試してみるといい。

ただし一般論、というか仕事でやる開発なら英語で統一するのが普通なのでそれは忘れちゃいけない。
0737デフォルトの名無しさん (アウアウカー Saa7-unLA [182.251.110.32])
垢版 |
2018/11/19(月) 18:40:59.11ID:97DIZmBta
うちの社内システムは何年も前から部分的に日本語変数名も使ってるけど、特に問題が起きたことはないよ

ただこの話題で議論が紛糾して荒れるのをネットで見かけるから、何がなんでも絶対に許さない人達がいるのは間違いないw
0738デフォルトの名無しさん (アウアウウー Sac7-AAco [106.132.135.194])
垢版 |
2018/11/19(月) 20:51:25.27ID:C68x9bSia
うちの会社でうっかりそんなことしたら中国語で溢れるよ。あとドイツ語と英語。

あ、英語はいいのかw
0743デフォルトの名無しさん (ワッチョイ 7fd2-RJIg [27.139.3.34])
垢版 |
2018/11/20(火) 01:33:24.00ID:8KtihEK80
>>741
すまん。昔量産してしまった
区分フラグとかも
■ このスレッドは過去ログ倉庫に格納されています