循环流程控制与数组

循环流程控制

for循环

  1. for循环基础语法

    for (表达式1;表达式2;表达式3){
    语句块(循环体)
    }
    //表达式1:初始值 表达式2:循环条件(boolean) 表达式3:循环增量(递增/递减)

  2. 使用场景(固定次数的循环)

    /**
    * for循环
    */
    public class ForDemo01 {
    public static void main(String[] args) {
    //完成打印十句Hello World

    for (int i = 0; i <5 ; i++) {
    System.out.println("Hello World");
    }
    }
    }
    /**
    * 计算从1累加到100的和 并输出累加的结果
    */
    public class ForDemo02 {
    public static void main(String[] args) {
    int sum = 0;
    for (int i = 1; i <=100 ; i++) {
    sum+=i;
    }
    System.out.println("和是:"+sum);
    }
    }
  3. break语句

    ​ break语句可用于循环语句或switch语句中

    break用于循环时,可终止循环,直接执行循环后面的语句,常常与条件语句一起使用

    /**
    * break终止循环
    */
    public class forDemo04 {
    public static void main(String[] args) {
    //计算1-100的和,当和大于4000时,程序终止
    int sum = 0;
    for (int i = 1; i <=100 ; i++) {
    sum+=i;
    if (sum >= 4000){
    System.out.println(sum);
    break;
    }
    }
    }
    }

  4. continue语句

    continue 只能用于循环中,可以跳过循环体中剩余语句而执行下一次循环

    /**
    * continue关键字
    * 能够结束当前的循环 继续下一次循环
    */
    public class ForDemo05 {
    public static void main(String[] args) {
    //逢七过
    for (int i =1; i <=100; i++) {
    if (i%10==7 || i%7==0 || i/10==7){
    continue;
    }
    System.out.println(i);
    }
    }
    }

  5. 循环省略条件

    /**
    * 循环省略条件
    */
    public class ForDemo07 {
    public static void main(String[] args) {
    for (int i = 0;; i++) {
    System.out.println(i+"");
    if (i==10){
    break;
    }
    }
    }
    }

    //循环省略增量
    for (int i = 0; i <=10 ;) {
    System.out.println(i+" ");
    i++;
    }
    System.out.println();
    int i = 0;
    for (;;){
    System.out.println(i+" ");
    if (i == 10) {
    break;
    }
    i++;
    }

while循环

不计次循环一般采用while/do-while循环

  1. while循环的语法

    while(循环条件){
    循环体;
    }
  2. while循环案例

           Random random = new Random();
    while (dise1!=dise2||dise1!=dise3){
    dise1 = random.nextInt(6)+1;
    dise2 = random.nextInt(6)+1;
    dise3 = random.nextInt(6)+1;
    System.out.println("dise1:"+dise1+" dise2:"+dise2+" dise3:"+dise3);
    }
    }
    }

do while 循环

  1. do while 循环的语法

    do{
    循环体;
    }while(循环条件);
  2. do while 循环案例

import java.util.Random;
import java.util.Scanner;

/**
* do while 循环 先执行循环体 在判断条件是否满足
* do while 循环 至少有一次执行
*/
public class DoWhileDemo01 {
public static void main(String[] args) {
Scanner console = new Scanner(System.in);
//产生一个随级的数字
Random random = new Random();
//产生一个1-100的随机数
int num = random.nextInt(100)+1;
System.out.println(num);
System.out.println("开始猜猜吧!");
int guess;
do {
guess = console.nextInt();
if (guess > num){
System.out.println("猜大了!");
}else if (guess < num){
System.out.println("猜小了!");
}else {
System.out.println("猜中了!");
}
}while (guess!=num);
}
}

while 和 do while 的区别

while:可能一次都不执行

do while :一定要执行一次

嵌套循环

/**
* 嵌套循环
*/
public class ForDemo09 {
public static void main(String[] args) {
//打印直角三角形
//外层循环负责一共打印几行
for (int i =1; i <= 5 ; i++) {
//内层循环负责一共打印几列
for (int j =1; j <=i ; j++) {
System.out.print("*");
}
//一行打印结束后换行
System.out.println();
}
}
}
/**
* 打印金字塔
* 1 *
* 2 ***
* 3 *****
* 4 *******
* 5 *********
*/
public class ForDemo10 {
public static void main(String[] args) {
//外层循环控制一共打印几行
for (int i =1; i <=5 ; i++) {
//内层循环1负责打印空格
for (int j =5-i; j>0 ; j--) {
System.out.print(" ");
}
//内层循环2负责打印星号
for (int j =1; j <=i*2-1 ; j++) {
System.out.print("*");
}
System.out.println();
}
}
}
/**
* 有1分、2分、5分的硬币若干,从中拿取一部分组成10元钱,
* 有多少种组合方式
*/
public class Test01 {
public static void main(String[] args) {
int total = 1000;
int fen1 = 1;
int fen2 = 2;
int fen5 = 5;
int sum = 0;
for (int i = 0; i <=1000 ; i++) {
for (int j = 0; j <=500 ; j++) {
for (int k = 0; k <=200 ; k++) {
if (total == fen1*i+fen2*j+fen5*k){
System.out.println(i+" "+j+" "+k);
sum++;
}
}
}
}
System.out.println(sum);
}
}

