Java入門・初心者質問スレ Part.4 [無断転載禁止]©2ch.net

■ このスレッドは過去ログ倉庫に格納されています
2017/06/30(金) 22:14:16.54ID:W0OUnv8/
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.3
http://mevius.2ch.net/test/read.cgi/tech/1491306071/
2017/08/19(土) 08:15:29.19ID:IZN9Kb9e
private staticメソッドを使う意味ってありますか?
オーバーロードしたpublic staticメソッドの受け先以外の使い方で
2017/08/19(土) 08:19:07.46ID:oORm5Ou6
>>341
staticメンバにしかアクセスしないprivateなメソッドはprivate staticで定義するんじゃないの
2017/08/19(土) 14:46:54.88ID:hY6XbUY2
long x
x = Integer.parseInt(str.substring(121,131))

文字列の一部から10桁のlong型の数値を取得しているのだけど
この取り出したい数値が大きい時に、 x=0 になってしまう不具合があるのだけどどうすればいいでしょうか
344デフォルトの名無しさん
垢版 |
2017/08/19(土) 14:54:42.91ID:yBrPcq+R
>>343
Long.parseLongで
2017/08/19(土) 15:08:14.44ID:hY6XbUY2
>>344
ありがとうございます
2017/08/22(火) 06:56:33.86ID:dBUxkpNb
頑張ってる
2017/08/24(木) 19:19:42.05ID:JFHydDe1
スッキリわかるjava入門を電子書籍で読んでいるのですがラッパーの記述が何処にあるかわからないです
書籍をお持ちの方教えて頂けないでしょうか?
2017/08/24(木) 19:53:22.35ID:KbcJbsO3
>>347
ちょっと待て

おまえの本には巻末に索引が付いてないのか?
2017/08/24(木) 20:08:09.37ID:JFHydDe1
>>348
ありがとうございます!
電子書籍なので気付かなかったです!
2017/08/25(金) 09:44:00.53ID:kDilQ37G
電子書籍なら何も考えずそのまま検索すれば良いだけのような?
2017/08/25(金) 11:04:00.00ID:0JW1nIZL
電子書籍っていっても文字で情報を持ってるわけじゃないから検索はできない(普通に索引はある)
2017/08/25(金) 12:29:18.21ID:KoB8BbC1
あー。文字情報なしの電子書籍はダメだね。
2017/08/25(金) 18:40:20.43ID:w/d6Mddl
漫画や自炊以外でそんなのあるのか
2017/08/25(金) 19:35:16.88ID:H2xWyZEq
静的初期化ブロックでif文使ってるようなクラスのカバレッジを100%にすることって出来ますか?
355デフォルトの名無しさん
垢版 |
2017/08/25(金) 20:03:58.53ID:E3yIY7Cv
>>354 のようなのを見ると、どうして初心者は言葉足らずが多いのかと、いつも思うよ。
356デフォルトの名無しさん
垢版 |
2017/08/25(金) 21:39:57.94ID:27FuNdyg
メソッドを作成し、呼び出せコリャ
メソッド名は命名規則にのっとって自由に決めてちょ。
値を定義済みの整数配列型と、整数型の値a, b を引数に渡して呼び出すと添え字 a の位置に b の値を挿入し整形済みの配列を戻り値として返すただし、元のデータは失われない
ただし、配列の長さは変化してよし。
2017/08/25(金) 22:03:30.09ID:h0dKu5Bs
自炊してもスキャンした画像をOCRソフトに読ませてテキスト作らせて画像と一緒にPDFファイルに組み込む事は可能。
2017/08/25(金) 22:05:05.37ID:h0dKu5Bs
>>356
夏休みの宿題?
359デフォルトの名無しさん
垢版 |
2017/08/25(金) 22:08:03.15ID:h0dKu5Bs
>>354
君の言っていることの意味がわからない。
360デフォルトの名無しさん
垢版 |
2017/08/25(金) 22:13:20.05ID:h0dKu5Bs
>>356
ヒントだけ書いとこう。

