流程控制,方法,数组

流程控制

顺序结构

package com.chen.struct;
​
public class ShunXuDemo {
    public static void main(String[] args) {
        System.out.println("hello1");
        System.out.println("hello2");
        System.out.println("hello3");
        System.out.println("hello4");
        System.out.println("hello5");
    }
}

选择结构

一、while语句    
package com.chen.struct;
​
public class WhileDemo01 {
    public static void main(String[] args) {
​
        //输出1~100
​
        int i = 0;
​
        while (i<100){
            i++;
            System.out.println(i);
        }
    }
}
​
package com.chen.struct;
​
public class WhileDemo02 {
    public static void main(String[] args) {
        //死循环
        while (true){
            //等待客户端连接
            //定时检查
            //......
        }
    }
}
​
package com.chen.struct;
​
public class WhileDemo03 {
    public static void main(String[] args) {
        //计算1+2+3+...+100=?
        //数学家高斯的故事
​
        //数字
        int i = 0;
        //和
        int sum = 0;
​
        while (i<=100){
            sum = sum + i;
            i++;
        }
        System.out.println(sum);
    }
}
​
​
二、do...while...语句
package com.chen.struct;
​
public class DoWhileDemo01 {
    public static void main(String[] args) {
        //计算1+2+3+...+100=?
        int i = 0;
        int sum = 0;
​
        do {
            sum = sum + i;
            i++;
        }while (i <= 100);
        System.out.println(sum);
    }
}
​
package com.chen.struct;
​
public class DoWhileDemo02 {
    public static void main(String[] args) {
​
        int a = 0;
        //while先判断后执行
        while (a < 0){
            System.out.println(a);
            a++;
        }
        System.out.println("========================");
        //do...while先执行后判断,并且保证循环体会被至少执行一次
        do {
            System.out.println(a);
            a++;
        }while (a<0);
    }
}
​
​
三、switch语句
package com.chen.struct;
​
public class SwitchDemo01{
    public static void main(String[] args) {
        //case穿透
        //switch:匹配一个具体的值
        char grade = 'C';
​
        switch (grade){
            case 'A':
                System.out.println("优秀");
                break; //可选
            case 'B':
                System.out.println("良好");
                break; //可选
            case 'C':
                System.out.println("及格");
                //break; //可选
            case 'D':
                System.out.println("再接再厉");
                //break; //可选
            case 'E':
                System.out.println("挂科");
                //break; //可选
            default:
                System.out.println("未知等级");
​
        }
    }
}
​
package com.chen.struct;
​
public class SwitchDemo02 {
    public static void main(String[] args) {
        String name = "晨晨";
        //JDK7的新特性,表达式结果可以是字符串!!!
        //字符的本质还是数字
        //反编译  java---->class(字节码文件)  ---->反编译(IDEA)
​
        switch (name){
            case "晨晨":
                System.out.println("晨晨");
                break;
            case "晨曦":
                System.out.println("晨曦");
                break;
            default:
                System.out.println("干啥勒!");
        }
    }
}
​
​
四、if语句及if...else语句
package com.chen.struct;
​
import java.util.Scanner;
​
public class IfDemo01 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
​
        System.out.println("请输入内容:");
        String s = scanner.nextLine();
​
        //equals:判断字符串是否相等
        if (s.equals("Hello")){
            System.out.println(s);
        }
​
        System.out.println("End");
        scanner.close();
    }
}
​
package com.chen.struct;
​
import java.util.Scanner;
​
public class IfDemo02 {
    public static void main(String[] args) {
        //考试分数大于60分就是及格,小于60分就不及格。
​
        Scanner scanner = new Scanner(System.in);
​
        System.out.println("请输入成绩:");
        int score = scanner.nextInt();
​
        if (score>60){
            System.out.println("及格");
        }else{
            System.out.println("不及格");
        }
​
      scanner.close();
    }
}
​
package com.chen.struct;
​
import java.util.Scanner;
​
public class IfDemo03 {
    public static void main(String[] args) {
        //考试分数大于60分就是及格,小于60分就不及格。
        Scanner scanner = new Scanner(System.in);
​
        /*
        if 语句至多有一个else语句,else语句在所有的else if语句之后;
        if 语句可以有若干个else if语句,它们必须在else语句之前;
        一旦其中一个else if 语句检测为true,其他的 else if 以及 else 语句都将跳过执行。
         */
​
        System.out.println("请输入成绩:");
        int score = scanner.nextInt();
​
        if (score==100){
            System.out.println("满分,再接再厉!");
        }else if (score<100 && score>=90){
            System.out.println("A级");
        }else if (score<90 && score>=80){
            System.out.println("B级");
        }else if (score<80 && score>=70){
            System.out.println("C级");
        }else if (score<70 && score>=60){
            System.out.println("D级");
        }else if (score<60 && score>=0){
            System.out.println("不及格");
        }else{
            System.out.println("成绩不合法");
        }
​
        scanner.close();
    }
}

