エンジニア成長日記 swaponQ

コンピュータサイエンス専攻の一般人のブログです。

新・明解 Java 入門 演習 7-22, 7-23, 7-24, 7-25 解答

Hello, Terminal!swaponQです!

今回は演習 7-22, 7-23, 7-24, 7-25 に取り組んでいこうと思います。

  • 演習 7-22

配列aと同じ配列(要素数が同じで、すべての要素の値が同じ配列)を生成して返却するメソッドarrayCloneを作成せよ。


ソースコード

import java.util.Scanner;

class ex07_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 stdIn = new Scanner(System.in);
    System.out.print("要素数:");
    int n = stdIn.nextInt();
    int[] x = new int[n];
    for (int i = 0; i < n; i++){
      System.out.print("x[" + i + "] = ");
      x[i] = stdIn.nextInt();
    }
    int[] b =  arrayClone(x);
    for (int i = 0; i < n; i++)
    System.out.println("clone[" + i + "] = " + b[i]);
  }
}

・実行結果

要素数:3
x[0] = 2
x[1] = 5
x[2] = 3
clone[0] = 2
clone[1] = 5
clone[2] = 3
  • 演習 7-23

配列aの要素の中で値がxである全要素のインデックスを先頭から順に格納した配列を返却するメソッドarraySrchIdxを作成せよ。

ソースコード

import java.util.Scanner;

class ex07_23 {
  static int[] arraySrchIdx(int[] a, int x) {
    int num = 0;
    for (int i = 0; i<a.length; i++){
      if(a[i] == x)
      num++;
    }
    int[] b = new int[num];
    int n = 0;
    for (int i = 0; i<a.length; i++){
      if(a[i] == x){
        b[n] = i;
        n++;
      }
    }
    return b;
  }
  public static void main(String[] args) {
    Scanner stdIn = new Scanner(System.in);
    System.out.print("要素数:");
    int na = stdIn.nextInt();
    int[] a = new int[na];
    for (int i = 0; i < na; i++) {
      System.out.print("a[" + i + "]:");
      a[i] = stdIn.nextInt();
    }
    System.out.print("整数値:");
    int x = stdIn.nextInt();
    System.out.println();
    int [] idx = arraySrchIdx(a,x);
    for(int i = 0; i< idx.length; i++)
    System.out.println("idx[" + i + "]:" + idx[i]);  
  }
}

・実行結果

要素数:3
a[0]:2
a[1]:4
a[2]:2
整数値:2
idx[0]:0
idx[1]:2
  • 演習 7-24

配列aから要素a[idx]を削除した配列を返却するメソッドarrayRmvOfを作成せよ。

ソースコード

import java.util.Scanner;

class ex07_24 {
  //7-18で作成したaryRmvを使用
  static void aryRmv(int[] a,int idx) {
    for(int i = idx; i<a.length-1;i++){
      a[i] = a[i + 1];
    }
  }
  static int[] arrayRmvOf(int[] a, int idx) {
    int[] ans = new int[a.length-1];
    aryRmv(a,idx);
    for (int i = 0; i<a.length-1; i++)
    ans[i] = a[i];
    return ans;
  }

  public static void main(String[] args) {
    Scanner stdIn = new Scanner(System.in);
    System.out.print("要素数:");
    int na = stdIn.nextInt();
    int[] a = new int[na];
    for (int i = 0; i < na; i++) {
      System.out.print("a[" + i + "] : ");
      a[i] = stdIn.nextInt();
    }
    System.out.print("整数:");
    int idx = stdIn.nextInt();
    int[] b = arrayRmvOf(a,idx);
    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
整数:2
b[0] : 2
b[1] : 5
  • 演習 7-25

配列aから要素a[idx]を先頭とするn個の要素を削除した配列を返却するメソッドarrayRmvOfNを作成せよ。

ソースコード

import java.util.Scanner;

class ex07_25 {
  //7-19で作成したaryRmvNを使用
  static void aryRmvN(int[] a,int idx,int n) {
    for(int i = idx; i<a.length-n;i++){
      a[i] = a[i + n];
    }
  }
  static int[] arrayRmvOfN(int[] a,int idx,int n) {
    int[] ans = new int[a.length-n];
    aryRmvN(a,idx,n);
    for(int i=0; i<ans.length; i++)
    ans[i] = a[i];
    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 idx = stdIn.nextInt();
    System.out.print("削除したい個数:");
    int n = stdIn.nextInt();
    int[] b = arrayRmvOfN(a,idx,n);
    for (int i = 0; i < b.length; i++)
    System.out.println("b[" + i + "] = " + b[i]);
  }
}

・実行結果

要素数:3
a[0] : 1
a[1] : 3
a[2] : 5
削除したい要素:1
削除したい個数:2
b[0] = 1

今回は以上です。お疲れ様でした!
次回は演習 7-26, 7-27, 7-28, 7-29 です。

Goodbye, Terminal… swaponQでした!