1. 配列を List に入れる。
2. add()で途中に挿入。
3. 配列にして返す。
2017/08/25(金) 22:18:03.60ID:/f+10ORp
>>354
無理です
リファクタリングしてからテストしてください
362デフォルトの名無しさん
垢版 |
2017/08/25(金) 22:27:50.64ID:x2/PsxCr
>>356
public static void main(String[] args)
{
 int[] src = {0, 1, 2};

 for (int i = 0; i < 4; i++)
 {
  int[] dest = insert(src, i, 3);
  System.out.println(Arrays.toString(dest));
 }
}

static int[] insert(int[] src, int index, int value)
{
 int[] dest = new int[src.length + 1];
 System.arraycopy(src, 0, dest, 0, index);
 dest[index] = value;
 System.arraycopy(src, index, dest, index + 1, src.length - index);
 return dest;
}
2017/08/26(土) 05:15:30.71ID:djCuR8Pr
ダメだ。それ以上簡単な方法が思い浮かばない。
364デフォルトの名無しさん
垢版 |
2017/08/26(土) 05:57:22.09ID:djCuR8Pr
IntBuffer 使ったらできたことはできた。
https://paiza.io/projects/huYRNUsbjFqONCaQwbpo1g
2017/08/26(土) 08:40:40.53ID:dAUznQNC
低レベルスレは宿題ばっかやるアホが多くてホント呆れるわ
チラシの裏でやれドアホ
2017/08/26(土) 09:32:58.96ID:yjz2CD2O
>>354
System.loadLibraryを特権計算か何かで呼んでるんだろうけどまずカバレッジ100%目指すってのがおかしい
言葉足らずとは思わないが
2017/08/26(土) 13:57:43.15ID:A+ZFL75S
>>365
お前が出てけやカス
2017/08/26(土) 14:15:33.60ID:doT9ddiU
初心者スレで
初心者を追い出してどうするのか
2017/08/26(土) 14:31:40.42ID:DUW2NPhQ
kumi炎上商法
2017/08/26(土) 14:32:27.39ID:DUW2NPhQ
誤爆
2017/08/26(土) 22:11:30.26ID:Z+RkQazT
>>365
やめたれ
まぁ確かに人に質問する態度ではないけど
2017/08/27(日) 01:30:32.99ID:Xa66qldf
プログラミング超初心者です

Androidのアプリを作ることを目標にしてプログラミングを始めました

とりあえずプロゲートでJavaの文法を一通り学び終えたんですが、これからどのように勉強を進めていけば良いのかいまいちわかりません
フレームワークの勉強をした方がいいみたいなんですが、中々敷居が高くてどこからてを着ければ良いのやら、、

助言いただけると幸いです
2017/08/27(日) 05:51:11.36ID:uirFB7xG
>>372
Androidの開発環境についてるサンプルアプリ動かしてそれ改造したりくっつけてきゃいいよ
設計学びたいなら本読め
2017/08/27(日) 15:11:13.74ID:vQCj63e7
>>372
こちらへどうぞ
http://mevius.2ch.net/test/read.cgi/tech/1488052551/
2017/08/28(月) 02:07:53.52ID:eSPpiGRP
スレッドセーフについて教えて下さい。

よくフィールド変数は他スレッドから値が参照されたり、書き換えられたりするから、
使ってはいけない旨の記述を目にします。

例えば
class Calc{
private CalcSub calcSub;

public int execute(int param,int param2){
calcSub = new calcSub();
return calcSub.multiple(param,param2);
}
}

