3. べき乗の合計のプログラムをもっと汎用的に
Test07a.java
public class Test07a {
public static void main( String[] args ){
int a, b, c, d, e, f, n;
int pow_a, pow_b, pow_c, pow_d, pow_e, pow_f;
int sum;
n = 3;
a = 3; b = 7; c = 4; d = 5; e = 9; f = 1;
}
sum = pow_a+pow_b+pow_c+pow_d+pow_e+pow_f;
System.out.println(“sum=“+sum);
}
pow_a = power(a,n); pow_b = power(b,n); pow_c = power(c,n);
pow_d = power(d,n); pow_e = power(e,n); pow_f = power(f,n); どこかで
書き間違えそう
public static int power( int x, int n ){
int i, ret; データ数を
ret = 1;
for ( i = 0; i < n; i++ ){
10000個もあったら
ret = ret * x; どうする?
}
return ret;
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 3
4. 配列を使って汎用的に
べき乗の合計を求める
int[] 型
public class Test07b { int 配列を参照する型.
public static void main( String[] args ){
int[] a; 配列は複数の値を
int[] pow_a;
int i, n, sum;
格納できる.
n = 3;
長さ6の配列を生成 番号でアクセスできる
a = new int[6];
a[0]=3; a[1]=7; a[2]=4; a[3]=5; a[4]=9; a[5]=1;
pow_a = new int[a.length]; a
for ( i = 0; i < a.length; i++ ){
pow_a[i] = power(a[i],n);
} [0]=3 [1]=7 [2]=4 [3]=5 [4]=9 [5]=1
sum = 0;
for ( i = 0; i < pow_a.length; i++ ){ 添え字は0から始まる
sum = sum + pow_a[i];
}
System.out.println(“sum=“+sum);
}
a.length
}
public static int power( int x, int n ){略}
a が参照している配列の
長さ
2008年8月,データ解析の基礎,加藤,瀬々,金子. 4
5. どのように計算されているのか
べき乗の合計を求める
public class Test07b {
public static void main( String[] args ){
int[] a;
int[] pow_a;
int i, n, sum;
n = 3;
a = new int[6];
長さ6の配列を生成
a[0]=3; a[1]=7; a[2]=4; a[3]=5; a[4]=9; a[5]=1;
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
for ( i = 0; i < pow_a.length; i++ ){
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
} 合計の
計算
最初 sum に 0 を入れて
一つずつ加えていっている
}
public static int power( int x, int n ){略}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 5
6. どのように計算されているのか
Test07b.java べき乗の合計を求める
public class Test07b {
public static void main( String[] args ){
int[] a;
int[] pow_a;
int i, n, sum;
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4;
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
for ( i = 0; i < pow_a.length; i++ ){
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
} 合計の
計算
最初 sum に 0 を入れて
一つずつ加えていっている
}
public static int power( int x, int n ){略}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 6
7. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i n
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略}
}
正確には,様々なメモリ領域があり,また,スタックをヒープ領域に割り当
2008年8月,データ解析の基礎,加藤,瀬々,金子. 7
ててもよいことになっているが,ここでは簡単化のため,スタック以外のメ
モリ領域をすべてヒープと呼ぶことにする
8. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 8
9. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
配列の実体はヒープ上に確保され,
public static int power( int x, int n ){略} [0]=0 [1]=0 [2]=0
}
変数a自体は実体のある
場所(アドレス)だけ保持している.
2008年8月,データ解析の基礎,加藤,瀬々,金子. 9
10. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=0 [2]=0
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 10
11. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=0
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 11
12. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 12
13. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=0 [1]=0 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 13
14. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=0 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=0 [1]=0 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 14
15. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=0 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=0 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 15
16. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=1 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=0 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 16
17. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=1 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=0 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 17
18. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=1 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 18
19. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=2 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 19
20. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=2 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=0
2008年8月,データ解析の基礎,加藤,瀬々,金子. 20
21. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=2 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 21
22. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=3 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 22
23. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=3 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 23
24. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=3 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 24
25. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=3 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=0
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 25
26. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=0 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=0
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 26
27. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=0 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=27
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 27
28. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=1 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=27
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 28
29. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=1 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=27
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 29
30. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=1 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=370
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 30
31. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=2 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=370
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 31
32. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=2 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=370
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=9 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 32
33. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=2 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=434
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 33
34. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=3 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=434
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=27 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 34
35. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=3 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=434
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=9 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 35
36. どのように計算されているのか
Test07b.java べき乗の合計を求める スタック メモリの一部
public class Test07b { main のスタックフレーム
public static void main( String[] args ){
int[] a; a pow_a
int[] pow_a;
int i, n, sum;
i=3 n=3
n = 3;
a = new int[3];
長さ3の配列を生成
a[0]=3; a[1]=7; a[2]=4; sum=434
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
} べき乗の
計算
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
}
for ( i = 0; i < pow_a.length; i++ ){ 合計の
計算
ヒープ メモリの一部
}
public static int power( int x, int n ){略} [0]=3 [1]=7 [2]=4
}
[0]=9 [1]=343 [2]=64
2008年8月,データ解析の基礎,加藤,瀬々,金子. 36
37. 練習7-b.
Test07b.java プロジェクト名: test07
public class Test07b {
public static void main( String[] args ){
デバッガを使って
int[] a; (1) pow_a および sum が
int[] pow_a;
int i, n, sum; 計算されていく様子を
n = 3;
a = new int[3];
長さ3の配列を生成 確認せよ
a[0]=3; a[1]=7; a[2]=4; (2) 変数 n の値を 2 などに
変更しても正しく計算
pow_a = new int[a.length];
for ( i = 0; i < a.length; i++ ){
}
pow_a[i] = power(a[i],n);
sum = 0;
べき乗の
計算} されることを確認せよ
for ( i = 0; i < pow_a.length; i++ ){
}
sum = sum + pow_a[i];
System.out.println(“sum=“+sum);
} 合計の
計算
}
public static int power( int x, int n ){略}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 37
38. 配列のまとめ
int型配列 int[]
double型配列 double[]
配列の領域確保
double[] x;
x = new double[3];
x 配列は参照型 a.length
ヒープ a が参照している配列の
長さ
[0]=10.0 [1]=10.1 [2]=10.2
添え字は0から始まる
2008年8月,データ解析の基礎,加藤,瀬々,金子. 38
44. 配列データの最大値を探すには
配列データ中,最大の数値を見つけるプログラム
Test07c.java
public class Test07c { 計算方法:
public static void main( String[] args ){
int[] a;
データを一つずつみて
int i; 新記録なら記録を更新する
int max_a;
a = new int[3];
a[0]=3; a[1]=7; a[2]=4; 計算機で表現できる最小の整数を
max_a = Integer.MIN_VALUE; 変数 max_a に代入
for ( i = 0; i < a.length; i++ ){
if ( max_a < a[i] ){
}
}
max_a = a[i];
}変数a[i]の値がmax_aより大きいなら
max_a に a[i] を代入する
System.out.println(“max_a=“+max_a);
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 44
45. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
2008年8月,データ解析の基礎,加藤,瀬々,金子. 45
46. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0] [1] [2]
2008年8月,データ解析の基礎,加藤,瀬々,金子. 46
47. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 47
48. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=最小整数
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 48
49. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=0
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=最小整数
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 49
50. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=0
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=最小整数
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 50
51. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=0
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=最小整数
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 51
52. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=0
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=3
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 52
53. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=1
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=3
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 53
54. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=1
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=3
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 54
55. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=1
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=3
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 55
56. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=1
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=7
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 56
57. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=2
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=7
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 57
58. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=2
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=7
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 58
59. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=2
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=7
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 59
60. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=3
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=7
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 60
61. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=3
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=7
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 61
62. 最大値計算の過程
Test07c.java
スタック メモリの一部
public class Test07c { main のスタックフレーム
public static void main( String[] args ){
int[] a; a i=3
int
int
i;
max_a; 長さ3の配列を生成
a = new int[3]; max_a=7
a[0]=3; a[1]=7; a[2]=4;
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){
}
if ( max_a < a[i] ){
}
max_a = a[i]; } 最大値の
計算
System.out.println(“max_a=“+max_a);
}
}
ヒープ メモリの一部
[0]=3 [1]=7 [2]=4
2008年8月,データ解析の基礎,加藤,瀬々,金子. 62
63. 練習7-c.
Test07c.java プロジェクト名: test07
public class Test07c {
public static void main( String[] args ){
デバッガを使って
int[] a; (1) max_a が正しく
int i;
int max_a; 更新されていく過程
a = new int[3];
a[0]=3; a[1]=7; a[2]=4;
を観測せよ
(2) 配列データの数値を
max_a = java.lang.Integer.MIN_VALUE;
for ( i = 0; i < a.length; i++ ){ 適当に変更しても
if ( max_a < a[i] ){
max_a = a[i];
正しく最大値が
} 計算されることを
}
System.out.println(“max_a=“+max_a); 確認せよ
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 63
64. 練習7-d.
Test07d.java プロジェクト名: test07
public class Test07c {
public static void main( String[] args ){
最小値を求める
int[] a; プログラムを完成させよ
int
int
i;
min_a;
最小値をこの変数に入れる
a = new int[3];
a[0]=3; a[1]=7; a[2]=4;
min_a = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){
if ( min_a > a[i] ){
この部分を埋めよ
min_a = a[i];
int型の最大値
} java.lang.Integer.MAX_VALUE;
}
System.out.println(“min_a=“+min_a);
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 64
65. 練習7-e.
Test07e.java プロジェクト名: test07 このプログラムは最小値
を求め,何番目のデータ
public class Test07c {
public static void main( String[] args ){ が最小値をとるか計算す
int[] a;
int i, i_min;
るプログラムである
int min_a;
a = new int[3];
この場合,
a[0]=7; a[1]=3; a[2]=4; 以下のような出力となる
i_min = -1; 画面
min_a = java.lang.Integer.MAX_VALUE; min_a=3
for ( i = 0; i < a.length; i++ ){ i_min=1
if ( min_a > a[i] ){
min_a = a[i];
}
i_min = i;
(1) 数値を適当に変更して
} みて,それでも正しく
System.out.println(“min_a=“+min_a);
System.out.println(“i_min=“+i_min); 計算されることを確認
}
} せよ
(2) なぜ最小データの番号
が計算できるか考えよ
2008年8月,データ解析の基礎,加藤,瀬々,金子. 65
66. 練習7-e0.
Test07e0.java プロジェクト名: test07 このプログラムは最大値
を求め,何番目のデータ
public class Test07c {
public static void main( String[] args ){ が最大値をとるか計算す
int[] a;
int i, i_max;
るプログラムを完成させよ
int max_a;
a = new int[3];
a[0]=7; a[1]=3; a[2]=4;
// Compute the maximal number and its index
System.out.println(“max_a=“+max_a);
System.out.println(“i_max=“+i_max);
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 66
68. 最小値計算プログラム再考
Test07d.java プロジェクト名: test07
public class Test07f { 下の2つのコードは等価
public static void main( String[] args ){
int[] a;
int i;
a = new int[3];
int min_a; a[0]=3; a[1]=7; a[2]=4;
a = new int[3];
a[0]=3; a[1]=7; a[2]=4; 長さ3の配列を確保し
min_a = java.lang.Integer.MAX_VALUE;
それから値を代入
for ( i = 0; i < a.length; i++ ){
if ( min_a > a[i] ){
min_a = a[i]; a = new int[]{3,7,4};
}
} 初期値{3,7,4} の配列を確保
System.out.println(“min_a=“+min_a);
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 68
69. 「配列の初期化」を使うと2行が1行に
Test07f.java プロジェクト名: test07
public class Test07f {
public static void main( String[] args ){
int[] a;
int i;
int min_a;
a = new int[]{3,7,4};
min_a = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){
if ( min_a > a[i] ){
min_a = a[i];
}
}
System.out.println(“min_a=“+min_a);
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 69
71. 最小値計算部分をメソッドに
プロジェクト名: test07
Test07g.java
public class Test07g {
public static void main( String[] args ){
int[] a;
int min_a; これでmainメソッドは
a = new int[]{3,7,4};
スッキリ
min_a = min(a);
System.out.println(“min_a=“+min_a);
}
public static int min( int[] a ){
int i, ret;
配列を引数にするメソッド
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){
if ( ret > a[i] ){
ret = a[i];
}
}
return ret;
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 71
72. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a);
}
public static int min( int[] a ){
int i, ret;
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
}
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 72
73. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a);
}
public static int min( int[] a ){
int i, ret;
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 73
74. min(a)を呼び出す
すると新たなスタックフレームが作られる
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret
if ( ret > a[i] ){
ret = a[i];
} 引数には,配列全体がコ
}
ピーされるのではなくて
ヒープ メモリの一部
return ret;
[0]=3 [1]=7 [2]=4
}
} 参照のみがコピーされて
いることに注意.
2008年8月,データ解析の基礎,加藤,瀬々,金子. 74
75. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=最大整数
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 75
76. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=0
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=最大整数
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 76
77. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=0
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=最大整数
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 77
78. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=0
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=3
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 78
79. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=1
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=3
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 79
80. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=1
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=3
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 80
81. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=1
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=3
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 81
82. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=1
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=3
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 82
83. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=2
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=3
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 83
84. どのように計算されているか
プロジェクト名: test07 スタック メモリの一部
Test07g.java
main のスタックフレーム
public class Test07g {
public static void main( String[] args ){ a
int[] a;
int min_a;
a = new int[]{3,7,4}; min_a
min_a = min(a);
System.out.println(“min_a=“+min_a); min のスタックフレーム
}
public static int min( int[] a ){
int i, ret;
a i=2
ret = java.lang.Integer.MAX_VALUE;
for ( i = 0; i < a.length; i++ ){ ret=3
if ( ret > a[i] ){
ret = a[i];
}
} ヒープ メモリの一部
return ret;
} [0]=3 [1]=7 [2]=4
}
2008年8月,データ解析の基礎,加藤,瀬々,金子. 84