X



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

■ このスレッドは過去ログ倉庫に格納されています
0286デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:26:09.39ID:JLvLp2X8
>>283
設計段階で同じものだってわかってるなら何使ったってどうにでもなるわ!
オブジェクト指向関係ない
そのあとで実はここ違いますってなったとき

IF文:分岐を入れる
オブジェクト:ケースに応じて継承もしくは別クラス作成
コピペ:該当部分を修正

コピペが最優秀なんだけど
0287デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:28:04.90ID:3EZq4DC0
その該当部分が鼠算で無限増殖していくのであっという間に手に負えなくなる
コピペは死罪
0288デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:34:53.83ID:JLvLp2X8
そんなに増えないって
結合テストのケースに応じてコピペすりゃいいんだ
どうせまとめたって機能別に試験させられるんだからそこがボトルネックのはず

むしろ同じテストが完了した時点で
同じものがたくさんできているので生産性が高いといえよう
0289デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:36:39.69ID:uBm+ojOM
同じ記述はメンテ的に良くないので避けるべき、と習ったよ
修正箇所を少なく作るのが江戸っ子らしい
ただそんな書き方は素人の俺には思いつかないのが問題
0290デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:43:55.23ID:JLvLp2X8
まとめたら単体まで作るときは楽なんよね…
まとまってるぶん網羅しやすいからブラックボックステストの試験ケース少なくて済む

でもIF文とか継承まみれになると可読性めっちゃさがる
0292デフォルトの名無しさん
垢版 |
2017/08/11(金) 21:53:13.03ID:3EZq4DC0
if文が増えるなら
業務分析が下手くそ
設計が下手くそ
コーディングが下手くそ
0295デフォルトの名無しさん
垢版 |
2017/08/11(金) 22:13:39.81ID:+73EubJb
   彡 ⌒ ミ  彡 ⌒ ミ
  ( ´・ω・)  ( ´・ω・)
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄ カタカタ ̄ ̄

   彡 ⌒ ミ  彡 ⌒ ミ
  ( ´・ω・)  .(・ω・` )ヾ < なぁ、これって
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄    ̄ ̄ ̄

   彡 ⌒ ミ  彡 ⌒ ミ
  (  ´・ω)  .(・ω・` )
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄    ̄ ̄ ̄

  彡 ⌒ ミ   .彡 ⌒ ミ
  (´・ω・`)   (´・ω・`) また、かみの話してる