このようにメソッド内だけでCalcSubクラスをインスタンス化したときも、危ないのでしょうか。
メソッド内の変数はスレッドセーフと聞きますが。
呼び出すたびに新しいインスタンスを生成しても危ないのですか?
2017/08/28(月) 02:16:05.97ID:eSPpiGRP
上記の場合、フィールドに無理やり変数を持つ意味はありませんが、
よくフレームワーク等だとフィールドに変数とアノテーションで宣言しているのを見かけたので
その場合はなぜスレッドセーフで、上記のような場合はそうじゃない(?)のか気になったで質問しました。
よろしくお願いします。
377デフォルトの名無しさん
垢版 |
2017/08/28(月) 05:07:00.05ID:4ejthJEF
2, 30年やっていないと、マルチスレッド・プログラミングは出来ない

作っても、何十回に1回は、妙な動きをするから、使えない

しかも、たちが悪いことに、たいていは正常に動くから、
テストで発見できず、本番環境でバグる
2017/08/28(月) 06:02:19.75ID:9/ugOPx7
>>375
そんな嘘誰がいってるんだ?
2017/08/28(月) 06:15:29.06ID:IHzBG4Iq
>>375
実際発生するかは確認してないが考え方として

スレッドαが新しいインスタンスaを作りメンバ変数に代入
スレッドβが新しいインスタンスbを作りメンバ変数に代入
スレッドαがメンバ変数からインスタンスb(あれあれー)を取得しメソッドをコール
スレッドβがメンバ変数からインスタンスbを取得しメソッドをコール

この場合はスレッドαがメソッドを終了するまでスレッドβがコールを待てば発生しないねsynchronized
またはメソッドローカルな変数だとαとβが格納する先がそれぞれ別だから上書きされない

だと思う
2017/08/28(月) 06:17:34.69ID:IHzBG4Iq
>>377
ServletやAndroidはマルチスレッドでは
2017/08/28(月) 07:31:21.61ID:4ejthJEF
マルチスレッドの物は、相互には呼べない。
呼べたら、バグだらけになるから大変

相手のキューに投入できるだけ。
それを相手が、自分のタイミングで、拾って処理する

間接的な通信方式だけが認められる。
直接通信はできない。
直接通信すると、バグるだけ
2017/08/28(月) 08:23:21.64ID:Aloz5skw
>>381
まあまあ君、そんなに興奮しないでください
2017/08/28(月) 16:17:04.11ID:izWN4xqJ
jdk9に入ると言われてた型推論valって見送られたの?
384デフォルトの名無しさん
垢版 |
2017/08/28(月) 19:11:19.35ID:Zfeb1b7v
>>375
それでダメになるとしたら CalcSub が static のクラス変数を持っていて呼び出した処理の中でマルチスレッドを考慮せずにアクセスする場合だな。
385デフォルトの名無しさん
垢版 |
2017/08/28(月) 19:36:15.99ID:G4YrO8Fv
>>375
直接の答えになってないけど、
わりと大雑把にデザインしていくしかないと思う

〜複数のスレッドからアクセスされるオブジェクトはこれで
 そん中のメソッドがそれぞれ排他されている〜

こまかく排他や相互作用が入り組んでくると
んなもんはどうなってしまうか火を見るより明らか

排他処理のデザインを先にシンプルにかっちり作っといて
あとはそれだけを触らせる
まぁどうせ、どうしたってあとから徐々に複雑になっては来るんだけど…
2017/08/28(月) 19:44:26.46ID:ml0Q9t1V
ステートレス&ローカルを徹底すればいいだけだろ
2017/08/28(月) 19:51:36.15ID:rn9GWLpv
>>386
それは,まともなプログラムを書く上では不可能では
ステートはどうしても必要だ,NAND 二つでつくるフリップフロップですらステートがあるだろう?
2017/08/28(月) 21:08:49.30ID:ml0Q9t1V
>>387
一般的なWEBシステムなら意識しなくてもそうなるってぐらい簡単だよ
デスクトップで色々とリソースに触るやつは少し工夫がいるかもね
2017/08/28(月) 21:45:08.56ID:UF1juDl3
要は、難しいところはFWに任せて、土方は簡単なところだけコーディングしましょうってこと
2017/08/28(月) 21:53:13.49ID:Eg8/Ix/2
>>387
そんな低レベルの話ではないでしょう……
2017/08/28(月) 22:40:31.14ID:ml0Q9t1V
>>389
手続き型はやめようってはなしだろ?
392デフォルトの名無しさん
垢版 |
2017/08/28(月) 23:39:04.03ID:eSPpiGRP
では、CalcSubがこのような
クラスの場合は、上記のシチュエーションでも必ずスレッドセーフというわけですね。


