エンジニア成長日記 swaponQ

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

新・明解 Java 入門 演習 7-30, 7-31, 7-32, 7-33 解答

Hello, Terminal!swaponQです!

今回は演習 7-30, 7-31, 7-32, 7-33 に取り組んでいこうと思います。

  • 演習 7-30

二つのint型整数a,bの最小値、三つのint型整数a,b,cの最小値、配列aの要素の最小値を求める多重定義されたメソッド群を作成せよ。

ソースコード

class ex07_30 {
  static int min(int a, int b) {
    int min = a;
    if(a > b) min = b;
    return min;
  }
  static int min(int a, int b, int c) {
    int min = a;
    if (b < min) min = b;
    if (c < min) min = c;
    return min;
  }
  static int min(int[] a) {
    int min = a[0];
    for(int i =1; i<a.length;i++)
    if (a[i] < min) min = a[i];
    return min;
  }
  public static void main(String[] args) {
    int a = 3;
    int b = 6;
    // 二値の最小値
    System.out.println("x, yの最小値は" + min(a,b) + "です。");
    int x = 1;
    int y = 0;
    int z = -1;
    // 三値の最小値
    System.out.println("x, y, zの最小値は" + min(x, y, z) + "です。");
    int[] array = {2,4,6,8,0};
    // 配列の最小値
    System.out.println("配列arrayの最小値は" + min(array) + "です。");

  }
}

・実行結果

x, yの最小値は3です。
x, y, zの最小値は-1です。
配列arrayの最小値は0です。
  • 演習 7-31

int型整数xの絶対値、long型整数xの絶対値、float型実数xの絶対値、double型実数xの絶対値を求める、多重定義されたメソッド群を作成せよ。

ソースコード

class ex07_31 {
  static int absolute(int x){
    if(x<0) x = -x;
    return x;
  }
  static long absolute(long x){
    if(x<0) x = -x;
    return x;
  }
  static float absolute(float x){
    if(x<0) x = -x;
    return x;
  }
  static double absolute(double x){
    if(x<0) x = -x;
    return x;
  }
  public static void main(String[] args){
    int i = 3;
    long l = -7;
    float f = 0;
    double d = -5.21;
    System.out.println("int型の絶対値:" + absolute(i));
    System.out.println("long型の絶対値:" + absolute(l));
    System.out.println("float型の絶対値:" + absolute(f));
    System.out.println("double型の絶対値:" + absolute(d));
  }
}

・実行結果

int型の絶対値:3
long型の絶対値:7
float型の絶対値:0.0
double型の絶対値:5.21
  • 演習 7-32

List7-12のメソッドprintBitsはint型整数値の内部ビットを表示するものであった。他の整数型に対しても同様の働きを行う、多重定義されたメソッド群を作成せよ。

ソースコード

import java.util.Scanner;

class ex07_32 {
  //--- byte型のビット構成を表示 ---//
  static void printBits(byte x) {
    for (int i = 31; i >= 0; i--)
    System.out.print(((x >>> i & 1) == 1) ? '1' : '0');
    System.out.printf("\nbyte型\n");
  }
  //--- short型のビット構成を表示 ---//
  static void printBits(short x) {
    for (int i = 31; i >= 0; i--)
    System.out.print(((x >>> i & 1) == 1) ? '1' : '0');
    System.out.printf("\nshort型\n");
  }
  //--- int型のビット構成を表示 ---//
  static void printBits(int x) {
    for (int i = 31; i >= 0; i--)
    System.out.print(((x >>> i & 1) == 1) ? '1' : '0');
    System.out.printf("\nint型\n");
  }
  //--- long型のビット構成を表示 ---//
  static void printBits(long x) {
    for (int i = 31; i >= 0; i--)
    System.out.print(((x >>> i & 1) == 1) ? '1' : '0');
    System.out.printf("\nlong型\n");
  }
  public static void main(String[] args) {
    int a = 7;
    printBits(a);
  }
}

・実行結果

00000000000000000000000000000111
int型
  • 演習 7-33

int型の1次元配列とint型の2次元配列の全要素の値を表示する、多重定義されたメソッド群を作成せよ。

ソースコード

class ex07_33 {
  static void printArray(int[] a) {
    for(int i=0; i<a.length;i++)
    System.out.print(a[i] + " ");
    System.out.println();
  }
  static int max(int[][] a) {
    int max = a[0][0];
    for(int i = 0; i<a.length;i++) {
      for(int j = 0; j<a[i].length;j++) {
        if (a[i][j] > max) max = a[i][j];
      }
    }
    return max;
  }
  static void printArray(int[][] a) {
    int t = max(a);
    int s = 2;
    do {
      t /= 10;
      s++;
    } while (t > 10);
    String ds = "%"+s+"d";
    for (int i = 0; i<a.length;i++) {
      for (int j = 0;j<a[i].length;j++) {
        System.out.printf(ds,a[i][j]);
      }
      System.out.println();
    }
  }

  public static void main(String[] args) {
    int[] x = {3,-304,3298573,43,5};
    printArray(x);
    int[][] x2 = {
      {2,54,3,63},
      {494534,4,-43,3},
      {4931910,3}
    };
    printArray(x2);
  }
}

・実行結果

3 -304 3298573 43 5

       2      54       3      63
  494534       4     -43       3
 4931910       3

今回で「第7章:メソッド」は終了です。長い戦いでしたがお疲れ様でした!
次回からは「第8章:クラスの基本」に入ります。

Goodbye, Terminal… swaponQでした!