_(__つ/ ̄ ̄ ̄/つ/ ̄ ̄ ̄/
  \/    / \/    /
     ̄ ̄ ̄    ̄ ̄ ̄
0298デフォルトの名無しさん
垢版 |
2017/08/11(金) 22:53:51.24ID:GWHLh1ZD
このハ・・・
0299デフォルトの名無しさん
垢版 |
2017/08/11(金) 23:22:48.62ID:uuzmQ1J4
>>286
仕様と1対1にできるのがオブジェクト指向のいいとこだろう
言ってることが真なら設計に戻るだけ
コードだけ変えてメンテできなくなるのは初心者が陥りがちな罠
0300デフォルトの名無しさん
垢版 |
2017/08/11(金) 23:47:13.60ID:VT8Bdzbq
>>289
それむしろ逆。共通化してしまうと仕様変更で別々になる可能性がある。

共通化は本当に共通化したい部分にすべきことであって、何でもかんでも共通化は間違い。
0301デフォルトの名無しさん
垢版 |
2017/08/11(金) 23:48:26.02ID:VT8Bdzbq
いまどきJavaでオブジェクト指向にこだわっているのは考え方が古い。
0303デフォルトの名無しさん
垢版 |
2017/08/12(土) 07:28:02.61ID:wZgNEoNa
ビット演算について教えて下さい。
ビット演算子(&,|, ^)の右側と左側で桁数が違うときは、どういう処理がされるのですか?
0304デフォルトの名無しさん
垢版 |
2017/08/12(土) 08:21:47.95ID:WyVA8Sgg
>>302
データベースとのやりとりは結局、解決してないけどな。
0305デフォルトの名無しさん
垢版 |
2017/08/12(土) 08:31:15.18ID:w+TtGEkw
>>303
例えば、8・16ビットで、ビット演算して、何ビットの結果が必要なんだ?

少ない方の結果が必要なら、多い方を、少ないビットに変換すればいいし、
多い方の結果が必要なら、少ない方を、多いビットに変換すればいい

多いビット・少ないビットの、変換関数を探すか、自分で作ればいい
0306デフォルトの名無しさん
垢版 |
2017/08/12(土) 09:08:08.52ID:wZgNEoNa
>>305
やりたいことは符号無しintをlongに型変換したいのです。
どこかのサイトを見たところ、
longNumber = unsignedInt & 0x00000000FFFFFFFF
とすればいいらしいのですが、

そもそも桁違いでビット演算したらどうなるんだ?というのが気になりまして。

小さい方を大きいほうの型にキャストしてるのか、
それともキャストしてるんじゃなくて桁を増やしてるのか…
桁増やすにしても、符号拡張してるのか、0で埋めてるだけなのか…

気になって夜も眠れますん。
0307デフォルトの名無しさん
垢版 |
2017/08/12(土) 10:00:34.76ID:WyVA8Sgg
>>306
目的に対してどうしてそういう手段でやっているのか?
0308デフォルトの名無しさん
垢版 |
2017/08/12(土) 13:30:45.00ID:VqNg7Zuq
>>306
Chapter 15. Expressions
https://docs.oracle.com/javase/specs/jls/se8/html/jls-15.html#jls-15.22.1
|
| 15.22.1。 整数ビット演算子&、^、|
| オペランドに対してバイナリ数値昇格が最初に実行されます。
|
| 5.6.2。バイナリ数値昇格
| いずれかのオペランドがdouble型であれば、他方はdouble型に変換されます。
| それ以外の場合、どちらかのオペランドがfloat型であれば、もう一方はfloat型に変換されます。
| それ以外の場合、どちらかのオペランドがlong型であれば、他方はlong型に変換されます。
| それ以外の場合、両方のオペランドがint型に変換されます。

ということなので今回の場合はlong型に変換されるはずよ

> longNumber = unsignedInt & 0x00000000FFFFFFFF

これは末尾にLをつけないとlongにならないかと

> int unsignedInt = -1;
> long longNumber = unsignedInt & 0xFFFFFFFFL;

上をコンパイルして逆コンパイルしたら下になった

> int unsignedInt = -1;
> long longNumber = (long)unsignedInt & 4294967295L;

なので型の変換はキャストっすね

Java 8ならInteger.toUnsignedLongというメソッドが用意されてるので
そっちが良いかも
0309デフォルトの名無しさん
垢版 |
2017/08/13(日) 01:18:20.66ID:SYaWjJhn
型違いって言うのが、典型的なバグの条件

MISRA-C などでは、バグを防ぐために、
元から、型が異なるものを演算してはいけないというルール

「A 演算子 B」と書く場合、A, B は絶対に同じ型である必要がある

だから、この式の前に、絶対に同じ型にしているから、
型変換のルールに、疑問など生じない

>>308
に書いているような型変換のルールを、探してきて見直すような、
暗黙の型変換というのは、すごく単純な場合を除き、使わない方がいい

机上デバッグで、毎回、型変換のルールを見直して、
あれこれ議論しないといけないから面倒

しかも、開発メンバーが変わるたびに、説明・確認しないといけない

基本的に、言語仕様書を引っ張りだして、確認するようなものはダメ。
言語仕様書が必要な、コーディングをしてはいけない。
言語仕様書を見ない人もいるし、バグるだけ
0310デフォルトの名無しさん
垢版 |
2017/08/13(日) 01:57:33.90ID:aXXBQeA8
PASCAL みたいなのがいいってことかな。
0311デフォルトの名無しさん
垢版 |
2017/08/13(日) 02:04:55.15ID:s7ggTJlx
C言語はJavaより型付けが弱いんじゃないかな
ブーリアンもないし
0313デフォルトの名無しさん
垢版 |
2017/08/13(日) 07:08:01.01ID:WltPyYK1
>>308
完璧な回答ありがとうございます。
私の知りたかったこと全てと、私の知らなかったことが入ってました。
L付けておきます。

残念なことに、java1.7なのです。androidなもので。
0314デフォルトの名無しさん
垢版 |
2017/08/13(日) 07:09:42.70ID:WltPyYK1
>>309
はーい。あざーっす。
オペランドの片側に(long)付けておきます。
0315デフォルトの名無しさん
垢版 |
2017/08/15(火) 16:59:30.70ID:RbnTXkE5
今日からjavaはじめる
よろしくおまいら
初心者レベルだけどC言語から入ってjavaはじめるんだけど文字列結合とかキャストとか省略が許されててむずむずするわ
0316デフォルトの名無しさん
垢版 |
2017/08/16(水) 09:09:46.76ID:qOG9houb
実装者が楽になる言語仕様がバージョンアップのなびに追加されるから
このせいで理解してない人が書いたクソコードが万延する諸刃の剣になってる
0317デフォルトの名無しさん
垢版 |
2017/08/16(水) 10:09:58.32ID:F4bo7YNW
>>316
本来の書き方をわかってて省略するのとそういうもんだと思って書くのとでは雲泥の差があるな
0322デフォルトの名無しさん
垢版 |
2017/08/16(水) 17:14:50.23ID:qxnt2v0K
>>320
いきなりメソッドの初めで戻り値を変数に設定して、メソッド内で上書かずに最後でreturn。
0323デフォルトの名無しさん
垢版 |
2017/08/16(水) 19:48:31.09ID:ey68s8sH
Java最大の失敗はBean
これのせいで日本企業の所有するコードはパブリックアクセサだらけの地獄になった
0324デフォルトの名無しさん
垢版 |
2017/08/17(木) 00:48:02.70ID:x9wW63w8
>>322
変更があった時に、その変数を弄べばいいだけになるから
割と良いと思うけど

逆の変更があったからあなたが見た状態になったのかも知れないし
0325デフォルトの名無しさん
垢版 |
2017/08/17(木) 06:28:14.94ID:8r7YxJOf
>>324
あなたの解釈だとコーディングミスを想定していない。
0326デフォルトの名無しさん
垢版 |
2017/08/17(木) 14:38:05.88ID:G+zZ9zG7
超初心者ですまん
メソッドを数値で分けて呼び出したいんだけど
今使ってるのがswitchでの分岐
int a;
switch(a){
case 1:
hoge();
break;
case 2:
hogee();
break;
}
みたいな

もっと効率の良いやり方があったら教えて欲しい
0327デフォルトの名無しさん
垢版 |
2017/08/17(木) 15:17:28.53ID:aODDrPp/
>>326
幾つぐらい分岐するのかな?少ない場合はそっちの方が速いような気がするが。

分岐が沢山あるとか増え続ける可能性があるとか使う側で自由にセットしたいとかいう場合はまずinterface作っておいてその中にメソッドの定義を書いておく。
次にそれをimplementしたクラスを必要なだけ作っておき、HashMapにキーと共にインスタンスを入れておく。
後はそのHashMapからキーを使ってget()してメソッド呼ぶだけ。
0328デフォルトの名無しさん
垢版 |
2017/08/17(木) 15:33:57.25ID:XeZ7degk
c言語の入門書が一通り終わってオブジェクト指向も触りたくなったんでお勧めの入門書教えて下さい
0329デフォルトの名無しさん
垢版 |
2017/08/17(木) 16:06:35.83ID:OlLybMzW
(´・ω・`)あのー
すべての文字列はStringクラスのインスタンスとしてあつかわれるっていう表現がうまくイメージできないの
じぶんなりにまとめたのは

String s = "こんにちは"
これは
String s = new String(こんにちは)
と同じでStringクラスをインスタンス化するときに、コンストラクタに対して引数としてこんにちはをわたしてる
そしてインスタンス化されたStringクラスのメンバ変数にこんにちはが代入された
同じようにすべての文字列は扱われるので、
すべての文字列はStringクラスのインスタンスとしてあつかわれると表現される

このイメージでいいの?
くわしいひとおしえてくれませんか?
0330デフォルトの名無しさん
垢版 |
2017/08/17(木) 16:09:03.31ID:8r7YxJOf
>>329
Stringはよく使うクラスだから、特別な表記があるだけ。
0334デフォルトの名無しさん
垢版 |
2017/08/17(木) 19:12:28.02ID:x9wW63w8
>>325
可能性を上げてるだけなのに想定って
君の思う一番のコーディング以外は全てミスってことか?
0335デフォルトの名無しさん
垢版 |
2017/08/18(金) 14:05:01.42ID:uPv212Ws
>>334
ダメな例だよ。

変数が変数たる存在を理解してない。
0337デフォルトの名無しさん
垢版 |
2017/08/18(金) 17:12:35.77ID:uPv212Ws
>>336
日本語わかりますか?
0338デフォルトの名無しさん
垢版 |
2017/08/18(金) 18:31:21.19ID:Rznosojv
>>337
それが日本語だとすると
変数が理解してない
というように解釈できるぞ
正しい文章とは、誤解の余地がない文章だろう

そんなこといいから、そういったコーディングをした時に発生し得る問題を挙げろよ
0339デフォルトの名無しさん
垢版 |
2017/08/18(金) 18:34:12.33ID:pRy4OxRt
普通なら「変数が変数たる理由を理解してない」っていうわな
まあ普通の人は各自で補って、それを論ったりはしないだろうけど
0340デフォルトの名無しさん
垢版 |
2017/08/18(金) 18:55:17.40ID:Rznosojv
あー定数やfinalでいいじゃんってことか
finalじゃないから>>324なんだろ

現場でやってれば、そういう問題集解いただけの発想だけでは居られない
0341デフォルトの名無しさん
垢版 |
2017/08/19(土) 08:15:29.19ID:IZN9Kb9e
private staticメソッドを使う意味ってありますか?
オーバーロードしたpublic staticメソッドの受け先以外の使い方で
0343デフォルトの名無しさん
垢版 |
2017/08/19(土) 14:46:54.88ID:hY6XbUY2
long x
x = Integer.parseInt(str.substring(121,131))

文字列の一部から10桁のlong型の数値を取得しているのだけど
この取り出したい数値が大きい時に、 x=0 になってしまう不具合があるのだけどどうすればいいでしょうか
0344デフォルトの名無しさん
垢版 |
2017/08/19(土) 14:54:42.91ID:yBrPcq+R
>>343
Long.parseLongで
0347デフォルトの名無しさん
垢版 |
2017/08/24(木) 19:19:42.05ID:JFHydDe1
スッキリわかるjava入門を電子書籍で読んでいるのですがラッパーの記述が何処にあるかわからないです
書籍をお持ちの方教えて頂けないでしょうか?
0351デフォルトの名無しさん
垢版 |
2017/08/25(金) 11:04:00.00ID:0JW1nIZL
電子書籍っていっても文字で情報を持ってるわけじゃないから検索はできない(普通に索引はある)
0354デフォルトの名無しさん
垢版 |
2017/08/25(金) 19:35:16.88ID:H2xWyZEq
静的初期化ブロックでif文使ってるようなクラスのカバレッジを100%にすることって出来ますか?
0355デフォルトの名無しさん
垢版 |
2017/08/25(金) 20:03:58.53ID:E3yIY7Cv
>>354 のようなのを見ると、どうして初心者は言葉足らずが多いのかと、いつも思うよ。
0356デフォルトの名無しさん
垢版 |
2017/08/25(金) 21:39:57.94ID:27FuNdyg
メソッドを作成し、呼び出せコリャ
メソッド名は命名規則にのっとって自由に決めてちょ。
値を定義済みの整数配列型と、整数型の値a, b を引数に渡して呼び出すと添え字 a の位置に b の値を挿入し整形済みの配列を戻り値として返すただし、元のデータは失われない
ただし、配列の長さは変化してよし。
0357デフォルトの名無しさん
垢版 |
2017/08/25(金) 22:03:30.09ID:h0dKu5Bs
自炊してもスキャンした画像をOCRソフトに読ませてテキスト作らせて画像と一緒にPDFファイルに組み込む事は可能。
0359デフォルトの名無しさん
垢版 |
2017/08/25(金) 22:08:03.15ID:h0dKu5Bs
>>354
君の言っていることの意味がわからない。
0360デフォルトの名無しさん
垢版 |
2017/08/25(金) 22:13:20.05ID:h0dKu5Bs
>>356
ヒントだけ書いとこう。

1. 配列を List に入れる。
2. add()で途中に挿入。
3. 配列にして返す。
0362デフォルトの名無しさん
垢版 |
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;
}
0365デフォルトの名無しさん
垢版 |
2017/08/26(土) 08:40:40.53ID:dAUznQNC
低レベルスレは宿題ばっかやるアホが多くてホント呆れるわ
チラシの裏でやれドアホ
0366デフォルトの名無しさん
垢版 |
2017/08/26(土) 09:32:58.96ID:yjz2CD2O
>>354
System.loadLibraryを特権計算か何かで呼んでるんだろうけどまずカバレッジ100%目指すってのがおかしい
言葉足らずとは思わないが
0372デフォルトの名無しさん
垢版 |
2017/08/27(日) 01:30:32.99ID:Xa66qldf
プログラミング超初心者です

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

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

助言いただけると幸いです
0373デフォルトの名無しさん
垢版 |
2017/08/27(日) 05:51:11.36ID:uirFB7xG
>>372
Androidの開発環境についてるサンプルアプリ動かしてそれ改造したりくっつけてきゃいいよ
設計学びたいなら本読め
0375デフォルトの名無しさん
垢版 |
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クラスをインスタンス化したときも、危ないのでしょうか。
メソッド内の変数はスレッドセーフと聞きますが。
呼び出すたびに新しいインスタンスを生成しても危ないのですか?
0376デフォルトの名無しさん
垢版 |
2017/08/28(月) 02:16:05.97ID:eSPpiGRP
上記の場合、フィールドに無理やり変数を持つ意味はありませんが、
よくフレームワーク等だとフィールドに変数とアノテーションで宣言しているのを見かけたので
その場合はなぜスレッドセーフで、上記のような場合はそうじゃない(?)のか気になったで質問しました。
よろしくお願いします。
0377デフォルトの名無しさん
垢版 |
2017/08/28(月) 05:07:00.05ID:4ejthJEF
2, 30年やっていないと、マルチスレッド・プログラミングは出来ない

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

しかも、たちが悪いことに、たいていは正常に動くから、
テストで発見できず、本番環境でバグる
0379デフォルトの名無しさん
垢版 |
2017/08/28(月) 06:15:29.06ID:IHzBG4Iq
>>375
実際発生するかは確認してないが考え方として

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

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

だと思う
0381デフォルトの名無しさん
垢版 |
2017/08/28(月) 07:31:21.61ID:4ejthJEF
マルチスレッドの物は、相互には呼べない。
呼べたら、バグだらけになるから大変

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

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

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

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

排他処理のデザインを先にシンプルにかっちり作っといて
あとはそれだけを触らせる
まぁどうせ、どうしたってあとから徐々に複雑になっては来るんだけど…
■ このスレッドは過去ログ倉庫に格納されています

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