循环结构

一、for循环
package com.chen.struct;
​
public class ForDemo01 {
    public static void main(String[] args) {
        int a = 1; //初始化条件
​
        while (a<=100){ //条件判断
            System.out.println(a); //循环体
            a+=2; //迭代
        }
        System.out.println("while循环结束!");
​
        //初始化值 //条件判断 //迭代
        for (int i=1;i<=100;i++){
            System.out.println(i);
        }
        System.out.println("for循环结束!");
        /*
        关于for 循环的说明:
        1.最先执行初始化步骤。可以声明一种类型,但可初始化一个或多个循环控制变量,也可以是空语句。
        2.检测布尔表达式的值。如果为true,循环体被执行;为false,循环终止,开始执行循环体后面的语句。
        3.执行一次循环后,更新循环控制变量(迭代因子控制循环变量的增减)。
        4.再次检测布尔表达式。
        5.循环执行上面的全过程。
         */
       //死循环
       for (; ; ){
       }
    }
}
​
二、练习1
package com.chen.struct;
​
public class ForDemo02 {
    public static void main(String[] args) {
        //练习1:计算0~100之间的奇数和偶数的和
​
        int oddSum = 0;
        int evenSum = 0;
​
        for (int i = 0; i <= 100; i++) {
            if (i%2!=0){  //奇数
                oddSum+=i;  //oddSum = oddSum + i;
            }else{  //偶数
                evenSum+=i;
            }
        }
        System.out.println("奇数的和:"+oddSum);
        System.out.println("偶数的和:"+evenSum);
    }
}
​
三、练习2
package com.chen.struct;
​
public class ForDemo03 {
    public static void main(String[] args) {
        //练习2:用while或for循环输出1~1000之间能被5整除的数,并且每行输出3个
​
        for (int i = 0; i <= 1000; i++) {
            if (i%5==0){
                System.out.print(i+"\t");
            }
            if (i%(5*3)==0){ //
                System.out.println();
                //System.out.print("\n");
            }
        }
        //printLn  输出完会换行
        //print    输出完不会换行
    }
}
​
四、九九乘法表
package com.chen.struct;
​
/*
1*1=1
1*2=2  2*2=4
1*3=3  2*3=6   3*3=9
1*4=4  2*4=8   3*4=12  4*4=16
1*5=5  2*5=10  3*5=15  4*5=20  5*5=25
1*6=6  2*6=12  3*6=18  4*6=24  5*6=30  6*6=36
1*7=7  2*7=14  3*7=21  4*7=28  5*7=35  6*7=42  7*7=49
1*8=8  2*8=16  3*8=24  4*8=32  5*8=40  6*8=48  7*8=56  8*8=64
1*9=9  2*9=18  3*9=27  4*9=36  5*9=45  6*9=54  7*9=63  8*9=72  9*9=81
 */
​
public class ForDemo04 {
    public static void main(String[] args) {
        //打印九九乘法表
        //1.先打印第一列
        //2.再把固定的1用一个循环包起来
        //3.去掉重复项,i <= j;
        //4.调整样式(换行)
​
        for (int j = 1; j <= 9; j++) {
            for (int i = 1; i <= j; i++) {
                System.out.print(j+"*" + i +"="+(j*i) +"\t");
            }
            System.out.println();
        }
​
    }
}
​
五、for循环遍历数组元素
package com.chen.struct;
​
public class ForDemo05 {
    public static void main(String[] args) {
        int[] numbers = {10,20,30,40,50}; //定义了一个数组
​
        for (int i = 0;i<5;i++){
            System.out.println(numbers[i]);
        }
        System.out.println("=====================");
        //遍历数组的元素
        for (int x:numbers){
            System.out.println(x);
        }
    }
}

Break & Continue

一、打印三角形
package com.chen.struct;
​
public class TestDemo {
    public static void main(String[] args) {
        //打印三角形  5行
​
        for (int i = 1; i <= 5; i++) {
            for (int j = 5; j >= i; j--){
                System.out.print(" ");
            }
            for (int j = 1; j <= i; j++){
                System.out.print("*");
            }
            for (int j = 1; j < i; j++){
                System.out.print("*");
            }
            System.out.println();
        }
    }
}
​
二、break
package com.chen.struct;
​
public class BreakDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            System.out.println(i);
            if (i==30){
                break;  //break用于强行退出循环
            }
        }
