文章目录
简介
- 本文是2021/03/22深夜和2021/03/23凌晨整理的笔记
- 本文中的选择排序 冒泡排序 插入排序都是通过从小到大排序进行说明的
- 赘述可能有点多,还请各位朋友耐心阅读
- 本人的内容和答案不一定是最好最正确的,欢迎各位朋友评论区指正改进。
while和do-while的区别
- while语法:while(条件判断){循环体}
- do-while语法:do{循环体}while(条件判断);
- 二者的区别:while先进行条件判断,如果条件不满足,循环体一次也不执行;do-while先执行循环体,然后进行条件判断,如果条件不满足,只执行这一次。
switch-case能使用的数据类型
- JDK1.5前,可以使用基本数据类型byte short int 
 不能使用char float double long booean
- JDK5以后,新增枚举(enum)
- JDK7以后,新增字符串String
continue关键字与标号
continue不带标号
public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                if(i==j){
                    continue;
                }
                System.out.println("i:"+i+" j:"+j);
            }
        }
    }
}
程序运行结果
i:0 j:1
i:0 j:2
i:1 j:0
i:1 j:2
i:2 j:0
i:2 j:1
continue带标号
- 说明
 continue带标号的话,会直接开始指定的某个循环的下一次循环
public class Test {
    public static void main(String[] args) {
       loop1: for (int i = 0; i < 3; i++) {
       loop2:     for (int j = 0; j < 3; j++) {
                if(i==j){
                    continue loop1;
                }
                System.out.println("i:"+i+" j:"+j);
            }
        }
    }
}
程序运行结果
i:1 j:0
i:2 j:0
i:2 j:1
break关键字与标号
break不带标号
public class Test {
    public static void main(String[] args) {
        for (int i = 0; i < 3; i++) {
        for (int j = 1; j < 3; j++) {
                if(i==j){
                    break ;
                }
                System.out.println("i:"+i+" j:"+j);
            }
        }
    }
}
程序运行结果
i:0 j:1
i:0 j:2
i:2 j:1
break带标号
- 说明:
 break带标号的话, 会直接跳出指定的某个循环
public class Test {
    public static void main(String[] args) {
        loop1:for (int i = 0; i < 3; i++) {
        loop2:for (int j = 1; j < 3; j++) {
                if(i==j){
                    break loop1;
                }
                System.out.println("i:"+i+" j:"+j);
            }
        }
    }
}
程序运行结果
i:0 j:1
i:0 j:2
普通for循环和增强for循环遍历一维数组
普通for循环
public class Test {
    public static void main(String[] args) {
      int[] array = {5,4,3,2,1};
        for (int i = 0; i < array.length; i++) {
            System.out.println(array[i]);
        }
    }
}
程序运行结果
5
4
3
2
1
增强for循环
- 说明:
 自JDK1.5以后,出现了增强for循环,专门用来遍历数组和集合。其内部原理是一个Iteration迭代器,在遍历的过程中,不能对数组和集合中的元素进行增删操作。
public class Test {
    public static void main(String[] args) {
      int[] array = {5,4,3,2,1};
         for(int x:array){
             System.out.println(x);
         }
    }
}
程序运行结果
5
4
3
2
1
普通for循环和增强for循环遍历二维数组
普通for循环
public class Test {
    public static void main(String[] args) {
      int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
        for (int i = 0; i < array.length; i++) {
            for (int j = 0; j < array[i].length; j++) {
                System.out.print(array[i][j]+" ");
            }
            System.out.println();
        }
    }
}
程序运行结果
1 2 3 
4 5 6 
7 8 9 
增强for循环
- 说明:
 自JDK1.5以后,出现了增强for循环,专门用来遍历数组和集合。其内部原理是一个Iteration迭代器,在遍历的过程中,不能对数组和集合中的元素进行增删操作。
public class Test {
    public static void main(String[] args) {
      int[][] array = {{1,2,3},{4,5,6},{7,8,9}};
      //一维数组row来接收数组array每行的所有数据
     for(int [] row:array){
         //column来接收每行中的每个数据
        for(int column:row){
            System.out.print(column+" ");
        }
         System.out.println();
     }
    }
}
程序运行结果
1 2 3 
4 5 6 
7 8 9 
选择排序
- 基本思想:
 寻找未排序中最小的元素加入到已有序列,直到未排序序列为空。
