Java SE基础知识3(循环、break、continue、数组)

循环结构:

for:知道次数,或者有规律

	求 1 ~ 100和
	求 20!
	求 3/5 ..
	执行顺序:
		a. int i = 1 ->进入循环的条件
		b. i < 100 -> i等于这个数的时候满不满足第二个条件
		c.满足则执行大括号中的代码
		d.最后i++,i执行到下一个数,然后在回到第二个条件中进行判断

while: 不知道次数,或者没有规律

	语义环境: 当...就...

do - while:先执行一次,再做循环

	语义环境:做..直到..
	特殊情况: 第一次不符合需求时,将不进入循环

eg1:
package loop;
/*

  • For循环
    /
    public class Demo01For {
    public static void main(String[] args) {
    // 求 1 ~ 100的和
    int sum = 0;
    /

    * sum += 1; sum += 2; sum += 3;
    */
    int i = 1;//变量的初始值
    //i <= 100 -> 进入循环的条件,可以不给,不给会变成死循环
    // i++ -> 步长 变化的规律
    for(; i <= 100; i++) {
    //for循环体
    sum += i;
    }
    System.out.println(i);
    System.out.println(sum);

    /*
     * for循环的执行顺序
     * 	 1. int i = 1 -> 初始值只执行一次
     * 	 2. i <= 100  -> 当前数字符合需求则进入循环体
     *   3. 运行循环体中代码
     *   4. i++
     */
    

    }

}

eg2:
package loop;
/*

  • While循环
    */
    public class Demo02While {
    public static void main(String[] args) {
    int sum = 0;
    for(int i = 1; i <= 100; i++) {
    //for循环体
    sum += i;
    }

     int j = 0;
     while(j <= 100) {
     	sum += j;
     	j++;
     }
     
     /*
      *  从 1开始叠加,叠加到多少超出500
      */
     int sum1 = 0;
     int z = 1;//要叠加的数,会变得
     while(sum1 <= 500) {
     	sum1 += z;
     	z++;
     }
     System.out.println("z的次数:" + z);
     System.out.println("sum的值:" + sum1);	
    

    }
    }

eg3:
package loop;
/*

  • do - while
    */
    public class Demo05DoWhile {
    public static void main(String[] args) {
    int a = 10;
    //不满足条件,一次都不执行
    while( a > 10) {
    a–;
    }

     //循环之前,必须执行一次
     do {
     	a--;
     }while( a > 10);
    

    }

}

eg4:
package loop;

import java.util.Scanner;

/*

  • 程序内置一个 1 到 1000 之间的数字作为猜测的结果,

  • 由用户猜测此数字。 -> Scanner a

  • 用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;

  •  if判断 -> num 和 a
    
  • 直到用户猜对结果,则提示游戏结束。

  •  while()
    
  • 用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0,则游戏终止。
    */
    public class Demo03Guess {
    public static void main(String[] args) {
    int num = 333;
    Scanner console = new Scanner(System.in);
    int a = -1;//给一个不影响程序判断的数
    while(num != a) {
    System.out.println(“请输入:”);
    //1.用户猜数字
    a = console.nextInt();
    //1.5 提前退出游戏
    if(a == 0) {
    System.out.println(“退出游戏”);
    break;
    }
    //2.比较
    if(num > a) {
    System.out.println(“太小了”);
    }else if(num < a) {
    System.out.println(“太大了”);
    }else {
    System.out.println(“猜对了”);
    }
    }

     /**
      * 伪代码
      * 1.猜数字
      * int a = "要猜的数字";
      * 2.比较
      * if(a > num){
      * 		得出结果
      * }else if(a < num){
      * 		得出结果
      * }
      */
    

    }

}

eg5:
package loop;

import java.util.Scanner;

/*

  • 程序执行前,先猜一次

  • 程序内置一个 1 到 1000 之间的数字作为猜测的结果,

  • 由用户猜测此数字。 -> Scanner a

  • 用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;

  •  if判断 -> num 和 a
    
  • 直到用户猜对结果,则提示游戏结束。

  •  while()
    
  • 用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0,则游戏终止。
    */
    public class Demo04Guess2 {
    public static void main(String[] args) {
    int num = 333;
    Scanner console = new Scanner(System.in);
    int a;
    do{
    System.out.println(“请输入:”);
    //1.用户猜数字
    a = console.nextInt();
    //1.5 提前退出游戏
    if(a == 0) {
    System.out.println(“退出游戏”);
    break;
    }
    //2.比较
    if(num > a) {
    System.out.println(“太小了”);
    }else if(num < a) {
    System.out.println(“太大了”);
    }else {
    System.out.println(“猜对了”);
    }
    }while(a != num);

     /**
      * 伪代码
      * 1.猜数字
      * int a = "要猜的数字";
      * 2.比较
      * if(a > num){
      * 		得出结果
      * }else if(a < num){
      * 		得出结果
      * }
      */
    

    }

}

