JavaLog

プログラミング初心者向けの小ネタ集

【Java8】配列の値をコピー

1次元配列

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        
        //1次元配列
        int[] array1 = new int[10];
        for(int i=0; i<10; i++) {
            array1[i] = i;
        }
        
        int[] array2 = array1.clone();
        array2[0] = 20;
        
        System.out.println(Arrays.toString(array1));
        System.out.println(Arrays.toString(array2));
    }
}
実行結果

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[20, 1, 2, 3, 4, 5, 6, 7, 8, 9]

2次元配列

import java.util.Arrays;

public class Main {
    public static void main(String[] args) {
        
        final int N = 2, M = 5;
        
        //2次元配列
        int[][] array1 = new int[N][M];
        for(int i=0; i<N; i++) {
            for(int j=0; j<M; j++) {
                array1[i][j] = i+j;
            }
        }
        
        int[][] array2 = new int[N][M];
        for(int i=0; i<N; i++) {
            array2[i] = array1[i].clone();
        }
        array2[0][0] = 20;
        
        System.out.println(Arrays.deepToString(array1));
        System.out.println(Arrays.deepToString(array2));
    }
}
実行結果

[[0, 1, 2, 3, 4], [1, 2, 3, 4, 5]]
[[20, 1, 2, 3, 4], [1, 2, 3, 4, 5]]

【Java8】最大公約数・最小公倍数

ユークリッドの互除法

public class Main {
    public static void main(String[] args) {
        
        //2つの数の最大公約数
        long a = 36;
        long b = 27;
        long gcd = gcd(a, b);
        System.out.println(gcd);
        
        //2つの数の最小公倍数
        long lcm = a * b / gcd;
        System.out.println(lcm);   
    }
    
    static long gcd(long a, long b) {
        long ans = 0;
        while(true) {
            if(a == b) {
                ans = a;
                break;
                
            } else if(a > b) {
                long tmp = a-b;
                a = b;
                b = tmp;
                
            } else if(a < b) {
                long tmp = b-a;
                a = a;
                b = tmp;
            }
        }
        return ans;
    }
}
実行結果

9
108

【Java8】2~Nまでに含まれる素数

エラストテネスの振るい

public class Main {
    public static void main(String[] args) {
        
        //2~N(100)までに含まれる素数
        int N = 100;
        boolean[] prime = new boolean[N+1];//0~Nまで
        
        for(int i=2; i<=Math.sqrt(N); i++) {
            if(!prime[i]) {
                for(int j=i+i; j<=N; j+=i) {
                    prime[j] = true;
                }
            }
        }
        
        for(int i=2; i<=N; i++) {
            if(!prime[i]) {
                System.out.print(i + " ");
            }
        }
    }
}
実行結果

2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

【Java8】配列、コレクションのソート

配列のソート

import java.util.Arrays;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {

        // 配列のソート
        Integer[] array = { 10, 3, 15, 2, 1 };

        // 昇順
        Arrays.sort(array, Comparator.naturalOrder());
        System.out.println(Arrays.toString(array));

        // 降順
        Arrays.sort(array, Comparator.reverseOrder());
        System.out.println(Arrays.toString(array));
    }
}
実行結果

[1, 2, 3, 10, 15]
[15, 10, 3, 2, 1]

コレクションのソート

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;

public class Main {
    public static void main(String[] args) {
        
        // コレクションのソート
        ArrayList<Integer> list = new ArrayList<>();
        list.add(10);
        list.add(3);
        list.add(15);
        list.add(2);
        list.add(1);

        // 昇順
        Collections.sort(list, Comparator.naturalOrder());
        System.out.println(list.toString());

        // 降順
        Collections.sort(list, Comparator.reverseOrder());
        System.out.println(list.toString());
    }
}
実行結果

[1, 2, 3, 10, 15]
[15, 10, 3, 2, 1]