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

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

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

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

Q&A

解決済

2回答

843閲覧

JAVAのプログラムと出力結果についての質問

teiku

総合スコア1

Java

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

0グッド

0クリップ

投稿2020/05/08 02:23

JAVAのプログラムの問題で以下のプログラムを解いている学生です。

public class Mondai6 {
public static void mondai6Method(int[] a, int[] b) {
int[] c = a; a = b; b = c;
a[1]++; b[1]--;
// (A)
}
public static void main(String[] args) {
int[] a = {1, 2, 3};
int[] b = {4, 5, 6};
mondai6Method(a, b);
System.out.println(a[1]);
System.out.println(b[1]);
// (B)
}
}

このプログラムを実行すると、
1
6
という結果が返って来ました。
上の行ではaの配列の中に[4,6,6]が入り、bの配列の中には[1,1,3]が入ってるはずです。
なので出力結果としては
6
1
と出るのではと考えています。

なぜ出力結果は
1
6
なのでしょうか。教えて下さい。

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

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

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

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

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

guest

回答2

0

ベストアンサー

mainメソッドの変数a,bとmondai6Methodの変数a,bは同じ名前ですが違う変数です。
そのため、mondai6Methodでaとbの中身を入れ替えてもmainメソッドのaとbの中身は入れ替わりません。
変数のスコープ

mainメソッドのaとbを入れ替えたいなら以下の記事が参考になるでしょう。
配列のコピー

投稿2020/05/08 03:31

編集2020/05/08 03:50
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

課題ぽいので、ヒントだけ。
int[] c = a; a = b; b = c;が何をしているのかを考えてみましょう。
そして、a[1]++; b[1]--;を実行するとき、a,bそれぞれがナニを指しているのかを考えてみましょう。


理解はされたようですが、

課題とかではなく練習問題ですので、

ということなので。
それぞれの変数が「ナニを指しているか」、ナニを指しているか、追ってみればわかるでしょう。

mainメソッドのaをmain.a、mondai6Methodメソッドのaをmondai6Method.aと表記します。

public static void main(String[] args) { main.a -> {1,2,3} main.b -> {4,5,6}
mondai6Method(a, b); public static void mondai6Method(int[] a, int[] b) { mondai6Method.a -> main.a -> {1,2,3} mondai6Method.b -> main.b -> {4,5,6}
int[] c = a; mondai6Method.a -> main.a -> {1,2,3} mondai6Method.b -> main.b -> {4,5,6} mondai6Method.c -> mondai6Method.a -> main.a -> {1,2,3}
a = b; mondai6Method.a -> mondai6Method.b -> main.b -> {4,5,6} mondai6Method.b -> main.b -> {4,5,6} mondai6Method.c -> mondai6Method.a -> main.a -> {1,2,3}
b = c; mondai6Method.a -> mondai6Method.b -> main.b -> {4,5,6} mondai6Method.b -> mondai6Method.c -> mondai6Method.a -> main.a -> {1,2,3} mondai6Method.c -> mondai6Method.a -> main.a -> {1,2,3}

つまり、

mondai6Method.a -> main.b -> {4,5,6} mondai6Method.b -> main.a -> {1,2,3}
a[1]++; b[1]--; mondai6Method.a -> main.b -> {4,6,6} mondai6Method.b -> main.a -> {1,1,3}
System.out.println(a[1]); System.out.println(b[1]); main.a -> {1,1,3} main.b -> {4,6,6}

てことで。

投稿2020/05/08 02:45

編集2020/05/08 04:46
shiketa

総合スコア3990

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

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

teiku

2020/05/08 03:32

回答ありがとうございます。 1時間以上このプログラムとにらめっこをしましたがどうにも理解ができないのです。 public class Mondai4 { public static void mondai6Method(int[] a, int[] b) { int[] c = a; a = b; b = c; a[1]++; b[1]--; System.out.println(a[0]); System.out.println(a[1]); System.out.println(a[2]); // (A) } public static void main(String[] args) { int[] a = {1, 2, 3}; int[] b = {4, 5, 6}; mondai6Method(a, b); System.out.println(a[0]); System.out.println(a[1]); System.out.println(a[2]); // (B) } } このようにプログラムを書き換えた場合、上の出力は 4 6 6 とでるのに下の出力は 1 1 3 とでます。 プログラムを上から順に実行すればmondai6Methodの中では配列の値を入れ替えてaとbの配列の2番目を+1と-1をして終わりだと思います。 なのでmainに値を返すならばaの配列の中身は{4, 6, 6}になるのではないしょうか。 なぜmainに値が返ってきたらaの配列はbの配列と入れ替わっているのかがわかりません。 課題とかではなく練習問題ですので理解するためにも回答がほしいです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問