質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

5回答

2010閲覧

書いてあるコードの結果がどうしてこのようになるのかわかりません。

Eltk

総合スコア51

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2019/05/23 14:28

編集2019/05/24 00:48

初心者です。
以下のことで困っております。
どなたか教えていただければ幸いです。
どうぞよろしくお願いいたします。

前提・実現したいこと

スッキリわかるJava入門という本の、198ページに載っているコード(リスト5-13)が、どうしてこのような結果になるのかわかりません。

該当のソースコード

Java

1public class Main{ 2 public static void incArray(int[] array) { 3 for(int i = 0; i<array.length; i++){ 4 array[i]++; 5 } 6 } 7 public static void main(String[] args){ 8 int[] array = {1,2,3}; 9 incArray(array); 10 for(int i: array){ 11 System.out.println(i); 12 } 13 } 14}

試したこと

試したことではございませんが、自分の中の解釈で「こうではないか」とコードの動きについて考えていることを記載いたします。

1.まず、コードの上部でincArrayというメソッドを定義している。
2.コード下部で上記incArrayを呼び出している。
このとき、引数は配列(1,2,3が入った)が入っている。
3.先程定義したメソッドの中で、for文で繰り返しをしており、i= 0から、array.length(配列の長さなので3)未満(つまり2)までを繰り返し、array[i]に入れる。(つまり、array[0]⇒array[1]⇒array[2]という風に繰り返される。
※ここで、array[i]++がどのような動きをするのかわかりません!!(++の働き、それによってどうなるのか、array[i]だけでも順に増えていくのではないのか?)
4.繰り返しが終わると、呼び出し元(incArray(array))にその結果が返される。
5.その下の行で、for文により繰り返し処理が行われる。(配列array(1,2,3)が順にint iに代入され、System.out.printlnにより、1,2,3が出力される)

ここで、この本では、「結果が2,3,4になることを確認してください」と書いてあるのですが、どこで、2,3,4になったのかがわかりません。

■わからないことリスト
・上記※印の内容が不明
・incArray(array)が実行されたのは良いものの、それが何に影響しているのか(結局、出力されるのは、System.out.printlnなので、incArrayの必要性や、その下のfor文とのつながり方がわかりません)
・僕の上記の考え方では、1,2,3の出力となるのですが、本には2,3,4となるはずと書かれている
・上記コードをエクリプスで実行しようとした場合に、エラーとなる。
※incArrayとmain(メソッド)がそれぞれ、「staticとして宣言できません」と出ます。こちらに関しては、エクリプス自体も初心者でほぼ使い方がわかっていないので、そのせいかもしれませんが。。

補足情報(FW/ツールのバージョンなど)

エクリプスエラーの件につきまして、追加で写真を投稿いたします。
※全ての状況を言葉で説明しきれない(把握できていないため)添付写真を参照いただけると助かります。

イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

jimbe

2019/05/23 17:25

> incArrayとmain(メソッド)がそれぞれ、「staticとして宣言できません」と出ます。 ご提示いただいたコードが入力された全てでしょうか. この Main クラスが別のクラスに含まれていたりは御座いませんか?
Eltk

2019/05/24 00:46

申し訳ございません。 Sample1というクラスに含まれている形でした。 ただちに修正いたします。
jimbe

2019/05/24 01:31

ファイル名がSample1ですので, そちらを残し, Mainクラスの記述の方を削除するのが良いかと思います.
Eltk

2019/05/24 03:51

Mainのクラスが必須だと思っていたのですが、そうではないんですね。 ありがとうございました!
jimbe

2019/05/24 11:26

java では, ファイル名が public なクラス名と同じでなければならなかったり, フォルダがパッケージに対応していたりとファイルシステムと関係を持っていますので, 若干注意が必要ですね. ですが, main メソッドがあるからといって必ず Main というクラス名でなければならないということはありません. そのほうが分かり易いという方は居るかもしれません.
Eltk

2019/05/24 11:42

かしこまりました。 詳しく教えていただき、ありがとうございました!
guest

回答5

0

ベストアンサー

++は「演算子」です。そこまでのページで必ずどこかで説明されているはずです。
簡単に言うなら「変数の値を1増やした値を再代入する」です。
つまり、incArrayメソッド内で、引数に渡された配列の各要素、ここではarray[0],array[1],array[2]の各要素1,2,3が1ずつ増え、2,3,4となって配列内に再代入されています。

投稿2019/05/23 14:38

swordone

総合スコア20651

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2019/05/23 15:01

インクリメント演算子のことはわかっていたのですが、最後の一行に書いていただいたことが、一番知りたかったことでした!イメージがわきました。ありがとうございます!
guest

0

array[i]++

array[i] の内容が インクリメント (+1) されます。
これは、C/C++ 等と同じ。
その他は、大体、その通りと思いますが、Eclispeの件は、テスト環境が無いので、ちょっと分かりません。

投稿2019/05/23 14:42

pepperleaf

総合スコア6383

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2019/05/23 14:58

ご回答いただき、ありがとうございます!テストの件は、もう少し調べてみます。
guest

0

array[i]++は、array[i] = array[i] + 1と同じです。
つまり、{1,2,3}がそれぞれ+1されて、{2,3,4}になります。

投稿2019/05/23 14:40

otn

総合スコア84533

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2019/05/23 14:59

色々な方のコメントでイメージできました!ありがとうございます。
guest

0

array[i]++;

は、

array[i] = array[i] + 1;

と同じです。

なので、全てが1加算された結果になるのです、

投稿2019/05/23 14:38

cateye

総合スコア6851

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2019/05/23 15:00

インクリメント演算子であることはわかるのですが、i++ではなく、array[i]++でどのような動きなのかがわかっていませんでした。。皆さんのおかげでイメージできました。ありがとうございます!
guest

0

array[i]だけでも順に増えていくのではないのか?

それはないです。

i++によって各要素を巡回しますけれど、それだけでは中身は変わりません。さらに中身を変えるためにarray[i]++をしています。

投稿2019/05/23 14:38

HogeAnimalLover

総合スコア4830

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Eltk

2019/05/23 15:00

i++とarray[i]++の動きのイメージがやっとわきました!ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問