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

■ このスレッドは過去ログ倉庫に格納されています
2017/04/04(火) 20:41:11.59ID:y0EcmGB0
Java初心者のためのスレッドです。

※前スレ
Java入門・初心者質問スレ Part.2
http://echo.2ch.net/test/read.cgi/tech/1478863511/
2017/04/05(水) 09:51:39.56ID:nC3E9c0D
前スレ >>997
onCreateってのはAndroidでそのActivityが作られたときに走る処理だからそこでgetTextしてもEditTextの中が空だから怒られてる。
確定ボタンをButtonで作ったりキーイベントReturnを捉えるイベントリスナーの中でやるべき。
3デフォルトの名無しさん
垢版 |
2017/04/05(水) 18:26:37.85ID:XSIU9b3V
JHoshu
4デフォルトの名無しさん
垢版 |
2017/04/05(水) 19:49:27.33ID:xPaGCN9C
>>1
2017/04/05(水) 20:16:36.85ID:p+fIavz2
>>2
わざわざありがとうございます。
ようやく思い通り動くようになりました。
まだ細かい改善点はあるのでもう少し勉強してみます。
6デフォルトの名無しさん
垢版 |
2017/04/05(水) 23:22:35.35ID:Ansd+i4M
>>999
なるほど。ポインタみたいなものでしたか。ご教授ありがとうございます。

>>1000
やはりitemにそれぞれの値を格納するほうがOOらしいですね。参考にします。

ありがとうございました。
2017/04/06(木) 00:09:53.06ID:b0BXYKSq
あるクラス内の2つのメソッドの中身を途中で何度も書き換えたいんだけどどう実装したらいい?
関数ポインタを扱うのように、途中で関数を書き換えたい。

抽象クラスを継承することで、メソッドの書き換えは出来るものの、継承したクラスの宣言時の一度しか
メソッドを書き換えられないと思うんだけど、他に方法はある?
8デフォルトの名無しさん
垢版 |
2017/04/06(木) 01:36:02.66ID:iHw/QSTR
>>7
インスタンス入れ替えるだけじゃだめなのか?
例えばこんな風にして同一のインターフェースを実装した A, B のクラスを作っておく。

interface X {
 int methodA(int a);
 int methodB(int b);
}

class A implements X {
 int methodA(int a) {
  // 処理A-A
 }

 int methodB(int b) {
  // 処理A-B
 }
}

class B implements X {
 int methodA(int a) {
  // 処理B-A
 }

 int methodB(int b) {
  // 処理B-B
 }
}

で、使う所では
X x = new A();
のようにして int a = x.methodA(1); とか int b = x.methodB(2); とかして使う。class B の方に切り替えたくなったら x = new B(); として同様に x を通して使う。
2017/04/06(木) 02:01:39.25ID:FGV9lFi+
>>7
なんでそんなことしたいのか説明して
実装の話はそれから
2017/04/06(木) 10:42:30.59ID:wo+kdFBC
>>7
スマホからだから適当だけど
public class Sub{

private Function func;

public void setFunc(Function func){
this.func = func;
}

public Function getFunc(){
return this.func;
}

}

あとは呼び出し側で
Function<Integer,Integer> func = x -> x+1;
Sub sub = new Sub();
sub.setFunc(func);
Sysyem.out.println(sub.getFunc().apply(10));