- 个人解释:最多进行数组的长度减1趟排序,每一趟排序中找到最小的值,并赋值交给最左侧,每趟排序最左侧的数会加1
import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
            int [] array = {5,7,6,3,8};
            //调用选择排序的方法
            selectSort(array);
            //调用Arrays工具类的toString方法,将数组内容以字符串形式进行输出
        System.out.println(Arrays.toString(array));
    }
    //定义选择排序,参数为int型数组,将传入的数组按从小到大排好
    public static void selectSort(int[] array){
        //初始化最小值的索引为0
        int min = 0;
        for (int i = 0; i < array.length-1; i++) {
            //每趟排序让min的索引值都等于本趟排序的i值
            min = i;
            for (int j = i+1; j < array.length; j++) {
                //如果发现了比array[min]小的值,就将这个值的索引值赋值交给min
                 if(array[min]>array[j]){
                     min = j;
                 }
            }
            //执行完一趟排序的所有比较后,判断这个最小值的索引值和i值是否相同
            //不相同则说明此min索引值的值不是最小值,因此发生交换
            if(i!=min){
            //调用交换方法
                exchange(array,i,min);
            }
        }
    }
    //定义交换方法,让数组中的两个元素的值交换
    public static  void exchange(int[]array,int a,int b){
         int temp = array[a];
         array[a] = array[b];
         array[b] = temp;
    }
}
程序运行结果
[3, 5, 6, 7, 8]
冒泡排序
- 基本思想:
- 对(待排序)的序列从前向后,依次比较相邻的值,如果发生逆序就交换,这样比较大的数就会从前向后移,就像是水泡浮上水面。
- 个人解释:最多进行数组的长度减1趟排序,每一趟排序中对相邻的两个数值进行比较,如果发现逆序情况(即左边的数大于右边的数),让这两个值发生交换,每一趟排序都会至少确定一个最大的值放在最右侧。遍 历了一遍数组后,如果没有发生交换,则说明本数组已经是排序完成的状态,则终止本次冒泡排序。
import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
            int[] array = {31,22,78,66,55};
            //调用冒泡排序方法
           bubbleSort(array);
           //调用Arrays工具类的toString方法,将数组内容以字符串形式进行输出
        System.out.println(Arrays.toString(array));
    }
    //定义冒泡排序
    public static void bubbleSort(int[]array){
        //定义标识符flag,用来判断下一趟排序用不用继续执行。
        //如果flag为false,说明本数组的内容已经是正序,不必继续
        boolean flag =  false;
        //外层循环,表示每一趟排序
        for (int i = 0; i < array.length-1; i++) {
            //内存循环,表示每一趟排序中的每一次比较
            for (int j = 0; j < array.length-i-1; j++) {
                 if(array[j]>array[j+1]){
                     //至少发生了一次交换,都会让flag的值为true
                     flag = true;
                     //调用交换方法
                     exchange(array,j,j+1);
                 }
            }
            if(flag == false){
                 break;
            }else {
                //初始化flag状态,意思就是说下一次排序还是待执行的排序,让程序继续执行
                flag = false;
            }
        }
    }
    //定义交换方法,让数组中的两个元素的值交换
    public static  void exchange(int[]array,int a,int b){
        int temp = array[a];
        array[a] = array[b];
        array[b] = temp;
    }
}
程序运行结果
[22, 31, 55, 66, 78]
插入排序
- 基本思想:
 把n个待排序的元素看成为一个有序表和一个无序表,开始时有序表只包含一个元素,无序表中包含有n-1个元素,排序过程中每次从无序表中取出第一个元素,把它的排序码依次与有序表元素的排序码进行比较。将它插入到有序表的适当位置,使之成为新的有序表。
- 个人解释:
 将一个数组划分为两个表,一个有序,一个无序。每次排序都是从无序表中拿出来一个数据,与有序表中的数据逐个比较,找到自己的位置,新的有序表就诞生了,以此类推。
