跟着姜少学Java基础编程之九:数组

来源:互联网 发布:星星知我心主题曲原唱 编辑:程序博客网 时间:2024/06/06 00:50

本篇主要介绍Java语言中的数组。

数组

程序 = 算法+数据结构
算法解决的是流程逻辑问题,比如之前讲过的if分支语句、switch语句,三种循环语句等。
数据结构是存储数据的方式。
Java中最常见的一种数据结构就是数组。

9.1 数组的定义

数组是由相同数据类型的元素,按照线性顺序组成的集合。
相同数据类型,是说一个数组中的元素必须是同一种数据类型,不允许出现不同的数据类型。
线性顺序,是指,在内存中,元素是线性排列的,可以按顺序(下标)访问。

9.2 数组的声明

Java的数组支持两种方式的声明,如下:

类型[] 数组名;  //编程规范推荐此种声明方式,可读性强   类型 数组名[];   //不推荐此种声明方式

数组声明之后,系统就在内存(栈stack)上分配了空间(只是引用变量的空间)。

    int[] arr;//声明int类型的数组    String[] arrStr;//声明字符串类型的数组

9.3 数组的初始化

Java中的数组必须初始化之后才能使用,所谓初始化,就是为数组的元素分配内存空间(堆内存),并为每个数组元素赋初始值。
数组的初始化方式分为静态初始化动态初始化

9.3.1 静态初始化

静态初始化是指由开发者指定数组元素的初始值,由系统决定数组的长度。
静态初始化的语法如下:

    数组名 = new 类型[]{元素1的值,元素2的值,...,元素n的值};

其中,使用关键字new来创建数组,花括号中包含每个数组元素的值,每个元素值之间用逗号隔开,中括号中不需要指定数组长度,系统会根据花括号中数组初始值的个数,自动为数组指定长度。

案例分析:

上述代码中,while循环在年龄没有达到18岁的时候,循环输出“您未成年。”每次执行循环体,年龄就会加一,直到年龄达到18岁后,结束while循环,执行循环后面的输出“恭喜,您已成年!”。

要注意:一般情况下,循环体中需要有语句改变循环条件,使循环条件有为false的可能性,防止变成死循环。

while案例2

    int age = 10;    while(age<18){        System.out.println("您未成年。");        age--;    }    System.out.println("恭喜,您已成年!");

案例分析:

上述代码从表面上看,貌似是一个死循环,会一直输出“您未成年。”但实际上并非如此,执行较长的一段时间后,会跳出循环,输出“恭喜,您已成年!”。

原因是,age是int型数据,一直减小,达到int的下边界,再减小,就会溢出变为很大的正数。这样,就跳出了while循环。

如果想要构造死循环,推荐使用while(true){}这种形式。

8.2 do-while循环

8.2.1 do-while语法

    do{        代码块;    }while(布尔表达式);

do后面的花括号中的代码块为循环体,while中的布尔表达式为循环条件,注意,do-while的最后面必须要加一个分号,这个是与while不同之处。
执行逻辑:
1)首先执行循环体中代码块
2)执行完循环体后判断布尔表达式,如果为false,则跳出循环,如果为true,则再次执行循环体中的代码块。
3)重复步骤2),直到循环条件为false,跳出循环。

8.2.2 do-while应用

    int money = 220;    do{        //吃一顿饭需要100元        System.out.println("吃一顿饭花费一百元。");        money -= 100;    }while(money>100);

上述代码中,钱数为220元时,总共可以吃2顿饭,也就是循环体的代码循环了2次。但是,如果将money的初始值改为20,仍然可以吃一顿饭,虽然吃一顿饭需要100元,但如果是先吃了饭,再结账,虽然兜里的钱不够结账的,但饭已经吃完了,这就是传说中的霸王餐!!!
因此,do-while有一个特点,循环体至少会被执行一次

8.3 for循环

8.3.1 for循环的语法

如果循环的次数是固定的,一般使用for循环,其语法如下:

     for(表达式1;表达式2;表达式3){         代码块;      }

其中,表达式1一般用来对循环计数的变量进行初始化(只执行一次)。表达式2为布尔表达式,是循环条件。表达式3一般是对循环计数的变量进行改变。
其执行逻辑:
1)执行初始化表达式1
2)进行表达式2的判断
3)根据表达式2的判断结果执行:
如果为true,则执行循环体中的代码块。
如果为false,则跳出循环,不在执行4)和5)步。
4)执行表达式3
5)重复执行2)到4)步,直至跳出循环。

8.3.2 for循环的应用

求和:1+2+3+4+5+…+97+98+99+100

    int sum = 0;    for(int i=1;i<=100;i++){        sum += i;    }    System.out.println("和为:"+sum);//输出和为5050

8.4 break与continue

8.4.1 break

循环过程中,如果符合某种条件时,需要终止循环,可以使用break关键字来退出循环。
比如:循环接收用户输入的内容,并原样输出,如果用户输入q则退出程序。

    String str = "";    Scanner scanner = new Scanner(System.in);    while(true){        System.out.println("请输入内容:");        str = scanner.nextLine();        if(str.equals("q")){            break;//如果是q则跳出整个循环        }        System.out.println(str);    }    System.out.println("已退出程序。");

8.4.2 continue

如果在循环过程中,如果想在某个条件下调过其中的某一次循环,继续下一次循环的话,需要使用continue语句。
求和:1+2+3+4+6+7+…+99+100(注意没有5)

    int sum = 0;    for(int i=1;i<=100;i++){        if(i==5){            continue;//结束第5次循环,继续执行后面的循环        }        sum += i;    }    System.out.println("和为:"+sum);//输出和为5045

8.4.3 break与continue的区别

1、break不仅可以用于循环中,还可以用于switch-case语句中;
而continue只能用于循环中。
2、break是直接结束整个循环;continue是即跳过本次循环体中余下尚未执行的语句,接着再一次进行循环的条件判定,继续执行下一次及后面的循环。

下一篇将介绍Java中的数组。

阅读全文
0 0
原创粉丝点击