これでどうだ
使えるかどうかは知らん
2017/04/06(木) 16:06:42.01ID:8OEcGMYc
>>7
Javaは静的に定義してコンパイルする言語だから実行中の動的書き換えは無理
9が言ってるように目的は何なのかを書け
2017/04/06(木) 20:32:34.33ID:vtBceFIS
>>11
関数ポインタのように差し替えたいって言ってるからinterfaceの差し替えでいいんしゃないの
リフレクションでもいいけど
2017/04/06(木) 21:14:24.31ID:O3QBzUs3
じゃあFunctional Interfaceで
http://ideone.com/AghCys
2017/04/06(木) 21:39:53.20ID:vtBceFIS
結局波平か
15デフォルトの名無しさん
垢版 |
2017/04/06(木) 23:04:04.80ID:Lft96QhP
>>7
君の言う「宣言」ってのは「new」の事かな?
抽象クラス「interface XXX」を継承したクラス
「class AAA implements XXX」と、
「class BBB implements XXX」の2つ作ったとして、
「XXX XYZ=(XXX)new AAA()」としたらXYZのインスタンスはAAAだよね。
「宣言時の一度しかメソッドを書き換えられない」と言ってるけどソレって、
newした後で「XYZ=(XXX)new BBB()」と上書きしたらダメだと思ってない?
良いんだよ?XYZに元から入ってたAAAは消滅して新たにBBBが入る。
C言語の常識でmallocしたらfreeするみたいに考えてないか?
あと「メソッドを書き換える」というのは根本的に考え方がおかしい。
考えてるプログラムの構造がC言語っぽい。JAVAにはJAVAに合った構造がある。
短いサンプル書いて意見を聞いた方が良いと思うな。
2017/04/07(金) 00:39:47.52ID:g05Ok9Aj
https://ideone.com/Vf6xoW
上のソースコードが、イデオンだと実行時エラーに
なってしまいます。原因を教えて頂けないでしょうか。
2017/04/07(金) 01:02:07.87ID:E+iT9RU9
5行目のScannerが佐藤までバッファに読み込んでいて、
7行目のScannerがなにも読み込ないから。

https://ideone.com/0RB6Do
2017/04/07(金) 01:02:48.90ID:KCHCaqUQ
>>16
何故IDEとか使わずにコード張るサイト使うのか分からん
とりあえず普通に実行したら実行時にエラー吐かなかったから
idone使う時の入力方法を自分で調べるしかないだろ
1916
垢版 |
2017/04/07(金) 03:02:40.52ID:g05Ok9Aj
>>17 >>18
ありがとうございます。
実は前スレでも似たようなことを質問させて頂きました…。

>>18
自分のパソコンに入っているエクリプスでは普通に出力されます。
ここにソースコードを貼るためにイデオンを使ってます。


String name1 = new java.util.Scanner(System.in).nextLine();
という表記法にはどんな問題があるのでしょうか?
スッキリわかるJavaに載っていたのですが。
どなたか教えてくれませんか?
ググってもこの表記法は見つかりません…。
2017/04/07(金) 04:15:47.44ID:E9+XPTIr
アイディーイーワン

1つのストリームに対して2つのScannerを使ってるのがいけない
俺の環境(1.8系)だとエラーになるよ
2017/04/07(金) 04:20:28.04ID:E9+XPTIr
これ
https://www.securecoding.cert.org/confluence/display/java/FIO06-J.+Do+not+create+multiple+buffered+wrappers+on+a+single+byte+or+character+stream
22デフォルトの名無しさん
垢版 |
2017/04/07(金) 13:21:40.10ID:Q8YZksVL
>>16
表記法の問題じゃないよ。根本的な事が解ってない。
C言語で言う所のgets()と勘違いしているでしょ。
name1に入力してエンター押したら次にname2の入力待ちになると思ってない?
20氏が書いてる事の意味わかる?それだとname1とneme2が同時に開く。
間に「入力待ち」を入れないといけない。
ttp://tkykhk.hatenablog.com/entry/2013/08/15/172825
これで言うとhasNextInt()の事ね。
23デフォルトの名無しさん
垢版 |
2017/04/07(金) 15:10:53.06ID:440JjrFN
Androidウェアラブル端末のBluetoothを用いて、端末所持者同士のすれ違いを検知するアプリケーションを製作しています。
APIレベルは19、4.4のKitKatです。

プログラムでは検知したBLEMACアドレスをテキストファイルに書き込む動作をおこなっています。
端末情報の項目などで確認できるBluetooth Device Address(BDA)を取得したいのですが現在は
*Random Addressを取得している
*GATTサーバのMACアドレスを取得している
のどちらかが発生しています。
こう考えた理由は生成したログファイルを確認すると一定時間ごとに同じ端末から得られるMACアドレスが変化している為です。
具体的には、作成したプログラムを稼働させた探知機でBeacon発信機を検出しそのMACアドレスと検出時刻をログファイルに書き込んでいます。
一日の稼働でおよそ100件ほど得られたデータのおいてすべてのMACアドレスが重複しない状態となっているからです。


相手方のBDAを取得する関数またはUUIDなど固有の番号をBluetoothの”検知”段階で入手する手段を教えて頂きたいです。
ご助言宜しくお願いします。
24デフォルトの名無しさん
垢版 |
2017/04/07(金) 16:38:24.04ID:10W/Ra3M
もうイデオンでいいわw
2017/04/07(金) 17:25:04.53ID:am4C8gz9
>>23
ここはJavaスレなんで泥特有の質問は泥スレにどうぞ