数组

数组是一种用于存储相同类型数据元素的数据结构。它是一系列按照顺序排列的元素集合,可以通过索引访问每个元素

基本类型数组

  1. 创建基本类型数组

    数组的声明语法

    ​ 数据类型 [] 数组名 = new 数据类型 [大小];

  2. 基本类型数组默认值

    整数类型(byte short int long): 0

    浮点数类型( float double) : 0.0

    布尔类型(boolean) ; false

    字符类型(char) ; 空字符(‘\u0000’)

  3. 访问数组元素

/**
* java数组的定义
*/
public class ArrayDemo01 {
public static void main(String[] args) {
//定义一个数组 类型是整型 长度是10
int[] arr = new int[10];
arr[0]=5;
//通过索引(下标)访问数组中的元素,索引从0开始,最大到数组的长度-1
System.out.println(arr[0]);

int x = arr[1];
System.out.println(x);

arr[2]+=10; //arr[2] = arr[2]+10;
System.out.println(arr[2]);

}
}

  1. 使用元素初始化数组

//静态初始化数组
//int[] numbers = new int[] {10,15,16,19,21};
int [] numbers = {10,15,16,19,21};
System.out.println(numbers[2]);
System.out.println(numbers[4]);
  1. for循环遍历数组元素

    /**
    * 数组的遍历
    */
    public class ArrayDemo02 {
    public static void main(String[] args) {
    //数组的静态初始化
    int [] arr = {15,3,9,12,6,11};
    //查看数组的所有元素
    System.out.println("数组的长度"+arr.length);
    for (int i = 0; i <arr.length ; i++) {
    System.out.println(arr[i]);
    }
    int sum = 0;
    for (int i = 0; i <arr.length ; i++) {
    sum +=arr[i];
    }
    System.out.println("数组的和是"+sum);
    }
    }
  2. 课堂练习:斐波那契数列

    import java.util.Scanner;

    /**
    * 斐波那契数列
    * 第一个数字是0 第二个数字是1
    * 后面的数字是前两个数字之和
    * 要求: 接收键盘的输入n 循环生成前n项斐波那契数列
    * 生成数列之后 计算前n个数字的和
    */
    public class Test02 {
    public static void main(String[] args) {
    System.out.println("请输入n");
    Scanner scanner = new Scanner(System.in);
    int n = scanner.nextInt();
    int a1 = 0;
    int a2 = 1;
    int arr[] = new int[n];
    arr[0] = a1;
    arr[1] = a2;
    for (int i = 2; i <arr.length ; i++) {
    arr[i]=arr[i-1]+arr[i-2];
    }
    for (int i = 0; i < arr.length; i++) {
    System.out.print(arr[i]+" ");
    }
    System.out.println();
    int sum = 0;
    for (int i = 0; i <arr.length ; i++) {
    sum +=arr[i];
    }
    System.out.println(sum);
    }
    }

二维数组

二维数组是指由多个一维数组组成的数组.可以看成是一个表格或矩阵,其中每个元素都有两个索引来定位,即行索引和列索引

  1. 二维数组在java中的声明和初始化语法

    dataType[][] arrayName = new dataType[rowSize][columnSize];
  2. 遍历二维数组

    /**
    * 二维数组
    */

    public class MatrixDemo {
    public static void main(String[] args) {
    //声明一个二维数组
    int[][] matrix = new int[3][3];
    //给第一行第一列赋值
    matrix[0][0] = 11;
    System.out.println(matrix[0][0]);

    int [][] matrix2 = {
    {1,2,3},
    {4,5,6},
    {7,8,9},
    {10,11}
    };
    //二维数组的遍历
    for (int i = 0; i <matrix2.length ; i++) {
    for (int j = 0; j <matrix2[i].length ; j++) {
    System.out.print(matrix2[i][j]+" ");
    }
    System.out.println();
    }
    }
    }
  3. 数组都是一组连续的内存空间,二维数组在内存空间中实质上就是一维数组 (内存中不存在二维数组!!!!)