​
        System.out.println("123456");
    }
}
​
三、continue
package com.chen.struct;
​
public class ContinueDemo {
    public static void main(String[] args) {
        int i = 0;
        while (i<100){
            i++;
            if (i%10==0){
                System.out.println();
                continue;
            }
            System.out.print(i);
        }
        //break在任何循环语句的主体部分,均可用break控制循环的过程
        //break用于强行退出循环,不执行循环中剩余的语句。(break语句也在switch语句中使用)
        //continue语句用在循环语句体中,用于终止某次循环过程,即跳过循环体中尚未执行的语句,接着进行下一次是否执行循环的判定
    }
}
​
四、goto关键字
package com.chen.struct;
​
public class LabelDemo {
    public static void main(String[] args) {
        //打印101~150之间所有的质数
        //质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数
​
        int count = 0;
​
        //不建议使用goto保留字
        outer:for (int i = 101; i < 150; i++){
            for (int j = 2; j < i/2; j++){
                if (i % j == 0){
                    continue outer;
                }
            }
            System.out.print(i+" ");
        }
    }
}

Method

一、方法定义
package com.chen.method;
​
public class Demo01 {
    //main方法
    public static void main(String[] args) {
​
        //实际参数:实际调用传递给它的参数
        int sum = add(1,2);
        System.out.println(sum);
        //test();  //test()方法调用
    }
​
    //加法
    //形式参数,用来定义作用的
    public static int add(int a, int b){
        return a+b;
    }
​
    public static void test(){
        for (int i = 0; i <= 1000; i++) {
            if (i%5==0){
                System.out.print(i+"\t");
            }
            if (i%(5*3)==0){ //
                System.out.println();
                //System.out.print("\n");
            }
        }
    }
}
​
二、java都是值传递
package com.chen.method;
​
//java 都是值传递
public class Demo02 {
    public static void main(String[] args) {
​
        int max = max(10, 20);
        System.out.println(max);
    }
    //比大小
    public static int max(int num1,int num2){
        int result = 0;
​
        if (num1==num2){
            System.out.println("num1==num2");
            return 0;  //终止方法
        }
        if (num1>num2){
            result = num1;
        }else{
            result = num2;
        }
        return result;
    }
}
​
三、方法的重载
package com.chen.method;
​
//方法的重载
public class Demo03 {
    public static void main(String[] args) {
​
        int max = max(10,20,30);
        System.out.println(max);
​
    }
​
    //比大小
    public static double max(double num1,double num2,double num3){
        double result = 0;
​
        if (num1==num2){
            System.out.println("num1==num2");
            return 0;  //终止方法
        }
        if (num1>num2 && num1>num3){
            result = num1;
        }else if(num1<num2 && num3<num2){
            result = num2;
        }else{
            result = num3;
        }
        return result;
    }
​
    //比大小
    public static int max(int num1,int num2){
        int result = 0;
​
        if (num1==num2){
            System.out.println("num1==num2");
            return 0;  //终止方法
        }
        if (num1>num2){
            result = num1;
        }else{
            result = num2;
        }
        return result;
    }
    //比大小
    public static int max(int num1,int num2,int num3){
        int result = 0;
​
        if (num1==num2){
            System.out.println("num1==num2");
            return 0;  //终止方法
        }
        if (num1>num2 && num1>num3){
            result = num1;
        }else if (num2>num1 && num2>num3){
            result = num2;
        }else{
            result = num3;
        }
        return result;
    }
}
​
四、数组长度
package com.chen.method;
​
public class Demo04 {
    public static void main(String[] args) {
        //args.length  数组长度
        for (int i = 0; i < args.length; i++) {
            System.out.println("args[" + i + "]:" + args[i]);
        }
    }
}
​
五、调用可变参数的方法
package com.chen.method;
​
public class Demo05 {
    public static void main(String[] args) {
        //调用可变参数的方法
        printMax(34,3,3,2,56.5);
        printMax(new double[]{1,2,3});
    }
​
    public static void printMax(double... numbers){
        if (numbers.length == 0){
            System.out.println("No argument passed");
            return;
        }
        double result = numbers[0];
​
        //排序
        for (int i = 1; i < numbers.length; i++) {
            if (numbers[i] > result){
                result = numbers[i];
            }
        }
        System.out.println("The max value is " + result);
    }
​
}
​
六、递归
package com.chen.method;
​
public class Demo06 {
    //学习递归思想
    public static void main(String[] args) {
        System.out.println(f(5));
    }
​
    public static int f(int n){
        if (n==1){
            return 1;
        }else{
            return n*f(n-1);
        }
    }
}    