Androidプログラミング質問スレ revision53
ttp://echo.2ch.net/test/read.cgi/tech/1488052551/
2616
垢版 |
2017/04/07(金) 20:57:30.40ID:g05Ok9Aj
>>20 >>21 >>22
ありがとうございます。

アイディーイーワンって読むんですね。

ちょっと調べてみて、またレスしたいと思います。
27デフォルトの名無しさん
垢版 |
2017/04/07(金) 21:24:00.28ID:a6ogP8yx
井出椀
2822
垢版 |
2017/04/08(土) 12:16:45.55ID:OP2gpsJ+
16氏のレスは何か学生が先生に質問してるような雰囲気で若さを感じるんだが、
残念な事にIDEをイデオンと読むもんだから40歳以上とバレてしまっている。
2017/04/08(土) 12:25:43.95ID:TxXYCj/0
(20代だけどずっとイデオンって読んでた……)
30デフォルトの名無しさん
垢版 |
2017/04/08(土) 12:35:44.62ID:4NiiBXjv
意外と有名
またはアニヲタ
2017/04/08(土) 12:35:48.36ID:CqR65F9s
>>28
>>16は↓のスレでコテハンと遊んでる34歳の無職だよ
ねねっちと一緒にプログラムを勉強するスレ第2話 [無断転載禁止]©2ch.net
http://echo.2ch.net/test/read.cgi/tech/1489809785/

34歳、発達障害の無職ですが…4 [無断転載禁止]©2ch.net
http://tamae.2ch.net/test/read.cgi/prog/1486352667/
2017/04/08(土) 12:44:33.10ID:ryFntO7G
一行辺りは半角26文字で600万行あるテキストファイルの中身を
要素の数600万として一行づつ配列にいれていこうと思うのですが大丈夫でしょうか?
33デフォルトの名無しさん
垢版 |
2017/04/08(土) 12:45:57.94ID:DTMJtpt4
>>32
余裕です
34デフォルトの名無しさん
垢版 |
2017/04/08(土) 12:46:36.51ID:DTMJtpt4
312MB、余裕です
2017/04/08(土) 12:52:36.33ID:ryFntO7G
このテキストファイルもjavaで入力しましたが、全部書き込み終わるのに8時間から半日くらいかかってたと思います。
2017/04/08(土) 12:55:54.81ID:ryFntO7G
>>33
ありがとうございます
メモ帳でこのテキストファイル開いてもパッとは開かないので不安ですがやるだけやってみます
37デフォルトの名無しさん
垢版 |
2017/04/08(土) 12:57:12.51ID:DTMJtpt4
>>35
ソースコード見せて
38デフォルトの名無しさん
垢版 |
2017/04/08(土) 13:00:01.26ID:DTMJtpt4
>>36
メモ帳はね、uniscribeっていうリガチャやカーニングに対応した
高度なテキストレンダラを使ってるからもっさりしても仕方がない
39デフォルトの名無しさん
垢版 |
2017/04/08(土) 14:24:59.52ID:QfXapNKS
余裕かどうかは動かすマシンによるのでは?
40デフォルトの名無しさん
垢版 |
2017/04/08(土) 14:33:44.07ID:DTMJtpt4
その発想はなかったわ
2017/04/08(土) 14:38:51.91ID:YTkzg0Hn
ランダムな26文字の文字列600万行のファイルを作ってみたが3秒くらいだった
8時間〜半日かけてどういうデータを作ったのかが気になる
2017/04/08(土) 14:39:55.19ID:TxXYCj/0
その内一般家庭のPCスペックが「京」並になる時代がくるからへーきへーき
43デフォルトの名無しさん
垢版 |
2017/04/08(土) 17:01:59.34ID:MZUufgxp
そういやJavaVMが使うメモリのデフォルトって今は多くなってんのかな?
これが小さい場合は自分で大きくなるようにオプション付けてVM動かさないとメモリオーバーフローになるよな。
2017/04/08(土) 19:29:50.65ID:FurKv1hb
vmが入ってる電子計算機でしか動かないjavaに深入りする価値あるんですか。
45デフォルトの名無しさん
垢版 |
2017/04/08(土) 20:17:39.84ID:MZUufgxp
>>44
価値か。価値ねえ。それはあなたが何を求めているかで変わるんじゃないかな。

