ヤマカサのプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

線形探索を勘違いする

f:id:yamakasa3:20180221010946p:plain
線形探索のイメージ

package linear_search;

public class Exec_LinearSearch {
    public static void main(String[] args) {
        int[] array = {1, 2, 3, 3, 4};
        int m =3;
        LinearSearch ls = new LinearSearch(array, m);
        int[] ki = ls.getN();
        for(int i = 0; i < ki.length; i++) {
            System.out.print(ki[i]);
            System.out.println();
        }
    }
}
package linear_search;

//線形探索
public class LinearSearch {
    //int[] n;  //配列の中にある目的値の要素番号
    private int[] array;
    private int m;
    //コンストラクタ 配列と目的値を受け取る
    public LinearSearch(int[] array, int m) {
        this.array = array;
        this.m = m;
    }
    public int[] getN() {
        int k = 0;
        for(int i = 0; i < array.length; i++) {
            if(array[i] == m) {
                k=+1;
            }
        }
        if(k == 0) {
            return null;
        }else {
            int l = 0;
            int[] n = new int[k+1];
            for(int i = 0; i < array.length; i++) {
                if(array[i] == m) {
                    n[l] = i;
                    l=l+1;
                }
            }
            return n;
        }
    }
}

なんて酷いプログラムなんでしょうか( ^ω^)・・・ 画像のような配列のなかで"3"が入っている配列の番号を取得するプログラムを書きたかったんです。 LinearSearch の中でif文を使って3と等しい配列の条件を2回使っていまっているの変なんですが、条件を満たす配列の要素数を得るためにこんな変なことになってしまいました。 改良する点はたくさんあると思うので、もっと勉強して改善できるようになりたいです。