import java.util.Arrays;
public class Test {
    public static void main(String[] args) {
              int [] array = {44,33,77,66};
              //调用插入排序
              insertSort(array);
              //调用Arrays工具类的toString方法,将数组内容以字符串形式进行输出
        System.out.println(Arrays.toString(array));
    }
    //定义插入排序
    public static void insertSort(int[] array){
    //外层循环,从0开始,遍历整个数组
        for (int i = 0; i < array.length; i++) {
        //内存循环,从i开始,i之前的序列为有序序列
        //j>0是因为j最小指到0
        //j从第2个元素开始在有序表中插入
        //满足array[j-1]>array[j],循环会一直进行,直到待插入数据找到自己的位置
        //j--是将待插入数据在有序表中向前逐个比较,知道找到自己的位置
            for (int j = i; j >0 ; j--) {
            if(array[j-1]>array[j]){
            //调用交换方法
                exchange(array,j,j-1);
                }
            }
        }
    }
    //定义交换方法,让数组中的两个元素的值交换
    public static  void exchange(int[]array,int a,int b){
        int temp = array[a];
        array[a] = array[b];
        array[b] = temp;
    }
}
程序运行结果
[33, 44, 66, 77]
练习
练习1
- 题目:使用switch-case实现给定一个分数,根据分数确定等级:优秀(90分及以上)良好(80分及以上)及格(60分及以上)不及格(60分以下)
import java.util.Scanner;
/*
题目:使用switch-case实现给定一个分数,
根据分数确定等级:优秀(90分及以上)良好(80分及以上)及格(60分及以上)不及格(60分以下)
 */
public class Test {
    public static void main(String[] args) {
      Scanner sc = new Scanner(System.in);
      int grade = sc.nextInt();
      switch(grade/10){
          case 10:
          case  9:
              System.out.println("优秀");break;
          case  8:
              System.out.println("良好");break;
          case  7:
          case  6:
              System.out.println("及格");break;
          default:
              System.out.println("不及格");break;
      }
    }
}
- 程序运行结果视输入的数字而定
 例如我们输入88
输入:88
良好
练习2
- 题目:分别用while和do-while实现1到100这100个数字的和
while
public class Test {
    public static void main(String[] args) {
          int i = 1;
          int sum = 0;
          while(i<=100){
              sum = sum + i;
              i++;
          }
        System.out.println(sum);
    }
}
do-while
public class Test {
    public static void main(String[] args) {
          int i = 1;
          int sum = 0;
         do{
           sum = sum + i;
           i++;
         }while(i<=100);
        System.out.println(sum);
    }
}
练习3
- 题目:使用continue关键字完成对1到5这5个数字中奇数的筛选 输出奇数
public class Test {
    public static void main(String[] args) {
        for (int i = 1; i <= 5; i++) {
            if(i%2==0){
                continue;
            }
            System.out.println(i);
        }
    }
}
程序运行结果
1
3
5
练习4
- 题目:使用break关键字对1-5的筛选,筛选出第一个偶数2
public class Test {
    public static void main(String[] args) {
        for (int i = 1; i < 5; i++) {
            if(i%2==0){
                System.out.println(i);
                break;
            }
        }
    }
}
- 程序运行结果
2
练习5
- 题目:“百钱买百鸡”是我国古代的著名数学题。题目这样描述:3 文钱可以买1只公鸡,2 文钱可以买一只母鸡,1 文钱可以买3 只小鸡。用100 文钱买100 只鸡,那么各有公鸡、母鸡、小鸡多少只?
public class Test {
    public static void main(String[] args) {
        //cock hen chick 分别对应公鸡 母鸡 小鸡
        int cock = 0;
        int hen = 0;
        int chick = 0;
        //全买公鸡
        for ( cock = 0; cock < 100/3; cock++) {
            //减去公鸡后,剩下全买母鸡
            for (  hen = 0; hen < (100-cock*3)/2; hen++) {
                //剩下全是小鸡
                 chick = 100 - cock - hen;
                 //限制条件:小鸡的数量必须被3整除 并且3种鸡的总价为100
                 if(chick%3==0 && cock*3 + hen*2 + chick/3 ==100){
                     System.out.println("公鸡:"+cock+" 母鸡:"+hen+" 小鸡:"+chick);
                 }
            }
        }
    }
}
程序运行结果
公鸡:0 母鸡:40 小鸡:60
公鸡:5 母鸡:32 小鸡:63
公鸡:10 母鸡:24 小鸡:66
公鸡:15 母鸡:16 小鸡:69
公鸡:20 母鸡:8 小鸡:72
公鸡:25 母鸡:0 小鸡:75
练习6
- 题目:搬砖问题:36 块砖,36 人搬,男搬4,女搬3,两个小孩抬1 砖,要求一次全搬完,问男、女和小孩各若干?
public class Test {
    public static void main(String[] args) {
      //man woman child分别对应 男人 女人 小孩
        int man = 0;
        int woman = 0;
        int child = 0;
        //全是男人
        for ( man = 0; man < 36/4; man++) {
            //减去男人后,剩下全是女人
            for ( woman = 0; woman < (36-man*4)/3; woman++) {
            //剩下全是小孩
                child = 36 - man - woman;
                //限制条件:小孩的数量必须被2整除 并且3种人搬的砖总数为36
                if(child%2==0 && man*4 + woman*3 +child/2==36){
                    System.out.println("男:"+man+" 女:"+woman+" 小孩:"+child);
                }
            }
        }
    }
}
程序运行结果
男:3 女:3 小孩:30
练习7
- 题目:编程找出四位整数abcd 中满足下述关系的数。(ab+cd)(ab+cd)=abcd
 例如 (20+25)*(20+25)=2025
