Java基礎二

20005 ワード

前言
Java文法基礎の第二部分は、プログラムフロー制御、関数、配列を含む。
ここに一部の転載があります。権利侵害があれば、教えてください。
プログラムフロー制御
1.判断構造
if文:
    //   :
    if (       ) {
              ;
    }

    //   :
    if (       ) {
             ;
    } else {
             ;
    }

    //   :
    if(     ) {
             ;
    } else if (     ) {
             ;
    }
    ……
    else {
            ;
    }
2.構造を選択する
switch文:
    switch(   )
    {
          case   1:
                   ;
               breakcase   2:
                   ;
               break;
          …...
          default:
                   ;
               break;
    }
switch文の特徴:
  • switch文の選択タイプは4種類しかありません。byte、shot、int、char、JDK 1.7の後にSteringタイプを追加しました。全部で5種類です。
  • caseとdefaultは順番がありません。最初のcaseを実行します。マッチしていないcaseはdefaultを実行します。
  • switch文の2つを終了する場合:①breakに会った、②switch文の最後まで実行します。
  • マッチしたcaseまたはdefaultが対応していないbreakであれば、プログラムは下に向かって実行され、breakまたはswitchが終わるまで実行可能なステートメントを実行します。
  • がswitch文に入ったら、まずcaseを実行してから上から下にかけてdefaultを実行します。defaultをcaseの上に置いても、実行順序は変わりません。
  • 3.循環構造
    for循環文:
    /*  for(      ;     ;         ) {
            ;   
        }
    */  
                //for   
               for(int x = 0; x < 3; x++){
                     for(int y = 0; y < 4; y++){
                           System.out.println("ok" );
                     }
               }
    while循環文:
    /*      while(      ) {
                ;
                 ;
          }
    */
            //while   
            int sum = 0;                    //      0
            int i = 1;                        //           
            while (i <= 100) {                //      
                sum += i;                    //sum = sum + i;
                i++;                        //   i  
            }
    ド….while循環文:
    /*    do {
               ;
                ;
        }while(      );
    */
            //do ... while     
           int sum = 0;                                //    sum,        
           int i = 1;                                    //    i
           do {                                         // do      
               //System.out.println("i = " + i);             //     
               sum +=i;
               i++;
           }
           while (i <= 100); 
    その他フロー制御
    break文
    break文の応用範囲:構造と循環構造を選択します。
    break文の役割:今回の流れから飛び出す。
    class BreakDemo {
           public static void main(String[] args){
             for(int x = 0; x < 3; x++){
                for(int y = 0; y < 4; y++){
                      System.out.println("x = " + x);
                      break;
                }     
             }
          }
    }
    contine文
    continue文の応用範囲:循環構造。
    continue文の役割:今回のサイクルを終えて、次のサイクルを続けます。
    class ContinueDemo {
           public static void main(String[] args){
             for(int x = 0; x < 11; x++){
                       if(x % 2 == 0)
                             continue;
                      System.out.println("x = " + x);
             }
          }
    }
    関数
    関数の定義
    関数とは、クラスの中で特定の機能を持つ独立した小プログラムを定義し、関数を方法とも呼ぶ。
    関数の書式:
    /*               (         1,         2,...) {
                  ;
              return    ;
        }
    
             :             。
            :          。
            :     ,                   。
            :            。
        return:      。
           :         ,          。
    */    
    
    class FunctionDemo{
           public static void main(String[] args){
                int c = add(3,4);
                System.out.println("c = " + c);
          }
            //    ,        ,  main       
          public static int add(int a, int b){
                 return a + b;
          }
    }
    
    関数の特徴
  • 定義関数は、機能コードをカプセル化することができる。
  • は、この機能を多重化するのに便利である。
  • 関数は呼び出しがあってこそ実行される。
  • 関数の出現は、コードの多重化を改善する。
  • は、関数に対して具体的な戻り値がない場合、戻り値タイプをキーワードvoidで表しています。この関数のreturn文は、最後の行で省略したり、書き込みしたりできます。
  • 関数では関数のみが呼び出されます。関数の内部定義はできません。コンパイルの時期が間違っています。
  • で関数を定義すると、関数の結果は使用者に戻され、使用者によって処理されます。
  • 関数を書く時は二つの明確さが必要です。
  • 定義する機能の最後の結果は何ですか?
  • は、この機能を定義する過程で未知のコンテンツが演算に参加する必要があるかどうかを明確にしている。
  • 関数の再ロード
    リロードの定義:同じクラスで、同じ名前の関数が複数存在することができます。パラメータの数やパラメータの種類が違っていれば大丈夫です。
    重荷重の役割:読みやすく、プログラム設計を最適化しました。
    class FunctionDemo{
           public static void main(String[] args){
                 System.out.println(add(3,4));
                 System.out.println(add(3.0,4.0));
                 System.out.println(add(3,4,5));
          }
    
           //    ,      
           public static int add(int a, int b){
                 return a + b;
          }
    
           //    ,      
           public static double add(double a, double b){
                 return a + b;
          }
    
           //    ,      
           public static int add(int a, int b,int c){
                 return add(a,b) + c;
          }
    }
    関数の機能は同じです。演算に参加する未知の内容が異なるだけで、多関数を定義することができますが、統一関数の名前を使うと読みやすいです。呼び出し時に、仮想マシンはパラメータリストによって同名関数を区別します。
  • リロードは、リターン値タイプに関係なく、パラメータリストのみを見ます。
  • javaは厳密な言語であり、もし関数呼び出しに不確実性が現れたら、コンパイルに失敗します。
  • 行列
    定義
    配列は同じタイプのデータのセットです。配列は一つの容器です。
    配列の役割:配列中の要素に自動的に0から番号を付けることができます。これらの要素を操作しやすいです。
    //   
        []     = new     [         ];
    
    int[] arr = new int[5];
    
    //   
        []     = new     []{  ,  ,……};
    
    int[] arr = new int[]{3,5,1,7};
    int[] arr = {3,5,1,7}; //    
    メモリ割り当て
    Javaプログラムは実行時にメモリに空間を割り当てる必要があります。演算効率を向上させるために、空間を異なる領域に分割しました。各エリアには特定の処理データ方式とメモリ管理方式があります。
    メモリの区分:
  • レジスタJVM内部の仮想レジスタは、アクセス速度が非常に速く、プログラムが制御できません。
  • ローカル方法エリア
  • メソッドエリアは、仮想マシンによってロードされたクラス情報、定数、静的変数、およびリアルタイムコンパイラ(JIT)によってコンパイルされたコードなどのデータを格納するために使用されます。
  • スタックメモリは、変数が属する作用領域が終了すると、占有空間が自動的に解放されます。
  • ヒープメモリ(定数プールを含む)の配列とオブジェクトは、newによって構築された例がヒープメモリに格納されている。各例にはメモリアドレス値があります。インスタンス中の変数にはデフォルトの初期化値があり、タイプによって異なります。整数のタイプは0で、小数のタイプは0.0または0.0fで、bollanタイプはfalseで、charタイプは'\u 0000'です。配列の参照例をnullに設定すると、インスタンスはもう使用されなくなり、不確定な時間内にごみ箱に回収される。
  • 例:int[] arr = new int[4];メモリ割り当て図:
    配列操作によくあります。
    配列操作の最も基本的な動作は、保存と取りです。核心思想:角標に対する操作です。
    1.最大値(最小値)を取得する
    class ArrayDemo{
           public static void main(String[] args) {
                 int[] arr= {89,34,-270,17,3,100};
                 int max = getMax(arr);
                 System.out.println("max = " + max);
           }
    
           public static int getMax(int[] arr){
                 int maxElement = arr[0];//                。
                 //             ,             。
                 for(int x = 1; x < arr.length; x++){   
                       if(arr[x] > maxElement)
                            maxElement = arr[x];//    ,          
                }
                return maxElement;
          }
    }
    2.並べ替え(選択、泡立て順序)
    class ArrayDemo{
           public static void main(String[] args) {
                 int[] arr= {89,34,-270,17,3,100};
                 System.out.print("     :" );
                 printArray(arr);
                 selectSort(arr); //    
                 //bubbleSort(arr); //    
                 System.out.print("     :" );
                 printArray(arr);
          }
    
            //    
           public static void selectSort(int[] arr){
                 for(int x = 0; x < arr.length - 1; x++){
                       int num = arr[x];
                       int index = x;
                       for(int y = x + 1; y < arr.length; y++){
                             if(num > arr[y]){
                                  num = arr[y];
                                  index = y;
                            }
                      }
                      //         ,       swap  
                      if(index != x)
                            swap(arr,x,index);
                }
          }
    
          public static void swap(int[] arr, int a,int b){
                int temp = arr[a];
                arr[a] = arr[b];
                arr[b] = temp;
          }
    
            //    
            public static void bubbleSort(int[] arr){
                 for(int x = 0; x < arr.length - 1; x++){
                       for(int y = 0; y < arr.length - 1 -x; y++){
                             if(arr[y] > arr[y+1]){
                                  int temp = arr[y];
                                  arr[y] = arr[y+1];
                                  arr[y+1] = temp;
                            }
                      }
                }
          }
    
           public static void printArray(int[] arr){
                System.out.print("[" );
                for(int x = 0; x < arr.length; x++){
                       if(x != arr.length - 1)
                            System.out.print(arr[x] + "," );
                       else
                            System.out.println(arr[x] + "]" );
                }
          }
    }  
    3.半角検索(二分検索)
    配列が無秩序である場合、単純な巡回検索によって、ある要素のある角標を検索することができます。しかし、配列が整然としていれば、より効率的な方法で同じ目的、つまり二分検索を達成することができます。
    class ArrayDemo{
           public static void main(String[] args) {
             int[] arr= {13,15,19,28,33,45,78,106};
             int index = binarySearch(arr,78);
             System.out.println("index = " + index);
          }
    
          public static int binarySearch(int[] arr, int key){
                int max,min,mid;
                min = 0;
                max =arr. length - 1;
                mid = (max + min)/2;
    
                 while(arr[mid] !=key){
                       if(key > arr[mid])
                            min = mid + 1;
                       else if (key < arr[mid])
                            max = mid - 1;
                       if(max < min)
                             return -1;
                      mid = (max + min)/2;
                }
                return mid;
         }
    }
    配列操作によくある問題
  • 配列フットタグ越界異常(ArayIndexOutOfBounds Exception):配列中に存在しないフットタグにアクセスした場合
  • が発生します。
                int[] arr = new int[3];
                System. out.println(arr[3]);//   ,            
  • 空ポインタ異常(Null PointerException):参照型変数がエンティティを指していない場合、エンティティを操作すると、この異常が発生します。
                int[] arr = null;
                System. out.println(arr[0]);//   ,