teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

後半、大間違いでした

2020/07/26 19:03

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -9,26 +9,36 @@
9
9
  thisを外した場合、最も近い位置にあるローカル変数が対象になるので、エラーでなくなります。
10
10
 
11
11
 
12
- アクセス制御をしたい場合、ローカル変数ではなく、フィールドにしてください。
12
+ ~~アクセス制御をしたい場合、ローカル変数ではなく、フィールドにしてください。
13
- (thisの有無は重複とは無関係です。重複していなくとも使えます)
13
+ (thisの有無は重複とは無関係です。重複していなくとも使えます)~~
14
14
 
15
+ mainメソッドはstaticなクラスメソッドなので、自分のインスタンスを持たず、
16
+ インスタンスフィールドにはアクセスできません。
17
+ その為、その中でthisを使うこともできません。
18
+ (自インスタンスが存在しないので、それを表すthisも使えない)
19
+
20
+ 変数をローカル変数として、アクセス指定子とthisを外した状態にしてください。
21
+ privateと指定せずともローカル変数には外部からはアクセスできません。
22
+ また、ローカル変数へのアクセスにはthisは不要です
23
+
15
24
  ```Java
16
25
  public class Main {
17
- private double x1, y1, x2, y2;
18
26
 
19
27
  public static void main(String[] args) {
20
28
 
29
+ double x1, y1, x2, y2;
30
+
21
31
  Input in = Input();
22
32
 
23
- this.x1 = in.inputDouble("端点1のx1の値を入力してください");
33
+ x1 = in.inputDouble("端点1のx1の値を入力してください");
24
- this.y1 = in.inputDouble("端点2のx2の値を入力してください");
34
+ y1 = in.inputDouble("端点2のx2の値を入力してください");
25
- this.x2 = in.inputDouble("端点1のy1の値を入力してください");
35
+ x2 = in.inputDouble("端点1のy1の値を入力してください");
26
- this.y2 = in.inputDouble("端点2のx2の値を入力してください");
36
+ y2 = in.inputDouble("端点2のx2の値を入力してください");
27
37
 
28
- LinerSegment beforeLine = new LinerSegment(this.x1, this.y1, this.x2, this.y2);
38
+ LinerSegment beforeLine = new LinerSegment(x1, y1, x2, y2);
29
39
  LineSegment afterLine = beforeLine.linearTransfer();
30
40
  System.out.println("Input LineSegment :" + beforeLine +
31
41
  "\n => LineSegment after linearTransfer :" + afterLine);
32
- }
42
+ }
33
43
  }
34
44
  ```

1

追加

2020/07/26 19:03

投稿

amiya
amiya

スコア1218

answer CHANGED
@@ -6,4 +6,29 @@
6
6
  ○○は、自インスタンスのフィールドを指しますが、このクラスにはそのフィールドは宣言されていません。
7
7
  宣言されていないフィールドへのアクセスはエラーになります。
8
8
 
9
- thisを外した場合、最も近い位置にあるローカル変数が対象になるので、エラーでなくなります。
9
+ thisを外した場合、最も近い位置にあるローカル変数が対象になるので、エラーでなくなります。
10
+
11
+
12
+ アクセス制御をしたい場合、ローカル変数ではなく、フィールドにしてください。
13
+ (thisの有無は重複とは無関係です。重複していなくとも使えます)
14
+
15
+ ```Java
16
+ public class Main {
17
+ private double x1, y1, x2, y2;
18
+
19
+ public static void main(String[] args) {
20
+
21
+ Input in = Input();
22
+
23
+ this.x1 = in.inputDouble("端点1のx1の値を入力してください");
24
+ this.y1 = in.inputDouble("端点2のx2の値を入力してください");
25
+ this.x2 = in.inputDouble("端点1のy1の値を入力してください");
26
+ this.y2 = in.inputDouble("端点2のx2の値を入力してください");
27
+
28
+ LinerSegment beforeLine = new LinerSegment(this.x1, this.y1, this.x2, this.y2);
29
+ LineSegment afterLine = beforeLine.linearTransfer();
30
+ System.out.println("Input LineSegment :" + beforeLine +
31
+ "\n => LineSegment after linearTransfer :" + afterLine);
32
+ }
33
+ }
34
+ ```