class CalcSub{
final public int multiple(int value,int value2){
return value*value2;
}


ありがとうございまsた
2017/08/29(火) 13:11:22.25ID:M5SL5GoR
マルチスレッドでは、状態を持ったら、バグる。
だから状態を持たない、関数型言語が注目されている

そもそも、最速のNode.js なども、シングルスレッド。
Ruby の作者の、Matz ですら、マルチスレッドをやった事がない

まず、何十年もやっていないと無理。
マルチスレッドでは、シングルスレッド用の関数を使えない。
使うとバグるし、そもそも関数を、マルチスレッド対応で書く人は、いない

データ数が少ないと、マルチスレッドの方が遅くなる。
キャッシュ・メモリにも左右されるし、
速くなっても大したことない割には、開発費は何倍も掛かる。
というか、開発すればするほど、複雑すぎて開発不可能になっていくw
2017/08/29(火) 14:36:32.12ID:A+tXwp++
句点多すぎで読みづらい
スパゲティ文
2017/08/29(火) 16:56:55.55ID:eq9UJESX
1週間あれば入門書読めるだろ
何十年とかバカじゃないか
2017/08/29(火) 17:48:32.39ID:0M2qn692
>>394
句点ってw
2017/08/29(火) 18:46:05.86ID:cDDCr6AR
ほう、一週間でバクも起こさずにマルチスレッドプログラミングが出来るとな
2017/08/29(火) 18:46:35.11ID:cDDCr6AR
s/バク/バグ
2017/08/29(火) 19:33:04.52ID:Y/wjG5sQ
一週間で入門できても
一通り習得するのは
一年じゃ足りないからな
たいていの技術は
2017/08/29(火) 20:21:22.70ID:8M1VQrJQ
>>393
言語レベルでサポートされてるのに、どんだけ無能なんだよ
401デフォルトの名無しさん
垢版 |
2017/08/29(火) 22:31:12.64ID:vmCbO2W1
何十年も掛かることはまずないと思うがなあ・・・
402デフォルトの名無しさん
垢版 |
2017/08/29(火) 22:31:56.88ID:vmCbO2W1
何十年も掛かることはまずないと思うがなあ・・・
2017/08/30(水) 08:19:03.91ID:wr6FPFdN
最近やる気が出ずにJava勉強してない・・・
やらないとと思いながら結局何もしてない・・・
2017/08/30(水) 08:48:57.55ID:R7FBCReN
やる気が出ないってのなら必要としてないだけ
2017/08/30(水) 08:57:07.41ID:26KxM506
ユウナって1人だけドレコ4つなんやな
クラが3
他は全員2
2017/08/30(水) 09:15:08.90ID:j/drhsEx
Javaは1

smaller is better
407デフォルトの名無しさん
垢版 |
2017/08/30(水) 09:56:47.12ID:C4N26Ixh
>>403
Kotlinでもやってみなさい
2017/08/30(水) 10:02:14.08ID:jmJ2uPoL
コマンド覚えるレベルの超初級なのですが、コマンド入力したらマウスカーソルなど当てるとその意味を表示するようなソフトやウェブサイトありましたら教えてください。
2017/08/30(水) 12:03:19.87ID:2a6L+Efp
>>408
どんな環境で、何のコマンド?
まず用語からかな
410デフォルトの名無しさん
垢版 |
2017/08/30(水) 12:48:32.84ID:3eVDNogH
ググればいいような?

あ、そうだ。自分で作ればいいじゃん。
テキストファイルにコマンドと使い方書いといてそれ読んで画面にコマンド出しといてマウスカーソルが上に来たら使い方が出るみたいなやつ。
2017/08/30(水) 12:55:45.05ID:6un9/NsV
>>409
> 何のコマンド?
来いよベネット
2017/08/30(水) 14:51:36.52ID:2a6L+Efp
>>411
お前へのレスは最後にすると言ったな

あれは嘘だ
413デフォルトの名無しさん
垢版 |
2017/08/30(水) 21:03:40.59ID:vAN9hjOo
>>396
句点「。」と読点「、」だけど、逆だと思ってるひとは多い。
414デフォルトの名無しさん
垢版 |
2017/08/30(水) 21:06:32.18ID:vAN9hjOo
Javaプログラマはマルチスレッドにしなくてもいいのにマルチスレッドで作ったり、それぞれのスレッドで同じデータを参照、更新したがるから変なことになる。
415デフォルトの名無しさん
垢版 |
2017/08/30(水) 22:07:26.36ID:BAjgmjQJ
したがるかどうかは人による。
2017/08/31(木) 07:24:46.06ID:jBnRX0S+
>>404
それ真理だな
2017/08/31(木) 23:28:51.90ID:EcJJqLjf
質問です。
フィールド定数として下記のようなインスタンスを持つのはマルチスレッドプログラミング的に問題ありますか?

private static final Comparator<Date> COMPARE = new Comparator<Date>() {
@Override
public int compare(Date s, Date t) {
return s.compareTo(t);
}
};
418デフォルトの名無しさん
垢版 |
2017/09/01(金) 00:01:38.73ID:WY1jTmKi
>>417
その Date が java.util.Date ならそれ自体がスレッドセーフでないためにうまく動かない可能性がある。
Date のインスタンスを渡す側の問題だ。COMPARE.compare(s, t) のように渡すことになるだろうが、
この s, t が他のスレッドと共有されており尚且ついつ書き換えられるかわからない場合は比較している
最中に書き換えられる可能性がある。
2017/09/01(金) 00:02:44.96ID:WY1jTmKi
>>417
これも読んでみな。
http://www.atmarkit.co.jp/ait/articles/1412/16/news041.html
2017/09/01(金) 00:03:08.71ID:DL6ximvw
>>417
値が変化しないなら気にしなくておk
複数スレッドで書き換えるならvolatile付けとけ
2017/09/01(金) 00:18:20.76ID:WY1jTmKi
>>420
volatile 付けても複数のスレッドで同期取らずに書き換えるなら同じ事では?
2017/09/01(金) 00:25:43.65ID:mAYENdZK
用途としては、
class DateUtil {
private static final Comparator<Date> COMPARE = new Comparator<Date>() {
@Override
public int compare(Date s, Date t) {
return s.compareTo(t);
}
};
public static List<Date> sortDate(List<Date> dateList) {
Collections.sort(dateList, COMPARE);
return dateList;
}
}

こういうイメージです。
(sortするだけでわざわざreturnする必要ないかもしれませんが)

フィールド変数は、危ないかもしれませんが、定数COMPAREは、それ自身に、
インスタンス変数を持ちません。なので、こういう場合はスレッドセーフなのか気になりました。
2017/09/01(金) 02:21:00.03ID:WY1jTmKi
>>422
それ自身はスレッドセーフだが List も Date もスレッドセーフではないので
使う側で同期を取るか、または他のスレッドからアクセスされないように作る
必要がある。
2017/09/01(金) 04:51:05.87ID:rLv0uJJn
判定してる最中または後にt,sが示す時間が変更された場合か

スレッドセーフでないことをバグであるかのように見ている人がいるとやっかいそうだ
もうちょい誤解しにくい日本語訳ないかな
2017/09/01(金) 06:09:31.18ID:RTadbuNn
Ruby の作者の、Matz でも、マルチスレッドはやった事がない

普通、関数を書く時に、マルチスレッド対応で書く人は、いない。
誰も書いた事がないはず。
マルチスレッド対応で書くには、数十年の研究が必要

マルチスレッドどころか、コンテナでは、read 走査中に、
要素を追加しただけで、バグるように作られているものが、ほとんど

初心者がマルチスレッドをやるなど、30年は早い
2017/09/01(金) 06:55:47.73ID:s82kToZ5
マルチスレッドなんて簡単だよ
共有するデータはDBなどに集中させる
Javaでは基本的に共有しないでローカルコピーを使う
どうしてもJavaで共有したいならイミュータブルにするかスレッドセーフなライブラリを使う
2017/09/01(金) 09:53:20.19ID:Z9Fha70u
エンド - ユー子 - エージェント-JIET 公表価格 90~60 - エージェント×3 = 言い値50万以下
エンド - ユー子 - エージェント-JIET 公表価格 90~60 - エージェント×1 悪質な言い値で50万以下
エンド - ユー子 - エージェント-JIET 公表価格 90~60 - JIETに加入して公表価格で応募ができる
428デフォルトの名無しさん
垢版 |
2017/09/01(金) 10:17:49.06ID:bXCQIuYm
数十年も研究しなくても普通のプログラマなら数秒から数分で理解できると思うがなあ・・・
2017/09/01(金) 13:07:05.18ID:cnTQZK5F
普通のプログラマなら、プログラミングに関わるほとんどの概念は数分でマスターできるけど、ここ初心者スレだから、あまり簡単を強調しない方がいいかも
2017/09/01(金) 14:15:39.27ID:9fFcfHIv
数分で理解できるは
それはそれで嘘
2017/09/01(金) 18:12:54.04ID:e0+gOffZ
大企業様のオレオレフレームワークも数分でマスターできるのか
432デフォルトの名無しさん
垢版 |
2017/09/01(金) 22:28:02.34ID:fQM1CpIl
>>430
そうか?そりゃ余程へんな解説を聞いたかサンプルプログラムがサンプルと言えないほど複雑でクソだとかそういう特殊な場合ではないか?
2017/09/01(金) 22:37:22.34ID:9fFcfHIv
たとえば関数型プログラミングを
初見で数分で理解できたわーって
スラスラ書けるプログラマなんかほぼいない
2017/09/02(土) 00:06:17.15ID:wVJ/JGX4
マルチスレッドの話だろ?そんなの概念は直感でわかるだろ。
環境や言語やそのライブラリに応じて実現方法が違うだけで。
2017/09/02(土) 08:19:30.69ID:oilxAadu
直感で分かる言うひとと〜
すぐには理解できない言うひとの〜

想定してるもんがちがう〜

ちがう〜
436デフォルトの名無しさん
垢版 |
2017/09/02(土) 09:34:27.23ID:SHTItmsy
>>423
では、渡すパラメータがローカルメソッドから渡されて、かつフィールド等にセットされない変数なら
スレッドセーフが保証されるわけですか?
437デフォルトの名無しさん
垢版 |
2017/09/02(土) 13:46:02.16ID:5eH5prYD
>>436
スレッドセーフは保証されるよ
ローカル変数はスタックメモリに置かれてスタックメモリは
スレッドごとに独立してるから共有されないし
Comparatorは状態を持たないからね
438デフォルトの名無しさん
垢版 |
2017/09/02(土) 13:54:08.95ID:wVJ/JGX4
基本は他のスレッドから書き込みアクセスされる可能性があるかないかだ。
あるのならセーフではない。なければセーフ。それだけの話。
2017/09/02(土) 13:56:04.80ID:CJZVlBwp
ServletやAndroid書いてればマルチスレッド嫌でも使うだろ
2017/09/02(土) 14:14:01.88ID:LBbAGOgx
今さらdoxygenの存在知ったけど便利だなこれ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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