public class Test {
    public static void main(String[] args) {
        for (int i = 1000; i <10000; i++) {
            int ab = i/100;
            int cd = i%100;
            if((ab+cd)*(ab+cd)==i){
                System.out.println(i);
            }
        }
    }
}
程序运行结果
2025
3025
9801
练习8
- 题目:求水仙花数。所谓水仙花数,是指一个三位数abc,如果满足a3+b3+c3=abc,则abc 是水仙花数。
 例如:1的3次方+5的三次方+3的3次方=153
public class Test {
    public static void main(String[] args) {
        for (int i = 100; i < 1000; i++) {
            int a = i/100;
            int b = i/10 %10;
            int c = i%10;
            if(a*a*a+b*b*b+c*c*c==i){
                System.out.println(i);
            }
        }
    }
}
程序运行结果
153
370
371
407
练习9
- 题目:输入一个整数,计算它各位上数字的和。(此数为任意位的数)
import java.util.Scanner;
/*
   题目:输入一个整数,计算它各位上数字的和。(此数为任意位的数)
 */
public class Test {
    public static void main(String[] args) {
        //创建Scanner类对象
             Scanner sc = new Scanner(System.in);
             int number = sc.nextInt();
        System.out.println("输入的值为:"+number);
        //定义各位数字和为sum
        int sum = 0;
        while(number!=0){
            //总和每次加的都是当前的最后一位
              sum = sum +  number%10;
              //输入的整数每次循环都少一位
              number /= 10;
        }
        System.out.println("该数各位总和为:"+sum);
    }
}
程序运行结果视输入情况而定,例如我们输入123和1234
(1)输入123
输入的值为:123
该数各位总和为:6
(2)输入1234
输入的值为:1234
该数各位总和为:10
练习10
- 题目:使用for循环打印九九乘法表
public class Test {
    public static void main(String[] args) {
        for (int i = 1; i < 10; i++) {
            for (int j = 1; j <= i; j++) {
                int result = i*j;
                System.out.print(i+"X"+j+"="+result+" ");
            }
            System.out.println();
        }
    }
}
程序运行结果
1X1=1 
2X1=2 2X2=4 
3X1=3 3X2=6 3X3=9 
4X1=4 4X2=8 4X3=12 4X4=16 
5X1=5 5X2=10 5X3=15 5X4=20 5X5=25 
6X1=6 6X2=12 6X3=18 6X4=24 6X5=30 6X6=36 
7X1=7 7X2=14 7X3=21 7X4=28 7X5=35 7X6=42 7X7=49 
8X1=8 8X2=16 8X3=24 8X4=32 8X5=40 8X6=48 8X7=56 8X8=64 
9X1=9 9X2=18 9X3=27 9X4=36 9X5=45 9X6=54 9X7=63 9X8=72 9X9=81 
 
                   
                   
                   
                   
                             本文详细介绍了Java中的循环结构、选择结构、数组操作以及排序算法,包括while和do-while的区别、switch-case的使用、continue和break的用法、普通for循环和增强for循环的应用,并提供了多个实战练习,如数组排序和经典问题的解决方案。
本文详细介绍了Java中的循环结构、选择结构、数组操作以及排序算法,包括while和do-while的区别、switch-case的使用、continue和break的用法、普通for循环和增强for循环的应用,并提供了多个实战练习,如数组排序和经典问题的解决方案。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
                     
              
             
                   5946
					5946
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
					 
					 
					


 
            