新・明解 Java 入門 演習 7-26, 7-27, 7-28, 7-29 解答
Hello, Terminal!swaponQです!
今回は演習 7-26, 7-27, 7-28, 7-29 に取り組んでいこうと思います。
- 演習 7-26
配列の要素a[idx]にxを挿入した配列を返却するメソッドarrayInsOfを作成せよ。
import java.util.Scanner; class ex07_26{ //7-20で作成したaryInsを使用 static void aryIns(int[] a,int idx,int x) { int t = a.length-1; for(int i = a.length-1; i>idx; i--){ a[i] = a[i - 1]; } a[idx] = x; } static int[] arrayInsOf(int[] a,int idx,int x) { int ans[] = new int[a.length+1]; for(int i=0; i<a.length; i++) ans[i] = a[i]; ans[a.length] = 0; aryIns(ans,idx,x); return ans; } public static void main(String[] args) { Scanner stdIn = new Scanner(System.in); System.out.print("要素数:"); int num = stdIn.nextInt(); int[] a = new int[num]; for (int i = 0; i < num; i++) { System.out.print("a[" + i + "] : "); a[i] = stdIn.nextInt(); } System.out.print("挿入したい要素:"); int n = stdIn.nextInt(); System.out.print("挿入したい場所:"); int idx = stdIn.nextInt(); int[] b = arrayInsOf(a,idx,n); for (int i = 0; i < b.length; i++) System.out.println("b[" + i + "] = " + b[i]); } }
・実行結果
要素数:3 a[0] : 2 a[1] : 5 a[2] : 7 挿入したい要素:4 挿入したい場所:1 b[0] = 2 b[1] = 4 b[2] = 5 b[3] = 7
- 演習 7-27
List7-20のプログラムを三つの配列の要素数が等しければ加算を行ってtrueを返し、等しくなければ加算を行わずにfalseを返すメソッドに書き換えよ。
class ex07_27 { static boolean addMatrix(int[][] x, int[][] y, int[][] z) { boolean flag = true; if((x.length == y.length) && (x.length == z.length)){ for(int i=0; i < x.length; i++){ if(!((x[i].length == y[i].length) && (z[i].length==y[i].length))) flag = false; } } else { flag = false; } if(flag == true){ for (int i = 0; i < x.length; i++) { for (int j = 0; j < x[i].length; j++) { z[i][j] = x[i][j] + y[i][j]; } } } return flag; } static void printMatrix(int[][] m) { for (int i = 0; i < m.length; i++) { for (int j = 0; j < m[i].length; j++) System.out.print(m[i][j] + " "); System.out.println(); } } public static void main(String[] args) { int[][] a = { {1, 2, 3}, {4, 5, 6} }; int[][] b = { {6, 3, 4}, {5, 1, 2} }; int[][] c = new int[2][3]; boolean pflag = addMatrix(a, b, c); if (pflag == true) { System.out.println("行列a");printMatrix(a); System.out.println("行列b");printMatrix(b); System.out.println("行列c");printMatrix(c); } else { System.out.println("false"); } } }
・実行結果
行列a 1 2 3 4 5 6 行列b 6 3 4 5 1 2 行列c 7 5 7 9 6 8
- 演習 7-28
行列xとyの和を格納した2次元配列を返すメソッドを作成せよ。
class ex07_28 { static int[][] addMatrix(int[][] x, int[][] y) { int[][]z = new int[x.length][x[0].length]; for (int i = 0; i < x.length; i++) { for (int j = 0; j < x[i].length; j++) { z[i][j] = x[i][j] + y[i][j]; } } return z; } static void printMatrix(int[][] m) { for (int i = 0; i < m.length; i++) { for (int j = 0; j < m[i].length; j++) System.out.print(m[i][j] + " "); System.out.println(); } } public static void main(String[] args) { int[][] a = { {1, 2, 3}, {4, 5, 6} }; int[][] b = { {6, 3, 4}, {5, 1, 2} }; int[][] c = addMatrix(a,b); System.out.println("行列a");printMatrix(a); System.out.println("行列b");printMatrix(b); System.out.println("行列c");printMatrix(c); } }
・実行結果
行列a 1 2 3 4 5 6 行列b 6 3 4 5 1 2 行列c 7 5 7 9 6 8
- 演習 7-29
2次元配列aと同じ配列(要素数が同じで、すべての要素の値が同じ配列)を生成して返却するメソッドaryClone2を作成せよ。
class ex07_29 { static int[][] aryClone2(int[][] a) { int[][] ans = new int[a.length][a[0].length]; for (int i = 0; i<ans.length; i++) { for (int j = 0; j<ans[i].length; j++) { ans[i][j] = a[i][j]; } } return ans; } static void printMatrix(int[][] m) { for (int i = 0; i < m.length; i++) { for (int j = 0; j < m[i].length; j++) System.out.print(m[i][j] + " "); System.out.println(); } } public static void main(String[] args) { int[][] a = {{1, 2, 3}, {4, 5, 6}}; int[][] b = aryClone2(a); System.out.println("行列a");printMatrix(a); System.out.println("行列b");printMatrix(b); } }
・実行結果
行列a 1 2 3 4 5 6 行列b 1 2 3 4 5 6
今回は以上です。お疲れ様でした!
次回は演習 7-30, 7-31, 7-32, 7-33 です。
Goodbye, Terminal… swaponQでした!