第10回 配列:配列の基本的な利用

配列

配列は、データを連続した領域に格納するためのデータ構造です。

配列型変数の宣言

表記 ふりがな
int[] [変数名] ; 整数配列型の変数 [変数名] を作成しろ
float[] [変数名] ; 実数配列型の変数 [変数名] を作成しろ
String[] [変数名] ; 文字列配列型の変数 [変数名] を作成しろ
boolean[] [変数名]; 真理値配列型の変数 [変数名] を作成しろ
char[] [変数名]; 文字配列型の変数 [変数名] を作成しろ

配列の生成

表記 ふりがな
new int[ [サイズ] ] 要素数 [サイズ] の整数配列を作成しろ
new float[ [サイズ] ] 要素数 [サイズ] の実数配列を作成しろ
new String[ [サイズ] ] 要素数 [サイズ] の文字列配列を作成しろ
new boolean[ [サイズ] ] 要素数 [サイズ] の真理値配列を作成しろ
new char[ [サイズ] ] 要素数 [サイズ] の文字配列を作成しろ

配列型変数の初期化

表記 ふりがな
int[] [変数名] = [右辺]; 整数配列型の変数 [変数名] を作成して、 [右辺] で初期化しろ
float[] [変数名] = [右辺]; 実数配列型の変数 [変数名] を作成して、 [右辺] で初期化しろ
String[] [変数名] = [右辺]; 文字列配列型の変数 [変数名] を作成して、 [右辺] で初期化しろ
boolean[] [変数名] = [右辺] ; 真理値配列型の変数 [変数名] を作成して、 [右辺] で初期化しろ
char[] [変数名] = [右辺] ; 文字配列型の変数 [変数名] を作成して、 [右辺] で初期化しろ
int[] [変数名] = {[要素1, 要素2, 要素3, …] }; 整数配列型の変数 [変数名] を作成して、{[要素1, 要素2, 要素3, …]}を要素に持った配列で初期化しろ
float[] [変数名] = {[要素1, 要素2, 要素3, …] }; 実数配列型の変数 [変数名] を作成して、{[要素1, 要素2, 要素3, …]}を要素に持った配列で初期化しろ
String[] [変数名] = {[要素1, 要素2, 要素3, …] }; 文字列配列型の変数 [変数名] を作成して、{[要素1, 要素2, 要素3, …]}を要素に持った配列で初期化しろ
boolean[] [変数名] = {[要素1, 要素2, 要素3, …] } ; 真理値配列型の変数 [変数名] を作成して、{[要素1, 要素2, 要素3, …]}を要素に持った配列で初期化しろ
char[] [変数名] = {[要素1, 要素2, 要素3, …] } ; 文字配列型の変数 [変数名] を作成して、{[要素1, 要素2, 要素3, …]}を要素に持った配列で初期化しろ

配列の操作

表記 ふりがな
[配列名] [ [添字] ] 配列 [配列名][添字] 番目の値
[配列名] [ [添字] ] = [右辺] 配列 [配列名][添字] 番目に[右辺] を代入しろ
[配列名] [ [添字] ] += [右辺] 配列 [配列名][添字] 番目 の値に [右辺] を足した結果を配列 [配列名][添字] 番目 に代入しろ
[配列名] [ [添字] ] -= [右辺] 配列 [配列名][添字] 番目 の値から [右辺] を引いた結果を配列 [配列名][添字] 番目 に代入しろ
[配列名] [ [添字] ] *= [右辺] 配列 [配列名][添字] 番目 の値に [右辺] を掛けた結果を配列 [配列名][添字] 番目 に代入しろ
[配列名] [ [添字] ] /= [右辺] 配列 [配列名][添字] 番目 の値を [右辺] で割った結果を配列 [配列名][添字] 番目 に代入しろ
[配列名] [ [添字] ] ++ 配列 [配列名][添字] 番目 の値を1増やせ
++ [配列名] [ [添字] ] 配列 [配列名][添字] 番目 の値を1増やせ
[配列名] [ [添字] ] -- 配列 [配列名][添字] 番目 の値を1減らせ
-- [配列名] [ [添字] ] 配列 [配列名][添字] 番目 の値を1減らせ

配列の要素数

表記 ふりがな
[配列名] .length 配列 [配列名] の要素数

授業内課題10-1

以下のプログラムについて、(1) 読み下し文を書き、(2) 実行結果を予測せよ。 プログラムを実行し予測と合っていたか確かめよ。