eg6:
package loop;
/*

  • 循环中的关键词:break
    /
    public class Demo06Loop {
    public static void main(String[] args) {
    int a = 0;
    //循环可以嵌套
    x:for(int i = 0; i < 5; i++) {
    y:for(int j = 0; j < 3; j++) {
    System.out.println(a++ + “–”);
    /

    if( j == 1) {
    //结束本层循环
    //外层 i -> 0 ~ 4
    //内层j -> 0 和 1
    break;
    }
    */
    if( j == 2) {
    break x;
    }

     	}
     }
    

    }
    }

eg7:
package loop;
/*

  • 循环中的关键词:continue
    */
    public class Demo07Lopp {
    public static void main(String[] args) {
    for(int i = 0; i < 5; i++) {
    for(int j = 0; j < 3; j++) {
    if( j == 1) {
    continue;//结束本次循环,继续下一次
    }
    System.out.println(“循环的 i = " + i +”,循环的j = " + j);
    }
    }
    }
    }

eg8:
package loop;
/*

  • 九九乘法表
    /
    public class Demo08Work {
    public static void main(String[] args) {
    for(int i = 1; i < 10; i++) {
    //行有几行 列就有几列
    for(int j = 1; j <= i ; j++) {
    System.out.print(j + "
    " + i + “=” + (j*i) + “\t”);
    }
    System.out.println();
    }

     /*
      * 转义字符
      */
     System.out.print("/t");//制表符
     System.out.print("/n");//ln -> 换行
     System.out.print("/r");//换行
     System.out.print("//");//表示/本身
    

    }

}


定义:10个随机整数,并且打印出来

int a1,a2,a3…a10;

a1 = (int)(Math.random() *10)
a2 = (int)(Math.random() *10)
a3 = (int)(Math.random() *10)
a4 = (int)(Math.random() *10)

System.out.println(a1)
System.out.println(a2)
System.out.println(a3)

数组:

概念:
	1) 数组就是批量定义变量的方式
	2) 数组相当于是个容器,装的是相同类型的若干数据
	3) 数组属于引用数类型

定义数组:
	数组长度一旦确定,就不可修改
	
	声明数组:
		数据类型[] + 引用名
		int[] array;
		double[] d;
		char[] c;
		boolean[] b;

	初始化:
		方式一:静态赋值
			ps:int[] arr1 = {1,2,3,4,5};
			特点:
				只能在声明的同时初始化
		方式二:静态赋值
			ps:int[] arr2 = new int[] {1,2,3,4};
			特点:
				再次赋值时也可以使用

		静态赋值的特点:
			数组一旦初始化,就已经确定了数组的长度(元素个数)和元素的值

		动态赋值:
			ps:int[] arr3 = new int[5];
			特点:
				1)定义数组时只是确定了数组的长度(元素的个数),但是没有初始化元素
				2)元素有默认初始值,都是0,但是0的表现形式不一样

				int类型 -> 0
				double类型 -> 0.0
				boollean类型 -> false
				char类型 -> '\u0000'

	获取数组元素:
		通过下标获取数组元素,下标都是从0开始
		数组下标范围:
			0 ~ 数组名.length - 1

	数组的属性: length
		数组长度 = 数组个数

	数组的迭代/遍历
		依次获取数组中的元素

可能出现的异常:
ArrayIndexOutOfBoundsException:数组下标越界异常

eg1:
package array;

import java.util.Arrays;

/*

  • 数组的定义
    */
    public class Demo01Array {
    public static void main(String[] args) {
    //初始化方式
    //方式一:静态赋值(静态初始化)
    int[] arr1 = {1,2,3,4,5};//下标 0 ~ 4 -> 5 - 1 -> length - 1
    //arr1 = {1,2,3,4,5};//编译报错
    //方式二:静态赋值(静态初始化)
    int[] arr2 = new int[] {1,2,3,4};
    arr2 = new int[] {2,3,4};
    //方式三:动态赋值(动态初始化)
    int[] arr3 = new int[5];//{0,0,0,0,0}

     System.out.println(arr1);//[I@532760d8 -> 哈希值 -> 地址值
     //获取数组中的元素
     System.out.println(arr1[1]);
     
     //修改数组中的元素
     arr1[4] = 10;
     arr1[4] += 10;
     
     //数组的属性 -> length
     //获取数组的长度(length) = 个数
     System.out.println(arr1.length);//5
     
     //数组下标范围 - > arr1
     
     //需求: 给 arr3赋随机值 ->  (int)(Math.random() * 1000) -> [0,1)
     //数组的遍历/迭代
     for(int i = 0; i < arr3.length; i++) {
     	arr3[i] = (int)(Math.random() * 100);
     	System.out.println(arr3[i]);
     }
     
     
     //arr3 = null;
     //NullPointerException -> 空指针异常
     //System.out.println(arr3[0]);
     
     System.out.println(arr1);//[I@532760d8
     System.out.println(Arrays.toString(arr1));
    

    }

}

