一つ目。まずは基礎からやりましょう。
質問と修正依頼のコメントを見ている限り、基礎をないがしろにしている感じに見えます。
(ないがしろとまでは言わなくても、それに近い状態に感じる)
基礎が出来ていなければ、どんな丁寧な説明をしても無駄です。
確かにすべて教える事はできます。ですが字数制限もあるし、仮に字数制限が無かったとしても相当面倒です。今回は解けるようになっても、似たような問題(算数や数学だと言い回しや数字が変わっただけのレベル)でまた『わからん。答えくれ』的になるはずです。つまり応用がまったくできない状態です。
それって勉強する意味、ありますかね?
でも基礎が出来ていれば、軽いアドバイスでも解決出来ます。
なので基礎をちゃんとやりましょう。
二つ目。プログラミングとは考える事であるです。
プログラミングっていうのはでたらめにSystem.out.printだのなんだのと書いていけばいいのではありません。
こう書けばいいというものでもありません。
プログラミングは「現実世界のシミュレーション」です。
そもそも、もとをたどれば人間が手作業でやっていた処理を、機械に任せるためです。
歴史を学んでいけばわかるはずです。
とりあえず、現実世界で考えてみましょう。
今回の場合、
[依頼]
俺が今から数字を3つ言うから、君はその数字(群)をノートにカンマ区切り形式(CSVファイル風)で記録してくれ。
そして、その記録(ノート)から読み込んで、それらの合計値を計算して、俺に教えてくれ。
的な依頼かなんかを先輩なり先生なり親御さんなりに誰かに依頼されたと考えてみてください。
そうすると、普通に考えて、
[現実世界でのフロー]
0. 先輩(親御さんでもいいし先生でもいいが)が3つの数字を言う
1. それらを受け取り、ノートに3,1,6 のように書いていく
2. ノートからそれぞれの数字を読み取り、
3. 合計値を計算する
4. その結果を言う
みたいな感じになるはずです。
これを実装すればいいだけです。
とりあえずカンマ区切り形式、CSVファイルとは何かを調べましょう。
プロでも、特に業務系の場合は、知らない事が多いようです。
クライアントは医療だったりとかの特殊なものが多いらしいので。なので毎日のように調べものをするようですよ。
検索してみると、
のようなものっぽいですね。
現実世界でのフロー(0)はユーザの動きですね。(1)からが質問者さんのやるべきことです。
(1)の前半は単純に『標準入力』が分かれば簡単ですね。
(1)の後半と(2)はちょっと工夫が必要ですね。まあ保留。
(3)もちょっと工夫が必要ですね。保留。
(4)は単純に『標準出力』がわかれば簡単ですね。(System.out.print系)
で、問題は(2)&(3)ですね。
(2)&(3)も今までの考えと大体同じです。
とりあえず(2)からやってみましょうか。
(1)の後半では、
[現実世界で]
俺は3つの数字を聞いて、それらをカンマ区切り形式で書かなきゃならん。
的な感じでしょうか。
そうすると、数字を記録しておく必要がありますね。
Javaとかでは変数が使えそうですね。
[Flow1]
1. 三回分ループ
1.1. 数字を聞く (-> int nに入れる)
1.2. 数字をノートに書く
みたいな感じでしょうか。
Flow1 の (1) は単純にfor文で実装できそう。
(1.1)は 標準入力で。(1.2)でファイルに書き込んでいく。
だけど単に書き込むのではなく、『カンマ区切り形式で』という前提があるので、それに従わないといけませんね。
ではどうするか。この場合は『規則性』を見付けるのです。
たとえば ユーザが { 1, 2, 3 } と言えば、1,2,3
と書くべきですね。
{ 3, 8, 1 } であれば、3,8,1
ですね。
ユーザの言ったことと、結果を比較してみてください。
{ 3, 8, 1 } -> "3,8,1"
常に、<数字><カンマ><数字><カンマ><数字>
となっていますね。つまり数字と数字の間にはカンマが割り込んでいます。ただし、最後の数字だけはカンマがありませんね。
で、更に共通部分をくくりだすと、<数字><カンマ>
で一つと見なせますね。(ただし、最後の数字だけは例外的)
ということは、『最後の数字(3つ目)以外は常に<数字><カンマ> で一つ』と見なせますね。
よって、
1. 3つの数字を書いていく
1.1. 現在の数字が最後でないなら
1.1.1. カンマを後ろに続ける
的なロジックになるはずです。まあ、(1.1)で『最後なら』とかにしてもいいですが面倒なので。
ただし、今回は数字が3つだとわかっているので、『1個目と2個目の場合はカンマを後ろにつける』とかでもいいですね。
(2)も同様に考える。
3,8,1
を読み込む場合、どのように読みますか? (現実世界で)
私なら、『カンマが出るまで一つの数字と見なす』的な感じですね。
まあ、それでもできますが、シンプルに、『カンマを区切り文字にしている』のが明白なので、文字列分割をすればいいですね。(あ、もちろんファイルから読み込んだ後ですよ?)
ファイルから一行レベルで読み込んで、文字列分割をする。
そうすると、3,8,1
は { "3", "8", "1" } のように文字列の配列になっているはずです。
で、このままでは合計値が計算できません。
数字じゃないので。
なので、数字にしちゃいましょう。1桁ならいいですが2桁以上もあり得る場合もあるので、『Java 文字列 int 変換』とかでヒットしたメソッドを使いましょう。
それを使うと、{ 3, 8, 1 } という数字が取得できるはずです。
で、最後に(3)、つまり合計値を計算する…ですが、
そもそも合計値とは何でしょうか。単純に考えて、全ての数字の合計の値ですね。(当たり前だけど)
たとえば { 3, 8, 1 } だとどうでしょうか。
普通に 3 + 8 + 1 とするはずです。
まあ、今回は3つの数字らしいので、単純に計算すればよさそうですが、これが100個有る場合、どうしますか? { 3, 8, 1, 9, 2, ... } とある状態です。
面倒ですね。書くのが面倒。
こういう場合も、規則性が分かっていれば簡略化できます。
さっきやった、<数字><カンマ> みたいなパターンを見てください。
常に <数字><プラス><数字><プラス><数字>
となっていますね。
で、計算するときはどのようにやりますか?
3 + 8 + 1 ぐらいなら数学が得意な人なら暗算ですぐに出せます。でもこれが100個とかだと一気には無理ですね。なので、分割してみましょう。
私が計算するときは、3 + 8 を先にします。(カッコや掛け算・割り算があればそれから計算するが、今回は足し算のみなので)
3+8=11。つまり11ですが、これを計算用紙かなんかに書いておきましょう。これを記録Xとします。
そして、記録Xに残りの1 を足す。つまり 記録X + 1 を計算します。すると 11+1=12 なので 12となる。
で、記録Xを11から12へ書き換える。数字が4つなら同様に 記録X + <数字> のような計算をして記録Xを更新する。…とやっていくと、最終的に記録Xには合計値が入っているはずです。
今回は3つの数字なので 記録X + 1 のやつで終了ですが。
で、そうすると、最初の 3+8 以外は 常に 記録X + <数字> となっていますね。
でも最初の 3+8 も考え方次第では、記録Xの初期値を 0 と仮定するなら、
記録X = 0
記録X + 3 = 0 + 3 = 3
記録X + 8 = 3 + 8 = 11
記録X + 1 = 11 + 1 = 12
のように、常に 記録X + <数字> の計算式が共通していますね。
つまり、『記録Xの初期値を0とし、その記録Xに数字を加えていく』と合計値になりますね。
おそらく、普通に組めばファイルから読み込むときに配列に入れているはずなので、配列 arrとすると、
x = x + arr[i]
のような計算式になるはずです。
で、0番目から2番目(配列は0番目から始まるので n-1番目までしかアクセスできないため) を足していくので、for文で実装できそうですね。
後は現実世界でのフローから大体の流れを推測して、実装。
そして、(必要があれば)デバッグをやって終了です。(できればテストもすべきではあるが)