int[] numbers = {52, 23, 65, 48, 49, 30, 0, 76, 13, 22};
int minIndex = 0;
for (int i = 1; i < numbers.length; ++i) {
  if (numbers[i] < numbers[minIndex]) {
    minIndex = i;
  }
}
println("numbers[" + minIndex + "] = " + numbers[minIndex]);

授業内課題10-2

以下のプログラムについて、(1) 読み下し文を書き、(2) 実行結果を予測せよ。 プログラムを実行し予測と合っていたか確かめよ。

int[] count = new int[26];
String message = "department of information science, college of humanities and sciences, nihon university";

for (int i = 0; i < message.length(); ++i) {
  int index = message.charAt(i) - 'a';
  if (0 <= index && index < 26) {
    count[index] += 1;
  }
}

for (int i = 0; i < count.length; ++i) {
  println(char('a' + i) + " " + count[i]);
}

授業内課題10-3

フィボナッチ数列は以下の漸化式で表される数列である。

から までを整数型配列fibに格納し、コンソールに出力するように以下のプログラムを完成させよ。

int[] fib = new int[11];
fib[0] = 0;
fib[1] = 1;

// ここを作る

for (int i = 0; i < fib.length; ++i) {
  println(fib[i]);
}

授業内課題10-4

以下のような文字列型の配列から、文字数が最も多い文字列とその添字をコンソールに表示するプログラムを作成せよ。

String[] words = {
  "department",
  "of",
  "information",
  "science",
  "college",
  "of",
  "humanities",
  "and",
  "sciences",
  "nihon",
  "university"
};

実行例は以下の通りである。

longest word : words[2] = information

授業内課題の解答例

授業内課題10-1

以下のプログラムについて、(1) 読み下し文を書き、(2) 実行結果を予測せよ。 プログラムを実行し予測と合っていたか確かめよ。

int[] numbers = {52, 23, 65, 48, 49, 30, 0, 76, 13, 22};
int minIndex = 0;
for (int i = 1; i < numbers.length; ++i) {
  if (numbers[i] < numbers[minIndex]) {
    minIndex = i;
  }
}
println("numbers[" + minIndex + "] = " + numbers[minIndex]);

読み下し文

整数配列型の変数numbersを作成して、{整数52, 整数23, 整数65, 整数48, 整数49, 整数30, 整数0, 整数76, 整数13, 整数22}を要素に持った配列で初期化しろ
整数型の変数minIndexを作成して、整数0で初期化しろ
整数型の変数iを作成して、整数1で初期化しろ
変数iの値が配列numbersの要素数より小さいの真偽が真である限り以下を繰り返せ
{
  もし配列numbersの変数iの値番目の値が配列numbersの変数minIndexの値番目の値より小さいの真偽が真なら以下を実行しろ
  {
    変数minIndexに変数iの値を代入しろ
  }
  変数iの値を1増やせ
}
文字列「numbers[」に変数minIndexの値を足した結果に文字列「] = 」を足した結果に配列numbersの変数minIndex番目の値を足した結果を表示しろ

授業内課題10-2

以下のプログラムについて、(1) 読み下し文を書き、(2) 実行結果を予測せよ。 プログラムを実行し予測と合っていたか確かめよ。

int[] count = new int[26];
String message = "department of information science, college of humanities and sciences, nihon university";

for (int i = 0; i < message.length(); ++i) {
  int index = message.charAt(i) - 'a';
  if (0 <= index && index < 26) {
    count[index] += 1;
  }
}

for (int i = 0; i < count.length; ++i) {
  println(char('a' + i) + " " + count[i]);
}

読み下し文

整数配列型の変数countを作成して、要素数整数26の整数配列を作成しろで初期化しろ
文字列型の変数messageを作成して、文字列「department of information science, college of humanities and sciences, nihon university」で初期化しろ

整数型の変数iを作成して、整数0で初期化しろ
変数iの値が変数messageの値の長さより小さいの真偽が真である限り以下を繰り返せ
{
  整数型の変数indexを作成して、変数messageの値の変数iの値番目の文字から文字「a」を引いた結果で初期化しろ
  もし整数0が変数indexの値以下の真偽と変数indexの値が整数26より小さいの真偽の両方が真であるの真偽が真なら以下を実行しろ
  {
    配列countの変数indexの値番目の値に整数1を足した結果を配列countの変数indexの値番目 に代入しろ
  }
  変数iの値を1増やせ
}

