Java学习笔记(二)——2022-7-8

注:本系列为个人学习笔记,存在知识点欠缺或知识逻辑不连贯,见谅。

一、循环语句初识

  • 什么是循环?循环是程序中重复执行,直到满足指定条件才停止的一段代码。

  • 在编程学习过程中,循环结构部分可以说是思维转换的过程(将人的思维转换成人的思维),在接下来的编程学习中,循环结构非常常用,一定要精通学习。

二、循环结构的三种结构

  • for循环:最有效、最灵活的循环结构,一般用于解决已知循环次数的问题。

    • for(表达式1;表达式2;表达式3){循环语句}
    • 三个表达式的作用:

      • 表达式1:给循环变量赋初值;

      • 表达式2:给出循环条件,结果为布尔值,为true执行,false退出;

      • 表达式3:给出循环变量的变化规律,通常为递增或递减。

    • 循环结构的执行顺序:表达式1-->表达式2-->循环语句-->表达式3。

    • 例:

    for(int i=0;i<5;i++) {
    	System.out.print("*");
    }
  • while循环

    • while(布尔表达式){循环语句}
    • 一般用于解决未知次数的循环,当布尔表达式成真时执行循环语句。

    • 例:

    • public static void main(String[] args) {
          Scanner scanner=new Scanner(System.in);
          int n =scanner.nextInt();
          int sum = 1; //0乘以任何数字都是0
          int index=2;
          while( index <= n ) {
              sum*=index;//*=  sum=sum*n;
              index++;
          }
          System.out.println(sum);
      }
  • do-while循环

    • 和while循环类似,唯一不同点就是,do-while循环至少循环一次,先循环一次再验证。

    • 例:

    • public static void main(String[] args) {
          int n=1234;
          int temp=n;
          int index=0;
          do { //!结束条件=执行条件
              temp=temp/10;
              index++;
          }while(temp!=0);
          //index一共几位数
          System.out.print(index);
          int t=index;//t当前要求的位数
          for(int i=0;i<index;i++) {//index次
              //几位数 有几位 就取几次
              int n1=1;
              for(int j=0;j<t;j++) {
                  n1=n1*10;
              }
              int n2=1;
              for(int j=0;j<t-1;j++) {
                  n2=n2*10;
              }
              int x= n % n1/n2;//^异或
              System.out.print(x+" ");
              t--;
          }
      }

三、双重循环(多重循环)

  • 本质上就是初始循环结构的嵌套使用,常用情景:二维数组遍历。

    • 例:

      for(int j=0;j<5;j++) {
          for(int i=0;i<5;i++) {
              System.out.print("*");
          }
          System.out.println();
      }
  • 转换字符:

    • break:执行break操作,跳出当前所在的循环,到外层继续执行;

    • continue:执行continue操作,跳出本次循环,到下一次继续执行,直到执行完毕,到外层继续执行;

    • return:执行return操作,直接返回函数,所有该函数体内的代码(包括循环体)都不会再执行。

    • 例:

    • public static void main(String[] args) {
          boolean flag=false;
          for (int i = 0; i < 5; i++) {
              //? 1
              for (int j = 0;j < 4;j++) {
                  System.out.print("*");
                  //? 2
                  if(i==2 && j == 1) {
                      flag=true;
                      break;
                  }
              }
              if(flag) {
                  break;
              }
              System.out.println();
              //? 3
          }
      }

四、数组

  • 一维数组:

    • 数组是相同类型数据的有序集合,数组中的数据称之为数组元素,每个元素可通过他们的下标来访问他们,下标从0开始。

    • 数组的声明:

    • dataType[ ] arrayRefVar = new dataType[ arraySize];
    • 获取数组的长度:arrays.length。

    • 数组的四个基本特点:

      • 其长度是确定的。数组一旦被创建,它的大小就是不可以改变的。

      • 其元素必须是相同类型,不允许出现混合类型。

      • 数组中的元素可以是任何数据类型,包括基本类型和引用类型。

      • 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量。数组本身就是对象,Java中对象是在堆中的,因此数组无论保存原始类型还是其他对象类型,数组对象本身是在堆中的

    • 数组三种初始化

      • 静态初始化:

      • int[] a = {1,2,3};
        Man[ ] mans = {new Man(1,1),new Man(2,2)};
      • 动态初始化:

      • int[] a = new int[2];
        a[0]=1;
        a[1]=2;
      • 数组的默认初始化:数组是引用类型,它的元素相当于类的实例变量,因此数组一经分配空间,其中的每个元素也被按照实例变量同样的方式被隐式初始化。

    • 注:数组在声明之后,会将第一个数组元素存放在内存栈中(引用数组对象的变量),用于引用在堆里面的数组主体,且数组在内存中占据一段连续不变的空间,当数组下标超出声明时定义的length-1,就会报数组越界的错误(ArraylndexOutOfBoundsException:数组下标越界异常!)。

  • 多维数组:多维数组可以看作是数组的数组,拿二维数组来说,二维数组中的每一个元素就是一个以为数组。

    • 二维数组:

    • int a[][] = new int[2][5];
    • 例:

    • int n = 0;
      Scanner scanner=new Scanner(System.in);
      n=scanner.nextInt();
      int[][] arr=new int[n][];
      for(int i=0;i<arr.length;i++) {
          arr[i]=new int[i+1];
          for(int j=0;j<arr[i].length;j++) {
              if(j==0||i==j) {
                  arr[i][j]=1;
              }else {
                  arr[i][j]=arr[i-1][j]+arr[i-1][j-1];
              }
              System.out.print(arr[i][j]+"\t");
          }
          System.out.println();
      }

五、函数/方法(过程)

  • 有返回值叫函数,方法(过程)没有返回值——基本上没多大关系,三个名称可以指向同一种东西。

  • 用于实现某个特定功能的、可被调用执行并能返回值的程序代码段。函数=函数声明+函数体;

    • 函数声明:定义函数名、形式参数及返回值;

    • public static int cal(int a,int b,int c,int d) {
          return a/b+c%d;
      }
    • 函数体:由执行操作的语句序列组成;

    • 函数调用必须指定函数名和实际参数,函数执行后返回结果值。

    • 注:Java语言没有全局函数,函数声明在类中,称之为成员函数,分静态方法和实例方法两种。

    • 例:

    • public static void f1(int a,int b) { //形参=实参
          System.out.println(4);
      }
      public static void main(String[] args) {
          f1(2,3);
      }
  • 函数中变量的作用范围(作用域)

    • 函数中声明的变量仅在当前函数中有用,且传入的参数也只在当前函数中有用。

  • Java中的方法重载:

    • 同一个类中,函数名相同,返回类型相同,但参数列表不同。

六、递归方法

  • 定义:递归是数学中一种重要的概念定义方式,即用一个概念本身直接或间接地定义自己。

  • 递归的两个基本要素:

    • 边界条件:至少有一个初始条件是非递归的;

    • 递推通式:由已知的函数值逐步递推计算出未知函数值。

  • 例:

  • public static void main(String[] args) {
        System.out.print("输入阶乘n的值:");
        int sum = factorial(new Scanner(System.in).nextInt());
        System.out.println(sum);      
    }
    public static int factorial(int num){
        if (num == 1){
            return 1;
        }else {
            return num * factorial(num - 1);
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Java丶Sunday

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值