数组

package com.chen.array;
​
public class ArrayDemo01 {
    //变量的类型  变量的名字  =  变量的值
    //数组类型
​
    public static void main(String[] args) {
        int[] nums;  //1.声明一个数组
​
        nums = new int[10];  //2.创建一个数组
        //int[] nums = new int[10];
​
        //3.给数组中的元素赋值
        nums[0] = 1;
        nums[1] = 2;
        nums[2] = 3;
        nums[3] = 4;
        nums[4] = 5;
        nums[5] = 6;
        nums[6] = 7;
        nums[7] = 8;
        nums[8] = 9;
        nums[9] = 10;
​
        System.out.println(nums[0]);
        //计算所有元素的和
        int sum = 0;
​
        //获取数组的长度:arrays.length
        for (int i = 0; i < nums.length; i++) {
            sum = sum + nums[i];
        }
        System.out.println("总和为:" + sum);
    }
}
​
二、静态初始化
package com.chen.array;
​
public class ArrayDemo02 {
    public static void main(String[] args) {
        //静态初始化: 创建 + 赋值 一起做了
        int[] a = {1,2,3,4,5,6,7,8};
        System.out.println(a[0]);
​
        //动态初始化:包含默认初始化
        int[] b = new int[10];
        b[0] = 10;
        b[1] = 10;
​
        
​
        System.out.println(b[0]);
        System.out.println(b[1]);
        System.out.println(b[2]);
​
    }
}
​
三、数组的运用
package com.chen.array;
​
public class ArrayDemo03 {
    public static void main(String[] args) {
        int[] arrays = {1,2,3,4,5};
​
        //打印全部的数组元素
        for (int i = 0; i < arrays.length; i++) {
            System.out.println(arrays[i]);
        }
        System.out.println("================");
        //计算所有元素的和
        int sum = 0;
        for (int i = 0; i < arrays.length; i++) {
            sum = sum + arrays[i];
        }
        System.out.println("sum="+sum);
        System.out.println("=================");
        //查找最大元素
        int max = arrays[0];
​
        for (int i = 0; i < arrays.length; i++) {
            if (arrays[i]>max){
                max = arrays[i];
            }
        }
        System.out.println("max="+max);
    }
}
​
四、反转数组
package com.chen.array;
​
public class ArrayDemo04 {
    public static void main(String[] args) {
        int[] arrays = {1, 2, 3, 4, 5};
​
        //JDK1.5,没有下标
        //for (int array : arrays) {
        //    System.out.println(array);
        //}
        printArray(arrays);
        System.out.print("=====================");
        int[] reverse = reverse(arrays);
        printArray(reverse);
    }
        //打印数组元素
        public static void printArray(int[] arrays){
            for (int i = 0; i < arrays.length; i++) {
                System.out.print(arrays[i]+" ");
            }
        }
​
        //反转数组
    public static int[] reverse(int[] arrays) {
        int[] result = new int[arrays.length];   //length为4时,result的值为5,因此下面j的长度需要减1
​
        //反转操作
        for (int i = 0, j=result.length-1; i < arrays.length; i++,j--) {
            result[j] = arrays[i];
        }
        return result;
    }
    }
​
五、二维数组
package com.chen.array;
​
public class ArrayDemo05 {
    public static void main(String[] args) {
​
        //二维数组[4][2]
        /*
          1,2   array[0]
          2,3   array[1]
          3,4   array[2]
          4,5   array[3]
         */
        int [][] array = {{1,2},{2,3},{3,4},{4,5}};
​
        /*System.out.println(array[0]);
        printArray(array[0]);
        System.out.println(array[0][0]);
        System.out.println(array[0][1]);
        System.out.println(array.length);
        System.out.println(array[0].length);
        */
​
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.println(array[i][j]);
            }
        }
    }