例えばAndroid用アプリを作って売るとか、無料ゲーム作ってサイト内課金で稼ぐとか、そういう商売してるなら少し遠回しではあるけどJavaに価値があるということになると思う。
実際に金稼げるわけだしね。Androidの端末は沢山出回っててユーザも多い。
4622
垢版 |
2017/04/09(日) 04:05:43.60ID:o//fitNy
>>44
私もつい最近まで貴方と同じ考えで、javaを使い始めたのは今年からです。
ホームページでの説明にApplet版CADを使い、商品はC言語みたいな事をするつもりで
まずオールJavaでAppletのCADを作ってみたんですが、想像以上に動作が軽かったです。
巨大なデータを扱うつもりで無ければAppletで充分だと思いました。
それより何より、Javaはプログラミングが物凄く楽です。
C言語ですとイベントの順序とか挙動で思い通り行かずグチャグチャになりますけど、
javaだと問題そのものが存在しないというか対策済みという感じですね。
それと、私は未だ弄ってないですが、データベースを触るのが簡単そうです。
あと、Windowsで例えば動画再生なんかはCOMコンポーネントだのDirectShowだの
数々の山を乗り越える必要が出てくる事が非常に多いのですが、
Javaだと専用ライブラリを使ってチョチョイのチョイで済む事が多いようです。
そんな感じで、私はなるべくjavaでやりたいと思うようになりましたよ。
4716
垢版 |
2017/04/09(日) 23:24:51.53ID:ySXi9r1b
>>28
若くはないですが、40まではいってませんよ。
あれは最初イデワンって読むと思ってましたが、Google検索の予測変換でイデオンってのが多かったから、ついそう読むのかなって勘違いしてしまったんです。
2017/04/10(月) 03:52:41.97ID:NTVTXuq3
>>47
その話はもう終わってる空気読め
49デフォルトの名無しさん
垢版 |
2017/04/10(月) 20:57:16.98ID:AyjhZMz0
Air wife
2017/04/11(火) 19:46:28.08ID:R28Sl2m+
= new Air();
2017/04/11(火) 21:28:46.27ID:A5AwerKU
String a = new String("hello world") ;

String a = "hello world" ;

これは略し方の違いなだけで同じ意味なんでしょうか?
2017/04/11(火) 21:37:35.09ID:UT2aAcJz
うん。
手続き型言語では文字列を簡単に宣言できて、オブジェクト指向になったらいちいちnewするとか劣化のイメージだから、特別な記法としてC++とかからの伝統的な記法。
2017/04/11(火) 22:44:52.71ID:XRUbE8gX
別じゃね?
String a = new String("hello world")では新しく作られたStringオブジェクトの参照が代入されるけど、
String a = "hello world"ではコンスタントプールにある参照が代入される。

"hello world" == "hello world"はtrueになるけど、
"hello world" == new String("hello world") や new String("hello world") == new String("hello world")はfalseになる。
equalsを使ったらどれもtrueになる
54デフォルトの名無しさん
垢版 |
2017/04/11(火) 23:36:39.85ID:ZPaqNK/Y
String の場合は intern() が返す参照を使うと同じ文字列が既にあったら同じ参照になるけどな。
同じ内容の内容の文字列が何度も new される可能性がある場合は使うとメモリの節約になる。
2017/04/12(水) 03:26:16.05ID:b48e4NDE
>>51
ま、これでも動かしてみなされ。

