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

回答編集履歴

3

追記3

2021/07/05 09:46

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -174,4 +174,41 @@
174
174
  戻り値として受け取るのはMatrixオブジェクトですが、
175
175
  後から配列や二次元配列に変換できます。
176
176
 
177
- **まずは基礎からやりましょう**。
177
+ **まずは基礎からやりましょう**。
178
+
179
+ ----
180
+
181
+ [追記3]
182
+
183
+ まず、getterとかのエラーの前に『オブジェクト指向とは何か』を学びましょう。
184
+
185
+ オブジェクト指向(以降、OOP)の基本概念は、
186
+ 『データ(= フィールド)と処理(= メソッド)をひとまとめにしたオブジェクト』なるものを中心に見る発想法です。
187
+
188
+ C言語のようなオブジェクト指向以前の言語では
189
+ データと処理は別々でした。
190
+
191
+ それらをひとまとめにすることで、
192
+ 『オブジェクトだけが対象データとその処理方法を知っている』状態にでき、
193
+ それによって、『オブジェクトに対象データの処理や管理を任せる』ということができます。
194
+
195
+ クラスやら継承やらはこの概念を表現するためのものです。
196
+
197
+ オブジェクトだけが知っているという状態にするため、
198
+ フィールドは基本的にprivateにするのです。
199
+
200
+ でも、それではフィールドを直接見ることはできません。
201
+
202
+ なので『苦肉の策』としていわゆるgetterとかを使うのです。
203
+
204
+ クラスはコンパイラとかに「こーゆーデータ構造(どういうデータを持っているかとか)があるんでよろしく〜♪」
205
+ のように伝えるためのものです。
206
+
207
+ staticなメソッドはC言語の関数と一緒です。
208
+
209
+ オブジェクトがする処理方法というより、
210
+ 単なる関数としてのものに近いです。
211
+
212
+ なので、今回の場合、
213
+ staticなgetterで別のオブジェクトのデータを引っ張り出そうとしているからエラーになっています。
214
+ (厳密に言えば違うが、イメージ的にはそういう感じ)

2

追記2

2021/07/05 09:46

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -139,4 +139,39 @@
139
139
  コンパイルエラーは怒声でも暴言でも罵倒でもハラスメントでもなく、
140
140
  コンパイラ等からのメッセージです。
141
141
 
142
- なので恐れずに、メッセージを読んで対処しましょう。
142
+ なので恐れずに、メッセージを読んで対処しましょう。
143
+
144
+ -----
145
+
146
+ [追記2]
147
+
148
+ > ほぼ脳死でメソッドを使うときは .(メソッド)
149
+
150
+ 基礎からやってください。
151
+
152
+ 入門書やサイト等にあるのは『基礎』であり、
153
+ 別の言い方にすると『**道具**』です。
154
+
155
+ プログラミング言語があるからソフトとかを作る…
156
+ のではなく、
157
+
158
+ 『とある問題を解決するための道具として』プログラミング言語があるのです。
159
+
160
+ 元々は軍事利用で、たとえば、弾道計算や暗号解読とかを目的にしたのです。
161
+
162
+ 『**プログラムは魔法でもなんでもなく、人間が現実世界でやっている手順を逐一指示されながら処理しているだけほ代物である**』です。
163
+
164
+ 基礎をやるのは、料理で言えば
165
+ 『包丁の使い方』や『材料が揃っているかの確認』とかに相当します。
166
+
167
+ なので、基礎を理解しましょう。
168
+
169
+ > readメソッドに関してなのですが...
170
+
171
+ 直接は無理です。
172
+
173
+ ですが、Matrixクラス側で、いわゆるgetter/setterに相当するやつを追加すれば、
174
+ 戻り値として受け取るのはMatrixオブジェクトですが、
175
+ 後から配列や二次元配列に変換できます。
176
+
177
+ **まずは基礎からやりましょう**。

1

追記1

2021/07/04 23:30

投稿

BeatStar
BeatStar

スコア4962

answer CHANGED
@@ -47,4 +47,96 @@
47
47
 
48
48
  のように宣言するはずです。
49
49
 
50
- もしかして、for文と勘違いしていませんか?
50
+ もしかして、for文と勘違いしていませんか?
51
+
52
+ ----------------------
53
+
54
+ [追記1]
55
+
56
+ ```ここに言語を入力
57
+ Matrix.java:39: エラー: シンボルを見つけられません
58
+ matrix.print();
59
+ ^
60
+ シンボル: メソッド print()
61
+ ```
62
+
63
+ 当たり前です。
64
+
65
+ 肝心の 39行目を見ると、
66
+
67
+ ```Java
68
+ matrix.print();
69
+ ```
70
+
71
+ とありますが、このmatrixとはなんでしょうか?
72
+
73
+ ローカル変数(readメソッド内にある変数)としても存在しません。
74
+
75
+ でも、よく見ると、フィールドとして二次元配列があります。
76
+ ( private double[][] matrix = new double [row][col]; )
77
+
78
+ ですが、これはあくまで『二次元配列』です。
79
+
80
+ 二次元配列はあくまで配列の二次元版です。
81
+
82
+ 配列が持っていないメンバ( printメソッド )を動かそうとしているから、
83
+
84
+ 『おいおい、にーちゃん(あるいはねーちゃん)、そんなもんねーよ?』と突っ込まれているのです。
85
+
86
+ そもそも、可読性が悪すぎる。
87
+
88
+ 今回のエラーは、『可読性が悪いことが原因』になっています。
89
+
90
+ クラス名 Matrix で、これのオブジェクトが matrix.
91
+
92
+ で、内部で保持している二次元配列も matrix となっている。
93
+
94
+ これでは、気を抜いたら書いた本人ですら『混乱』します。
95
+
96
+ (あれ、どっちのだったけ……って感じで)
97
+
98
+ ```ここに言語を入力
99
+ Matrix.java:74: エラー: 不適合な型: Matrixをdouble[][]に変換できません:
100
+ A = y.read(args[0]);
101
+ ^
102
+ ```
103
+
104
+ これに関しては、定義を確認してください。
105
+
106
+ まず、『A』とはなんでしょうか。
107
+
108
+ どうやら double [ ][ ] A のようですね。
109
+
110
+ つまり double型の二次元配列。
111
+
112
+ 『y』とはなんでしょうか。
113
+
114
+ どうやら、Matrix y のようですね。
115
+
116
+ それでは、y.read( なんちゃら ) とはなんでしょうか。
117
+
118
+ Matrixクラスの
119
+ public Matrix read(String filename)
120
+ ですね。
121
+
122
+ 定義を確認してください。
123
+
124
+ つまり、日本語で無理に書けば、
125
+
126
+ ```ここに言語を入力
127
+ double型二次元配列 = Matrixクラスのオブジェクト.read(引数);
128
+ ```
129
+ の状態になっています。
130
+
131
+ つまり、『本来はMatrixのオブジェクトを返しているのに、受け手がなぜかdouble型二次元配列で受け取ろうとしている』状態です。
132
+
133
+ ある意味、『椅子を10個のグラスに注ごうとしているようなもの』です。
134
+
135
+ そもそも入るわけがないです。
136
+
137
+ このように、『**コンパイルエラーにはヒントが隠されています**』。
138
+
139
+ コンパイルエラーは怒声でも暴言でも罵倒でもハラスメントでもなく、
140
+ コンパイラ等からのメッセージです。
141
+
142
+ なので恐れずに、メッセージを読んで対処しましょう。