• ベストアンサー

配列について

class Sample1{ public static void main(String args[]){ int test[] = {89,56,56,77,54}; for(int i =0; i < test.length; i++){ System.out.println((i+1) + "番目の数は" + test[i] +"です。"); } } } >System.out.println((i+1) + "番目の数は" + test[i] +"です。"); の位置のtest[i]ってどこから来たんでしょうか? iには1番目とか2番目などといったものを出力するためにあるのであって、いつの間に89,56,56,77,54といった値が代入されのでしょうか?なんか漠然とした質問なんですがお願いします。

  • Java
  • 回答数4
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

>[i]のiには >>(int i =0; i < test.length; i++) >の時に使っただけで89,56,56,77,54が代入されて >いないように思えるんです。 for文の書式?がわかりにくいのかな? この場合のfor文は A:1番最初にint型のiを宣言して、初期値に0を代入。 ↓ B:「iがtest.length(testという配列の長さ(ここでは5)より小さい」という条件が成り立つ場合に System.out.println((i+1) + "番目の数は" + test[i] +"です。"); という処理を行う。 条件が成り立たなかったらfor文の外に抜ける。 ↓ C:処理を行ったらiに1を足して(i++の部分、i = i + 1と同じ意味。)Bに行く。 (以後B→C→B→CをBの条件に当てはまる限り行う。) ということになっています。 ので、[i]のiには最初にAで0を代入されて、その後は、Cの処理で、その時のiに1を足したものが代入されます。 89,56,…という配列の中身は他の回答者さんの仰るとおりです。 この場合のiはカウンターの様な役割で使っていて、testという配列の「0番目」とか「1番目」とかをさしています。 けっしてiに89,56…といった値を代入しているわけではありません。

nilyannko
質問者

お礼

>この場合のiはカウンターの様な役割で使っていて、testという配列の「0番目」とか「1番目」とかをさしています。けっしてiに89,56…といった値を代入しているわけではありません。 みなさん本当にありがとうございます!! かなり解って来ました(泣 さらにはっきり理解できるようにしっかり確認してみます。

その他の回答 (3)

回答No.3

こういう日本語に置き換えてみるとわかるかも。 「testという名前の配列のi番目の値を出力する」 どうでしょ? ここらへんはJavaに限らず言語の基本なので自分が納得出来るまで調べてくださいね。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

私も、それほど言語的にくわしいわけではないので、間違っているかもしれないので参考程度に聞いて下さい。 int test[]; と宣言したら、 testという名前のintを値にもつ配列型(参照型)を確保したことになります。 ただし、このままでは、 test[1]=1; のようには使えません。 testは、配列というタイプであって、(まだ)それぞれの値を保持しているのではないからです。 そこで、 test = new int[5]; などの様に宣言して、intの5つ分の入れ物がある配列を保持するようにします。 新しくnewで確保しない場合、 例えば test2[]という配列が既に在る場合には test = test2; などの様にすることができます。 int test[] = {89,56,56,77,54}; の場合は、{89,56,56,77,54}の部分で int noname[] = new int[5]; noname[0]=89; noname[1]=56; noname[2]=56; noname[3]=77; noname[4]=54; といった配列を名前を付けること無しに、自動的に作成してくれます。 そして、その配列を test=noname; の様に代入して、システムが確保し初期値を割り当てた配列を保持させます。 混同してはいけないのは、先にも述べたように、 test[]としたからといって、test[i]があるというわけではないことです。いわゆる参照型というものは、他にその実体があって、それを指し示すようなものです。[i]は、いってみれば、その実体にアクセスするための演算みたいなものです。 例えば、 int test2[]; test2=test1; として test2[3]=33; とすると、 test[3]が33になります。 このことは、 test,test2が同じ実体を指すようになったということを表していて、 test2=test1; が test2 = new int[5];とされてる時に test2[0]=test[0]; test2[1]=test[1]; test2[2]=test[2]; test2[3]=test[3]; test2[4]=test[4]; とすることとは意味が違います。 ごちゃごちゃいったので混乱されたかもしれませんが、まあ、そういうようなことです。 あと、蛇足ですが、 配列というのは、 test ↓ [89][56][56][77][54] の様に、位置を指していて、 test[0]とかtest[2]とか先頭からの0から始まる相対的な位置を指定して、各要素にアクセスします。

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

>いつの間に89,56,56,77,54といった値が代入されのでしょうか? int test[] = {89,56,56,77,54};

nilyannko
質問者

補足

ごめんなさい!質問の仕方が解かりにくくて。 >int test[] = {89,56,56,77,54}; で代入しているのは解かっているんです。 なぜ[i]で出力すると89,56,56,77,54が表示される のかが解からないんです(泣 [i]のiには >(int i =0; i < test.length; i++) の時に使っただけで89,56,56,77,54が代入されて いないように思えるんです。 もしかしたらすごく馬鹿な質問してるのかもしれません すみません!

関連するQ&A

  • 配列の変換について

    こんにちは、お世話になります。 次のコードで、どうしてint[] i = {1,2,3};が int[] i = new int[3]; int[0] = 1; int[1] = 2; int[2] = 3; のようになるのか分かりません。お分かりの方よろしくお願いします。 class arr{ public static void main(String[] args){ String[] name = new String[3]; name[0] = "1番目"; name[1] = "2番目"; name[2] = "3番目";      System.out.println("nameの0:" + name[0]); System.out.println("nameの1:" + name[1]); System.out.println("nameの2:" + name[2]); int[] i = {1,2,3}; System.out.println("iの0:" + i[0]); System.out.println("iの1:" + i[1]); System.out.println("iの2:" + i[2]); char c[] = new char[1]; c[0] = 'A'; System.out.println("cの0:" + c[0]); } }

  • 配列について

      class Array01{ public static void main(String[] args){ int[][] ia = {{11,12},{21},{41,42,44}}; for(int i = 0; i < ia.length; i++){ for(int j = 0; j < ia[i].length; j++ ){ System.out.print(ia[i][j] + " "); } System.out.println(); } } } } (i < ia.length) と (j < ia[i].length)のとこの意味が分かりません。特にiaとia[i]の違いなんか教えてもらえると助かります。for文については理解してるんですが・・・

    • ベストアンサー
    • Java
  • 昇進者です。 戻り値の学習をしていますが。

    *を10個表示するプログラムですが。 public class Graph1 { public static void main(String[] args) { printGraph(10); } public static void PrintGraph(int x) for(int i = 0; i < x; i++){ System.out.println("*"); } System.out.println(""); } } のprintGraph(10);は何のためにあるのですか? 10がxに代入されていますよね。戻り値はxですか。

  • 配列のコピーをして値を返したいが

    //配列のコピーをして値を返したい import java.util.*; public class Test7_22 { static int[] arrayClone(int[] a){ int[] b = new int[a.length]; for(int i =0;i>a.length;i++) b[i] = a[i];//ここで代入されるはず return b; } public static void main(String[]args){ Scanner std = new Scanner(System.in); System.out.print("要素数:"); int n = std.nextInt(); int[] a = new int[n]; for(int i=0;i<n;i++){ System.out.print("a["+i+"]="); a[i] = std.nextInt(); } int[] x = arrayClone(a); for(int i=0;i<a.length;i++) System.out.println("x["+i+"]="+x[i]); } } //コンパイルするとb[0] = 0になる

    • ベストアンサー
    • Java
  • 配列を使った・・・。

    配列を使って簡単な迷路を作っているのですが、なかなかうまくいきません。 0を" "1を"■"を表示させたいのですがうまくいきません。 何処を直せばいいのか教えてください。 public class Sample1 { public static void main (String[]args) { int [][] data = { {1,0,1,1,1,1,1,1,1,1,0,1,1,1,1,1,1,1,1,1}, {1,0,1,1,0,0,0,1,1,1,0,1,1,1,1,1,0,1,1,1}, {1,0,0,0,0,1,0,0,0,1,0,0,0,1,1,1,0,1,1,1}, {1,1,1,1,1,1,1,1,0,1,0,1,0,1,1,0,0,1,1,1}, {1,1,1,1,1,0,0,0,0,1,0,1,0,0,0,0,1,1,1,1}, {1,1,1,1,1,0,1,1,0,0,0,1,1,1,1,1,1,1,1,1}, {1,1,1,1,0,0,1,1,0,1,0,1,1,1,0,1,1,1,1,1}, {1,1,1,1,0,1,1,1,1,1,0,1,1,1,0,0,0,1,1,1}, {1,1,1,0,0,1,1,1,1,1,0,0,0,0,0,1,1,1,1,1}, {1,1,1,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1} }; for (int i=0; i<10; i++) { for (int j=0; j<20; j++) { System.out.print(data [i][j]); } if(data [i][j] = 1){ System.out.println("■"); }else{ System.out.println(" "); } } } }

    • ベストアンサー
    • Java
  • コマンドライン引数を用いて。

    コマンドライン引数を用いて足し算をさせるプログラムです。 class goukei{ public static void main(String args[]){ int i, count; int sum = 0; int a[]; count = args.length; for(i=0; i<args.length; i++){ int arg_i = Integer.parseInt(args[i]); sum = sum + arg_i; } System.out.println("引数の数は" + count); System.out.println("合計は" + sum); } } と考えたのですが、もっとこうしたほうがいいという部分があれば教えてください。 一応これでできているとは思うのですがイマイチ自信がありません・・・。

    • ベストアンサー
    • Java
  • javaの問題

    import java.util.Scanner; class test6{ static void printArray(int[] a) { for(int i=0;i<a.length;i++) System.out.print(String.format("%1$6s", (a[i]+" "))); System.out.println(); } static void printArray(int[][] a) { for(int[] i:a) { for(int j:i) System.out.print(String.format("%1$6s",(j+"\t"))); System.out.println(); } } public static void main(String[] args) { int[] a = {12,536,-8,7}; int[][] c = {{32,-1,32,45,67}, {535,99999,2}, {2,5,-123,9}}; printArray(a); printArray(c); } } このプログラムを表示するとこのようになるのですが、 12 536 -8 7 32 -1 32 45 67 535 99999 2 2 5 -123 9 これに一工夫加えて見やすくしたいです。 このような形にするのはどのようにすればよいのでしょうか + + | 32 -1 45 67 | | 535 99999 2 | | 2 5 -123 9 | + +

  • 配列を後ろから数えるには?

    例えば配列を前からならこのようになるはずです class TestIntArray { public static void main(String args[]) { int vi[] = {0, 1, 2, 3, 4, 5, 6}; for (int i = 0; i < vi.length; i++) System.out.println("vi[" + i + "] = " + vi[i]); } ですが逆に配列を後ろからならどうしたらいいのでしょうか? 今回の場合は6543210を出力させるのが目的です 今までずっと配列って言ったら for (int i = 0; i < vi.length; i++)がほぼ定形分ように頭にはいっていますので考え方がわからないです。 ヒントやアドレスをお願いします。

    • ベストアンサー
    • Java
  • 最大値と最小値の求め方

    以下はコマンドライン引数で任意の数の整数を受け取って、合計・平均・最大・最小を求めようとしたソースです。 しかし、実行したら最大値と最小値が正しく出ませんでした。 if文が間違っているのかもしれないと思ったのですが、はっきりと『ここが間違っている』という場所が分かりません。 どうかご指摘お願いします。 class Choco { public static void main (String[] args) { int i; int sum = 0; int max; int min; for ( i=0; i<args.length; i++) sum += Integer.parseInt(args[i]); double ave = sum/args.length; max = args.length; min = args.length; if (args.length>max){ max = args.length; } if (args.length<min){ min = args.length; } System.out.println("合計は" + sum + "です。"); System.out.println("平均は" + ave + "です。"); System.out.println("最大値は" + max + "です。"); System.out.println("最小値は" + min + "です。"); } }

    • ベストアンサー
    • Java
  • プログラムの合体。

    jump7799_4836さん 2018/7/2103:34:44 public class Test2 { public static int メソッド () { System.out.println("メソッド()が呼ばれました"); return 0; } public static int メソッド (int i) { System.out.println("メソッド(int i)が呼ばれました"); return i; } public static int メソッド (int i, int j) { System.out.println("メソッド(int i, int j)が呼ばれました"); return i; } public static int メソッド (short s) { System.out.println("メソッド(short s)が呼ばれました"); return s; } public static int メソッド (double d) { System.out.println("メソッド(double d)が呼ばれました"); return (int) d; } } public メソッド class Test2 { public メソッド static void main(String[] args) { Test2.メソッド (); Test2.メソッド (1); Test2.メソッド (1,2); Test2.メソッド (1.1); Test2.メソッド ((short) 1); Test2.メソッド ((double)1); } } kouzou@GD348ZZD9:/WORK$ javac Test2.java Test2.java:29: エラー: class、interfaceまたはenumがありません public メソッド class Test2 { ^ Test2.java:30: エラー: <identifier>がありません public メソッド static void main(String[] args) { ^ エラー2個 2つのプログラムが合体することってあるのですか? いつもすみません。 解説のほど、宜しくお願い申し上げます。

    • ベストアンサー
    • Java

専門家に質問してみよう