public class StringTest {
 public static void main(String[] args) {
  String s0 = "aaa";
  String s1 = new String("aaa");
  String s2 = new String("aaa");
  String s3 = s2.intern();

  String[] ss = { s0, s1, s2, s3 };

  for (int i = 0; i < ss.length - 1; ++i)
   for (int j = i + 1; j < ss.length; ++j)
    System.out.printf("ss[%d] %s ss[%d]%n", i, ss[i] == ss[j] ? "==" : "!=", j);
 }
}
2017/04/12(水) 23:55:55.72ID:NTW6AtnI
>>55
Javaなら環境依存はないことになってるんだから実行結果も貼ってみなされ。
2017/04/13(木) 00:01:26.42ID:oGpC5FIZ
>>55
ったく
https://ideone.com/NpPMa9
2017/04/13(木) 01:22:32.11ID:GDsbQNSJ
動かして理解しろってことでしょ……
2017/04/14(金) 09:52:16.30ID:umFkfZJf
FileReaderオブジェクト作ってread、readLineでファイル読み込んだあとにcloseメソッドで閉じることになっていますが、最後まで行ってない場合、closeしなくても良いのでしょうか
そしてそもそもcloseしないでプログラム終了するとどうなるのでしょうか
60デフォルトの名無しさん
垢版 |
2017/04/14(金) 12:10:52.91ID:/1nusgkY
>>59
ファイルクローズは普通はそのファイルへの読み書きが不要になったらするものだ。どこまで読んだかなんてことは関係ない。
61デフォルトの名無しさん
垢版 |
2017/04/14(金) 12:23:50.00ID:/1nusgkY
クローズしなかった場合はインスタンス消滅前にファイナライザでグロースされるだろうが、そんなもんあてにしてはいけない。
特別な事情がない限りプログラムは必ず自分でファイルクローズするように書くべき。
2017/04/14(金) 12:27:55.91ID:sfy7Edim
try-with-resource構文が便利すぎて気にしづらくなった感はある
63デフォルトの名無しさん
垢版 |
2017/04/14(金) 12:37:26.12ID:/1nusgkY
>>62
一応それも自分でクローズするように書いてる事にはなる。何が起きるかわかって書いてるわけだし。
64デフォルトの名無しさん
垢版 |
2017/04/15(土) 07:07:28.68ID:Q1oPXQ4H
エラーの原因の9割はメモリ問題っていうけど
これって解放すればいいだけじゃね?
つまり全ての作業の最後に解放するコードを常に入れてたら
エラーなんて出ようがないのでは?
65デフォルトの名無しさん
垢版 |
2017/04/15(土) 08:37:16.98ID:mBBzgc7U
かってに削除しては、こまる。まだだれかが参照してるかとか…
2017/04/15(土) 10:35:03.58ID:IUu2MviJ
>>64
めんどくさいんだよ。
Cである程度の規模のアプリ作ってみろよ
67デフォルトの名無しさん
垢版 |
2017/04/15(土) 18:50:27.07ID:ONyyaIO2
解放し過ぎて二重にfree()して落ちたりしてなw
2017/04/15(土) 23:48:14.07ID:+FDoqV6E
質問させてください。
今日パソコンにeqlipseを入れて文字の表示をしていたのですが
出先から帰って再度起動させてから他のクラスを作って実行しても
「現在、表示するコンソールがありません」というメッセージが出て反映させられません。

どちらも新規クラス作成でメソッド・スタブのmainメソッドにチェックを入れて作成しましたし、
コピペして中身が全く同じなのでどこに原因があるのかわからず困っています。

どなたかお知恵を貸していただきたいです!
69デフォルトの名無しさん
垢版 |
2017/04/16(日) 00:14:26.19ID:m1EJuj8m
>>68
ソースコード見せて
2017/04/16(日) 00:35:15.16ID:qsila/iw
>>69

package jp.winschool.java.chapter1;

public class Sample01_03 {

public static void main(String[] args) {

// Hello worldと表示する
System.out.println("Hello world");
}
}

ソースコードこちらです!
71デフォルトの名無しさん
垢版 |
2017/04/16(日) 07:35:13.11ID:Ey1n1KGC
よくお互いをロックして制御不能みたいな実行時エラーって
あれどういう原理なんですか?
そういうプログラム逆に組んでみたいんですが…
2017/04/16(日) 09:48:34.56ID:0couv4LD
>>71
https://ideone.com/HQeH5g
例えばこんなん
73デフォルトの名無しさん
垢版 |
2017/04/16(日) 19:57:09.57ID:1+YnjkjO
>>71
いやほら A と B の二つロックする変数があって、それを2つのスレッドで、一方のスレッドは A, B の順でロックするようになっていて、もう一方は逆順に B, A の順でロック掛けるようになっているとタイミングによってデッドロックになる事がある。
2017/04/16(日) 20:02:31.84ID:jgmTryYz
nullが入力されたらループが止まるプログラム文にしたいのですが、
うまくいきません。
https://ideone.com/N1lSZi
どこが悪いのでしょうか?
2017/04/16(日) 20:47:52.41ID:rpbl7PtZ
それはnullっていう文字列だからnullではない
nullの入力で終わらせたいなら "null".equals(sc.next())とかにしないと
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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