eg2:
package array;

import java.util.Arrays;

/*

  • 给一个长度为10的数组,求数组的最大值,最小值,平均值
    */
    public class Demo02Work {
    public static void main(String[] args) {
    int[] arr = new int[10];
    //数组的遍历/迭代
    for(int i = 0; i< arr.length; i++) {
    arr[i] = (int)(Math.random() * 100);
    }
    System.out.println(Arrays.toString(arr));

    //求最大值
    int max = -1;
    for(int i = 0; i < arr.length; i++) {
    	if(arr[i] > max) {
    		//赋值 ->  从右往左
    		max = arr[i];
    	}
    }
    System.out.println(max);
    
    //求最小值
    int min = 101;
    for(int i = 0; i < arr.length; i++) {
    	if(arr[i] < min) {
    		min = arr[i];
    	}
    }
    System.out.println(min);
    
    //求平均值
    int sum = 0;
    for(int i = 0; i < arr.length; i++) {
    	sum = sum + arr[i];
    }
    //总数除以数组的长度
    int avg = sum / arr.length;
    System.out.println(avg);
    

    }

}

class hi{

}
eg3:
package array;

import java.util.Arrays;

/*

  • 数组的扩容 - 求数组元素的最大值放在最后一位
    */
    public class Demo03Copy {
    public static void main(String[] args) {
    int a = 10;

     int[] arr = new int[10];
     //数组的遍历/迭代
     for(int i = 0; i< arr.length; i++) {
     	arr[i] = (int)(Math.random() * 100);
     }
     System.out.println(Arrays.toString(arr));
     
     //求最大值
     int max = -1;
     for(int i = 0; i < arr.length; i++) {
     	if(arr[i] > max) {
     		//赋值 ->  从右往左
     		max = arr[i];
     	}
     }
     System.out.println(max);	
     //把数组最大值放入数组的最后一位
     int[] arr2 = new int[11];
     
     //把arr的值赋值给arr2 - 数组的遍历
     for(int i = 0; i < arr.length; i++) {
     	 arr2[i] = arr[i];
     }
     System.out.println(Arrays.toString(arr2));
     
     //把最大值添加到arr2数组的末尾
     arr2[arr2.length -1] = max;
     System.out.println(Arrays.toString(arr2));
     
     //把arr2 赋值给 arr
      arr = arr2;
      System.out.println(Arrays.toString(arr));
    

    }

}

eg4:
package array;

import java.util.Arrays;

/*

  • 扩容方法一
    */
    public class Demo04Copy {
    public static void main(String[] args) {
    int[] arr = new int[10];
    //数组的遍历/迭代
    for(int i = 0; i< arr.length; i++) {
    arr[i] = (int)(Math.random() * 100);
    }
    System.out.println(Arrays.toString(arr));

     //求最大值
     int max = -1;
     for(int i = 0; i < arr.length; i++) {
     	if(arr[i] > max) {
     		//赋值 ->  从右往左
     		max = arr[i];
     	}
     }
     System.out.println(max);	
     
     // 把最大值赋值到数组的最后位置
     //可做缩容 和 扩容
     arr = Arrays.copyOf(arr, arr.length - 3);
     System.out.println(Arrays.toString(arr));
     //把max 加入到 数组最后一位
     arr[arr.length - 1] = max;
     System.out.println(Arrays.toString(arr));
    

    }

}

eg5:
package array;

import java.util.Arrays;

/*

  • 扩容方法二
    */
    public class Demo05Copy2 {
    public static void main(String[] args) {
    int[] arr = new int[10];
    //数组的遍历/迭代
    for(int i = 0; i< arr.length; i++) {
    arr[i] = (int)(Math.random() * 100);
    }
    System.out.println(Arrays.toString(arr));

     //求最大值
     int max = -1;
     for(int i = 0; i < arr.length; i++) {
     	if(arr[i] > max) {
     		//赋值 ->  从右往左
     		max = arr[i];
     	}
     }
     System.out.println(max);	
     
     // 把最大值赋值到数组的最后位置
     int[] arr2 = new int[11];
     /**
      * 参数:
      * 	1. 原数组,要复制的数组
      *  2. 从原数组中下标为几的位置开始复制
      *  3. 复制到的目标数组
      *  4. 存到目标数组中的下标为几的位置
      *  5. 数组元素的个数
      */
     System.arraycopy(arr, 0, arr2, 0, arr.length);
     System.out.println(Arrays.toString(arr2));
     //把最大值放到arr2数组的最后一位
     arr2[arr2.length - 1] = max;
     //将arr2数组赋值给arr
     arr = arr2;
     System.out.println(Arrays.toString(arr));
    

    }

}

JVM内存空间:
方法区: 类相关的信息
栈:局部变量/临时变量
堆:引用类型的真正数据

类加载:
将字节码文件(.class文件)中的类相关的信息读到JVM中
工具: 类加载器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值