[Javaの王になるための道]第8章:Java SE(配列の定義と使用1)

24c9839dbc914e478fafb4ffe1094f4d.gif

 

コンテンツ

 

まず、配列の基本的な使用法

1.アレイとは

2.配列を定義します 

3.アレイの使用

配列を出力します。 

次に、メソッドのパラメータとしての配列

1.基本的な使用法

3.アレイの練習用の質問

1.2つの変数の値を交換します

2.配列内の各要素を受け取るメソッドを記述します*2 

3.tostring関数をシミュレートします

4.配列内で最大の要素を見つけます 

5.配列内の指定された要素を検索します(順次検索) 

6.配列内の指定された要素を検索します(二分探索) 

 要約:

私がいるから。


 

まず、配列の基本的な使用法

1.アレイとは

配列:同じデータ型のデータのセットを格納するコレクション。

2.配列を定義します 

int []:int型の配列 

double []:double型の配列

変数は、次のようなタイプで定義できます。

int [] array、arrayはこのタイプの変数であり、同じデータのセットを格納する変数です。

配列を定義するには、次の3つの方法があります。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16  

最初:

int [] array={1,2,3,4,5,6};配列を定義して初期化します 

newは書かれていませんが、実際にはオブジェクトです

予防:

int [10] array = {1,2,3,4,5,6};スペルが間違っています。int[]は型であり、角かっこに数字を追加することはできません。これは、その型を破棄することと同じです。ここ。

 

二番目:

int [] array2 = new int [3];

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16 定義配列が初期化されていません

第3:

int [] array3 = new int [] {1,2,3,4,5,6};

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

定義して初期化する 

3つの中で最も使用されているのは最初のものです

3.アレイの使用

配列の長さを取得します。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

Javaでは、配列名array.lengthを使用して、現在の配列の長さを直接見つけることができます。

配列要素へのアクセス:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_19、color_FFFFFF、t_70、g_se、x_16

配列のインデックス4の要素にアクセスします 

範囲外の配列要素へのアクセス:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16 Java言語の範囲外の直接エラー

配列要素の変更:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16  

 配列名の角かっこを使用すると、添え字の内容にアクセスできるだけでなく、添え字にデータを書き込むこともできます。 

配列を出力します。 

1つ目:(forループ)

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

 2番目:(ループごとに拡張されたforループ)

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

 forループとfor各ループの違い:

forループは添え字を取得できます。

for eachループは添え字を取得できず、コレクションでより多く使用されます

3番目のタイプ:Javaの操作配列ツールクラスArraysの助けを借りて

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

次に、メソッドのパラメータとしての配列

1.基本的な使用法

JVMの簡単な紹介

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

 

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16 メモリ内のローカル変数の保存:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

 

参照は、オブジェクトの書き込みを指していません。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

この参照はオブジェクトを指していません

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

参照は同時に複数のオブジェクトを指すことができますか? 

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

このコードでは、1つのオブジェクトのみを指し、オブジェクトのアドレスを格納できます。最後に、最後のオブジェクトのアドレスのみが保存されます 

 

配列をパラメーターとしてメソッドに渡すプロセス:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

印刷結果を解きます:

最初の2つの解決策:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16 

fun2は結果を出力します:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16 

分析例:次の図は何を表していますか 

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16 

array2の参照を表します。これは、array1の参照が指すオブジェクトを指します。

次の図は、上記の例の意味を表しています。

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

予防:

参照が参照を指していると言うのは誤りです。参照はオブジェクトのみを指すことができます

参照はスタック上にある必要がありますか?

必ずしも、変数がスタック上にあるかどうかは、変数の性質によって決まります。ローカル変数の場合は、スタック上にある必要があります。そうでない場合、たとえば、インスタンスメンバー変数は必ずしもスタック上にあるとは限りません。

3.アレイの練習用の質問

1.2つの変数の値を交換します

