Javaベースのプロセス制御

9530 ワード

このノートは具体的に速学堂の学习のウェブサイトを参考にすることができます

3プロセス制御

  • 「シーケンス構造」:aを先に実行し、bを実行することを表す論理
  • 「選択構造」:「…の場合」を表す論理
  • 「循環構造」:代表「もし......なら、また......」の論理語録:上記の3つのフロー制御文はすべてのことを表すことができます!
  • 構造の選択

  • if単一選択構造
  • 例:
  • import java.util.Scanner;
    public class Test1{
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            System.out.println(" 5 :")
            int num = scanner.nextInt();
            if(num%5!=0){// if {}, ; {}, 
                System.out.println(" !");
            }
        }
    }
    
  • if-else二重選択構造
  • import java.util.Scanner;
    public class Test2{
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            System.out.println(" :")
            int num = scanner.nextInt();
            if(num%2!=0){
                System.out.println(" ");
            }else{
                System.out.println(" ");
            }
        }
    }
    
    補足:if-elseで条件演算子を置き換えることができます
  • import java.util.Scanner;
    public class Test3{
        public static void main(String[] args){
            Scanner scanner = new Scanner(System.in);
            System.out.println(" :")
            int num = scanner.nextInt();
            System.out.println(num%2!=0?" ":" ");
        }
    }
    
  • if-else if-else多選択構造
  • public class Test4{
        public static void main(String[] args){
            int i = (int)(100*Math.random())+1;// 
            System.out.print(" "+i);
            if(i>=85){System.out.print("  A");}
            else if(i>=70){System.out.print("  B");}
            else if(i>=60){System.out.print("  C");}
            else{System.out.print("  D");}
        }
    }
    
  • switch構造
  • public class Test5{
        public static void main(String[] args){
            int i = (int)(100*Math.random())+1;// 
            System.out.print(" "+i);
            i = i/10;
            switch(i){
                case 9:
                case 8:
                	System.out.println("  A");break;
                	// 80 A
                case 7:
                	System.out.println("  B");break;
                case 6:
                	System.out.println("  C");break;
                default:
                	System.out.println("  D");
            }
        }
    }
    

    じゅんかんこうぞう

  • whileサイクル
  • public class Test6{
        public static void main(String[] args){
            int i = 0;
            int sum = 0;
            //1+2+3+...+100=?
            while(i<=100){
                sum += i;// sum=sum+i
                i++;
            }
            System.out.println("Sum="+sum);
        }
    }
    
  • do-whileサイクル
  • public class Test7{
        public static void main(String[] args){
            int i = 0;
            int sum = 0;
            //1+2+3+...+100=?
            do{
                sum += i;// sum=sum+i
                i++;
            }while(i<=100);// ; 
            System.out.println("Sum="+sum);
        }
    }
    
    補:while文とdo-while文の違いは、do-while文は常に循環体が少なくとも1回実行されることを保証し、while文はを実行しない可能性があることです.
  • forサイクル
  • public class Test8{
        public static void main(String[] args){
            int sum = 0;
            //1+2+3+...+100=?
            for(int i = 0;i<=100;i++){
                sum += i;
            }
            System.out.println("Sum="+sum);
        }
    }
    
    補足:forループにカンマ演算子を埋め込むことができます
  • public class Test9{
        public static void main(String[] args){
            for(int i = 1, j = i + 10;i < 5;i++, j = i *2){
                System.out.println("i="+i+" j="+j);
            }
        }
    }
    
    ヒント:コンパイラはwhile(true)とfor(;)を同じこととして、for(int i=0;...)のように無限ループがfor文の初期化部分で宣言する変数を指します.その役割ドメインはforループ全体であり、ループの外部でこの変数を使用することはできません.

    ネストされたループ


    1つのループ文の内部に1つ以上のループをネストし、ネストループと呼ばれます.while、do-whileとforループは任意に多層をネストすることができる
    例:
    public class Test10{
        public static void main(String[] args){
            for(int i=1;i<=9;i++){
                for(int j=1;j<=i;j++){
                    System.out.print(j+"*"+i+"="+(i*j<0?(" "+i*j):i*j)+" ");
                }
                System.out.println();
            }
        }
    }
    

    break文


    任意のループ文のマスターセクションでは、breakを使用してループの流れを制御できます.breakは、ループ内の残りの文を実行せずにループを強制的に終了するために使用されます.
    例:
    public class Test11{
        public static void main(String[] args){
            int total = 0;// 
            System.out.println("Begin");
            while(true){
                total++;
                int i = (int)Math.round(100*Math.random());
                if(i==88){
                    break;
                }
            }
            System.out.println("Game over, used "+total+"times.");
        }
    }
    

    continue文


    continue文は、ループ中に使用され、ループ中にまだ実行されていない文をスキップし、次にループを実行するか否かの判定を行うループプロセスを終了するために使用されます.
    注意continueはwhile,do-whileで使用され、continue文はすぐにループの最初の部分にジャンプし、現在のループの残りの部分を越えた.continue forサイクルで使用し、forサイクルの反復因子部分にジャンプ
    例:
    public class Test12{
        public static void main(String[] args){
            int count = 0;// 
            for(int i = 100;i<150;i++){
                // 3 , , 
                if(i%3==0){
                    continue;
                }
                // ( 3 ), 
                System.out.print(i+"、");
                count++;
                // 5 
                if(count%5==0){
                    System.out.println();
                }
            }
        }
    }
    

    補足:ラベル付きbreakとcontinueは、Javaではループ文の前にのみ使用され、breakキーとcontinueキーは通常現在のループのみを中断しますが、ラベルとともに使用するとラベルが存在する場所に中断されます.
    例:
    // 101-150 
    public class Test13{
        public static void main(String[] args){
            outer:for(int i=101;i<150;i++){
                for(int j=2;j

    ステートメントブロック


    文ブロックは、ローカル変数の役割ドメインを決定し、その中のプログラムコードは、全体として、一緒に実行されます.ブロックは別のブロックにネストできますが、2つのネストされたブロック内で同じ名前の変数を宣言することはできません.文ブロックでは外部変数を使用できますが、外部では文で定義された変数を使用できません.文ブロックで定義された変数の役割ドメインは文ブロックに限られているためです.
    例:
    public class Test14{
        public static void main(String[] args){
            int n;
            int a;
            {
                int k;
                int n;// , n
            }// k 
        }
    }
    

    方法


    方法は、特定の機能を完了するためのコードクリップであり、他の言語の関数に似ています.
    例:
    public class Test15{
        //main : 
        public static void main(String[] args){
            int num1 = 10;
            int num2 = 20;
            // , num1 num2 add n1 n2, , sum 
            int sum = add(num1,num2);
            System.out.println("sum="+sum);// sum=30
            // , 
            print();
        }
        // 
        public static int add(int n1,int n2){
            int sum = n1 + n2;
            return sum;// return 
        }
        // , , void 
        public static void print(){
            System.out.println(" print()");
        }
    }
    

    注意:1.実パラメータの数、データ型、および順序は、呼び出されたメソッド宣言形式パラメータのリストと一致する必要があります.return文はメソッドの実行を終了し、返すデータ3を指定する.Javaでメソッド呼び出しでパラメータを渡す場合、値伝達の原則(データのコピーが伝達される)4に従う.基本タイプは、このデータ値のcopy値5を伝達する.リファレンスタイプは、オブジェクトが参照するcopy値を渡しますが、同じオブジェクトを指します.

    メソッドの再ロード

  • メソッドのリロードとは、複数のメソッド名が同じであるが、パラメータが異なるメソッドを定義することである.呼び出すと、異なるパラメータに基づいて対応するメソッドが自動的に一致します.リロード方法は実際には全く異なる方法であり、名前が同じだけで
  • 構成方法のリロードの条件:1.異なる意味:パラメータタイプ、パラメータ個数、パラメータ順序が異なる2.戻り値のみが異なるメソッドのリロードを構成しない.パラメータ名のみが異なり、メソッド再ロード
  • を構成しません.
  • public class Test16{
        public static void main(String[] args){
            System.out.println(add(3,5));//8
            System.out.println(add(3,4,10));//18
            System.out.println(add(3.0,5));//8.0
            System.out.println(add(3,5.0));//8.0
        }
        // 
        public static int add(int n1,int n2){
            return n1+n2;
        }
        // , , 
        public static int add(int n1,int n2,int n3){
            return n1+n2+n3;
        }
        // , , 
        public static double add(double n1,double n2){
            return n1+n2;
        }
        // , , 
        public static double add(int n1,double n2){
            return n1+n2;
        }
        // : , 
        public static double add(int n1,int n2){
            return n1+n2;// double 
        }
        // : , 
        public static int add(int n2,int n1){
            return n1+n2;
        }
    }
    

    さいきこうぞう

  • 再帰は一般的な問題解決方法であり、その基本思想は「自分で自分を呼び出す」ことであり、再帰構造を使用する方法は直接または間接的に自分を呼び出す
  • である.
  • 例:再帰を使用してnを求める!
  • public class Test17{
        public static void main(String[] args){
            long d1 = System.currentTimeMillis();// 
            System.out.printf("%d :%n",10,factorial(10));
            long d2 = System.currentTimeMillis();// 
            System.out.printf(" :%s%n",d2-d1);
        }
        // 
        static long factorial(int n){
            if(n==1){// 
                return 1
            }else{// 
                return n*factorial(n-1);//n!=n*(n-1)
            }
        }
    }
    
  • 再帰欠陥の簡単なプログラムは再帰の利点であるが、再帰呼び出しは大量のシステムスタックを占有し、メモリ消費が多く、再帰呼び出し階層が多い場合はサイクルよりも速度が遅いため、再帰を使用する場合は
  • に慎重である.
  • 例:ループを使用してnを求める!
  • public class Test18{
        public static void main(String[] args){
            long d3 = System.currentTimeMillis();
            int a = 10;
            int result = 1;
            while(a>1){
                result *= a*(a-1);
                a -= 2;
            }
            long d4 = System.currentTimeMillis();
            System.out.println(result);
            System.out.println(" :%s%n",d4-d3);
        }
    }
    

    未完、続きます~