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系)だとエラーになるよ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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