多次元配列
// 3*4*5の三次元配列
init [][][] list = new int [3][4][5];
// 2次元配列を初期化して宣言
int [][] list = [
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
//var で初期化して宣言
var list = new int[][] [
{ 1, 2, 3 },
{ 4, 5, 6 },
{ 7, 8, 9 },
};
// 0行1列目にアクセス
System.out.println(list[0][1]); //2
ジャグ配列
- 長さが異なる多次元配列
- 最初の宣言では外側のサイズのみ指定
- 1次元目は確保しないといけないが2次元目は確保不要
-
2次元以降はダイナミックに変更できる!
- ユースケース
- 全人口の給料の配列を作るときに都道府県ごとに作成
int [][] = salary = new int[47][];
var list = new int [3][];
list[0] = new int[2]; //0番目の配列の要素は2個
list[1] = new int[3]; //0番目の配列の要素は3個
list[2] = new int[4]; //0番目の配列の要素は4個
var list = new int [][] {
{ 1, 2 },
{ 3, 4, 5 },
{ 6, 7, 8, 9 },
};
System.out.println(list[1][2]); //5 ※サイズは3
公舎の入居者数
A大学は1フロア10部屋、3階建ての公舎4棟を管理しています。公舎の入居・退去の情報を読み込み、各部屋の入居者数を出力するプログラムを作成して下さい。
n件の情報が与えられます。各情報では、4つの整数b, f, r, vが与えられます。これは、b棟f階のr番目の部屋にv人が追加で入居したことを示します。vが負の値の場合、-v人退去したことを示します。
最初、全ての部屋には誰も入居していないものとします。
Input
最初の行に情報の数 n が与えられます。
続いて n 件の情報が与えられます。各情報には4つの整数 b, f, r, v が空白区切りで1行に与えられます。
Output
4棟について入居者数を出力して下さい。各棟について、1階、2階、3階の順に入居者数を出力します。各階については、1番目、2番目、・・・、10番目の部屋の入居者数を順番に出力します。入居者数の前には1つの空白を出力して下さい。また、各棟の間には####################(20個の#)で区切って下さい。
Constraints
* 間違った棟番号・階・部屋番号は与えられない。
* 管理の過程で1部屋の入居者数が0より少なくなることはない。
* 管理の過程で1部屋の入居者数が9より多くなることはない。
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
//10部屋、3階建ての公舎4棟
int[][][] list = new int[4][3][10];
for(int i = 0; i < n; i++) {
//b棟f階のr番目の部屋にv人が追加
int b = sc.nextInt();
int f = sc.nextInt();
int r = sc.nextInt();
int v = sc.nextInt();
list[b-1][f-1][r-1] += v;
}
for(int i = 0 ; i< 4; i++) {
for(int j = 0; j < 3; j++) {
for (int k = 0; k < 10; k++) {
System.out.print(" " + list[i][j][k]);
}
System.out.println();
}
if (i != 3)
System.out.println("####################");
}
}
}
ベクトルと行列の積
Input
1行目に n と mが空白区切りで与えられます。続く
n 行に行列 A の要素aij が空白区切りで与えられます。続く m 行にベクトルbの要素 bi がそれぞれ1行に与えられます。
Output
出力は n行からなります。ベクトル cの要素 ci をそれぞれ1行に出力してください
//内積計算
import java.util.Scanner;
public class Main {
public static void main(String[] args){
Scanner scan=new Scanner(System.in);
int n=scan.nextInt();
int m=scan.nextInt();
int a[][]=new int[n][m];
//行列A
for(int i=0;i<n;i++)for(int j=0;j<m;j++){
a[i][j]=scan.nextInt();
}
//ベクトルb
int b[]=new int[m];
for(int i=0;i<m;i++)b[i]=scan.nextInt();
//ベクトルc
int c[]=new int[n];
//c=A*b 内積計算
for(int i=0;i<n;i++){
for(int j=0;j<m;j++){
c[i]+=a[i][j]*b[j];
}
}
for(int i=0;i<n;i++)System.out.println(c[i]);
scan.close();
}
}