​
    //打印数组元素
    public static void printArray(int[] arrays){
        for (int i = 0; i < arrays.length; i++) {
            System.out.print(arrays[i]+" ");
        }
    }
}
​
六、数组填充
package com.chen.array;
​
import java.util.Arrays;
​
public class ArrayDemo06 {
    public static void main(String[] args) {
​
        int[] a = {1,2,3,4,9090,31231,543,21,3,23};
        System.out.println(a);  //结果[I@1b6d3586是一个哈希code的对象。
        //打印数组元素  Arrays.toString
        //System.out.println(Arrays.toString(a));
        //printArray(a);
​
        Arrays.sort(a);  //数组进行排序:默认升序排序
        System.out.println(Arrays.toString(a));
        //数组填充
        Arrays.fill(a,2,4,0);  //下标2到4之间的数组元素填充0的值
        System.out.println(Arrays.toString(a));
​
    }
    public static void printArray(int[] a){
        for (int i = 0; i < a.length; i++) {
            if (i==0){
                System.out.print("[");
            }
            if (i==a.length-1){
                System.out.print(a[i]+"]");
            }else{
                System.out.print(a[i]+", ");
            }
​
        }
    }
​
}
​
七、冒泡排序
package com.chen.array;
​
//冒泡排序: 该事件算法的时间复杂度为 O(n^2)
//1.比较数组中,两个相邻的元素,如果第一个数比第二个数大,我们就交换它们的位置
//2.每比较一次,都会产生出一个最大或者最小的数字
//3.下一轮则可以少一次排序
//4.依次循环,直到结束!!!    ----->3个杯子,借助第三个容器暂存中转的思想
​
import java.util.Arrays;
​
public class ArrayDemo07 {
    public static void main(String[] args) {
        int[] a = {1,3,5,7,2,21,3,11,9};
​
        int[] sort = sort(a);  //调用完自己写的排序方法后,返回一个排序后的数组
        System.out.println(Arrays.toString(a));
    }
​
    /*  线程池
    public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler)
                              */
​
​
    public static int[] sort(int[] array){
        //临时变量
        int temp = 0;
​
        //外层循环,判断我们这个要走多少次
        for (int i = 0; i < array.length-1; i++) {
            boolean flag = false;  //通过flag标识位减少没有意义的比较
            //内层循环,比较两个数,如果第一个数比第二个数大,则交换位置
            for (int j = 0; j < array.length-1-i; j++) {
               if (array[j+1]<array[j]){
                   temp = array[j];
                   array[j] = array[j+1];
                   array[j+1] = temp;
               }
            }
            if (flag==false){
                break;
            }
        }
        return array;
    }
​
}
​
八、稀疏数组
package com.chen.array;
​
public class ArrayDemo08 {
    public static void main(String[] args) {
        //!!!思想: 二维横、纵坐标,以及值的个数
        //1.创建一个二维数组  11行 * 11列  0:没有棋子,1:黑棋,2:白棋
        int[][] array1 = new int[11][11];
        array1[1][2] = 1;
        array1[2][3] = 2;
        //输出原始的数组
        System.out.println("输出原始的数组");
​
        /*new Thread(() -> {
            System.out.println();
        }).start();
​
         */
​
​
        for (int[] ints : array1) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
        //转换为稀疏数组保存
        //获取有效值的个数
        int sum = 0;
        for (int i = 0; i < 11; i++) {
            for (int j = 0; j < 11; j++) {
                if (array1[i][j]!=0){
                    sum++;
                }
            }
        }
        System.out.println("有效值的个数:"+sum);
​
        //2.创建一个稀疏数组的数组
        int[][] array2 = new int[sum+1][3];
        array2[0][0] = 11;
        array2[0][1] = 11;
        array2[0][2] = sum;
        //遍历二维数组,将非零的值,存放到稀疏数组中
        int count = 0;
        for (int i = 0; i < array1.length; i++) {
            for (int j = 0; j < array1[i].length; j++) {
                if (array1[i][j]!=0){
                    count++;
                    array2[count][0] = i;
                    array2[count][1] = j;
                    array2[count][2] = array1[i][j];
                }
            }
        }
        //输出稀疏数组
        System.out.println("稀疏数组:");
​
        for (int i = 0; i < array2.length; i++) {
            System.out.println(array2[i][0]+"\t"
                    +array2[i][1]+"\t"
                    +array2[i][2]+"\t");
        }
        System.out.println("====================");
        System.out.println("还原稀疏数组:");
        //1.读取稀疏数组
        int[][] array3 = new int[array2[0][0]][array2[0][1]];
        //2.给其中的元素还原它的值
        for (int i = 1; i < array2.length; i++) {
            array3[array2[i][0]][array2[i][1]] = array2[i][2];
        }
        //3.打印
        System.out.println("输出还原的数组:");
        for (int[] ints : array3) {
            for (int anInt : ints) {
                System.out.print(anInt+"\t");
            }
            System.out.println();
        }
    }
}    
 

 

posted @ 2022-10-18 16:48  Chenshishu  阅读(15)  评论(0编辑  收藏  举报