整数型の変数iを作成して、整数0で初期化しろ
変数iの値が配列countの要素数より小さいの真偽が真である限り以下を繰り返せ
{
  文字「a」に変数iの値を足した結果を文字に変換した結果に文字列「 」を足した結果に配列countの変数iの値番目の値を足した結果を表示しろ
  変数iの値を1増やせ
}

授業内課題10-3

フィボナッチ数列は以下の漸化式で表される数列である。

から までを整数型配列fibに格納し、コンソールに出力するように以下のプログラムを完成させよ。

int[] fib = new int[11];
fib[0] = 0;
fib[1] = 1;

// ここを作る

for (int i = 0; i < fib.length; ++i) {
  println(fib[i]);
}

解答例

int[] fib = new int[11];
fib[0] = 0;
fib[1] = 1;

for (int i = 2; i < fib.length; ++i) {
  fib[i] = fib[i - 1] + fib[i - 2];
}

for (int i = 0; i < fib.length; ++i) {
  println(fib[i]);
}

授業内課題10-4

以下のような文字列型の配列から、文字数が最も多い文字列とその添字をコンソールに表示するプログラムを作成せよ。

String[] words = {
  "department",
  "of",
  "information",
  "science",
  "college",
  "of",
  "humanities",
  "and",
  "sciences",
  "nihon",
  "university"
};

実行例は以下の通りである。

longest word : words[2] = information

解答例

String[] words = {
  "department",
  "of",
  "information",
  "science",
  "college",
  "of",
  "humanities",
  "and",
  "sciences",
  "nihon",
  "university"
};

int maxIndex = 0;
for (int i = 0; i < words.length; ++i) {
  if (words[i].length() > words[maxIndex].length()) {
    maxIndex = i;
  }
}

println("longest word : words[" + maxIndex + "] = " + words[maxIndex]);

授業外レポート

授業外課題10-1

寿司打( http://neutral.x0.com/home/sushida/play2.html )「5000円コース」をプレイし、以下のスコアを報告せよ(スピードは任意)

  • 成績(xxx円分得 or 損した)
  • 正しく打ったキーの数
  • 平均キータイプ数(回 / 秒)
  • ミスタイプ数

授業外課題10-2

以下のプログラムについて、(1) 読み下し文を書き、(2) 実行結果を予測せよ。 プログラムを実行し予測と合っていたか確かめよ。

int[] numbers = {52, 23, 65, 48, 49, 30, 0, 76, 13, 22};
for (int i = 0; i < numbers.length / 2; ++i) {
  int tmp = numbers[i];
  numbers[i] = numbers[numbers.length - 1 - i];
  numbers[numbers.length - 1 - i] = tmp;
}
for (int i = 0; i < numbers.length; ++i) {
  println(numbers[i]);
}

授業外課題10-3

以下のプログラムについて、(1) 読み下し文を書き、(2) 実行結果を予測せよ。 プログラムを実行し予測と合っていたか確かめよ。

boolean[] primeFlag = new boolean[20];
for (int i = 2; i < primeFlag.length; ++i) {
  primeFlag[i] = true;
}

for (int i = 0; i < primeFlag.length; ++i) {
  if (primeFlag[i]) {
    for (int j = i * 2; j < primeFlag.length; j += i) {
      primeFlag[j] = false;
    }
  }
}

for (int i = 0; i < primeFlag.length; ++i) {
  if (primeFlag[i]) {
    println(i + " is prime");
  }
}

授業外課題10-4

プログラムの先頭で整数配列numbersを作成し、任意の要素で初期化する。 i番目の要素が、numbersの0番目からi番目までの総和となっているような整数配列accを作成し、コンソールに表示する以下のプログラムを完成させよ。

int[] numbers = {52, 23, 65, 48, 49, 30, 0, 76, 13, 22};
int[] acc = new int[numbers.length];

// ここを作る

for (int i = 0; i < acc.length; ++i) {
  println(acc[i]);
}

実行結果は以下の通りである。

52
75
140
188
237
267
267
343
356
378

授業外課題10-5

以下のように単語が格納された文字列配列について、全ての単語の文字数の総和を計算してコンソールに表示するプログラムを作成せよ。

String[] words = {
  "department",
  "of",
  "information",
  "science",
  "college",
  "of",
  "humanities",
  "and",
  "sciences",
  "nihon",
  "university"
};

出力結果は以下の通りである。

75

results matching ""

    No results matching ""