public class TestDemo {
    public static void swap(int[] array){
        int tmp = array[0];
        array[0] = array[1];
        array[1] = tmp;

    }
    public static void main(String[] args) {
        int[] array = {10,20};
        System.out.println("交换前: "+array[0]+" "+array[1]);
        swap(array);
        System.out.println("交换后: "+array[0]+" "+array[1]);
    }

印刷結果:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

2.配列内の各要素を受け取るメソッドを記述します*2 

 /**
     * 在原来的数组上扩大2倍
     * @param array
     */
    public static void enlarge(int[] array){
        for (int i = 0; i <array.length ; i++) {
            array[i] = array[i]*2;
        }

    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7};
        enlarge(array);
        System.out.println(Arrays.toString(array));
    }

印刷結果:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

元の配列の値を2倍新しい配列に入れます

/**
     * 把原来数组扩大2倍的值放在一个新的数组中
     * @param array
     * @return
     */
    public static int[] func(int[] array) {
        int[] ret = new int[array.length];
        for (int i = 0; i < array.length; i++) {
            ret[i] = array[i] * 2;
        }
        return ret;
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7};
       int[] ret =  func(array);
        System.out.println(Arrays.toString(ret));
    }

 

3.tostring関数をシミュレートします

public static String myToString(int[] array){
        String str = "[";

        for (int i = 0; i <array.length ; i++) {
            str = str+array[i];
            if(i != array.length-1){
                str+= ",";
            }
        }
        str= str + "]";
        return str;
    }

    public static void main(String[] args) {
        int[] array = {1,2,3,4,5,6,7};
       String str =  myToString(array);
        System.out.println(str);
    }

印刷結果:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

4.配列内で最大の要素を見つけます 

    public static int maxNum(int[] array){
        if(array == null) return -1;
        if (array.length == 0) return -1;
        int max = array[0];
        for (int i = 1; i <array.length ; i++) {
            if(max < array[i]){
                max = array[i];

            }
        }
        return max;
    }

    public static void main(String[] args) {
        int[] array = {12,8,14,26,5,7,8};
        int max = maxNum(array);
        System.out.println(max);
    }

印刷結果:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

5.配列内の指定された要素を検索します(順次検索) 

   public static int findNum(int[] array,int key){
        for (int i = 0; i <array.length ; i++) {
            if(array[i] == key){
                return i;
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] array = {2,4,5,6,11,7,8,9};
        System.out.println(findNum(array, 7));

    }

印刷結果:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

6.配列内の指定された要素を検索します(二分探索) 

 

二分查找的必要条件是必须有序的数列
    public static int binarySearch(int[] array,int key){
        int left = 0;
        int right = array.length-1;
        while(left <= right){
            int mid = (left+right)/2;
            if(array[mid] > key){
                right = mid - 1;
            }else if(array[mid] < key){
                left = left + 1;
            }else{
                return mid;
            }

        }
        return -1;
    }

    public static void main(String[] args) {
        int[] array = {12,14,15,16,18,23};
        System.out.println(binarySearch(array, 15));
    }

印刷結果:

透かし、type_d3F5LXplbmhlaQ、shadow_50、text_Q1NETiBAS-WqvuKAjQ ==、size_20、color_FFFFFF、t_70、g_se、x_16

 要約:

この記事では、配列とは何か、配列を作成する方法、配列を出力する方法、および配列の簡単な使用法を簡単に紹介します。簡単な例を通して、配列についての理解を深めてください。以上が本日の内容です。ご不明な点がございましたら、いつでも非公開でメッセージをお送りいただけます。記事の問題点は積極的に修正いたします。また、皆様のご希望の知識をより早く習得していただきたいと思いますので、一緒に頑張りましょう!

あなたと一緒です。_

10a5ec8cb52948ffb13fdd41c39d0066.gif

 

 

おすすめ

転載: blog.csdn.net/m0_64397675/article/details/123271586