第四章.流程控制与数组

流程控制结构:

分支结构

  根据分支条件来选择性的执行某段代码。

  if:

  switch:

    case语句后面只能是byte、short、char、int四种整型类型,枚举类型和Java.lang.String类型(从Java 7才允许)。

    default语句不省略。

  break:

    break语句可以结束switch语句、while、do while、for语句但是结束不了if语句。

    Java中海油一种break标签,可以结束外层循环:

 1 public class BreakTest2{
 2     public static void main(String[] args){
 3         //外层循环,outer作为标识符
 4         outer:
 5         for(int i = 0; i < 5; i++){
 6             //内层循环
 7             for(int j = 0; j < 3; j++){
 8                 System.out.println("i的值为:" + i + " j的值为:" + j);
 9                 if(j == 1){
10                     //跳出outer标签所标识的循环
11                     break outer;
12                 }
13             }
14         }
15     }
16 }

    记住:这个外层循环标签是结束外层循环,不是跳到外层循环重新执行,切记! 

    break后的标签必须是一个有效的标签,即这个标签必须在其所在循环的外层循环之前定义。

    标签和循环语句之间不要加任何语句。

 continue:

    用在for语句中。

循环结构

  根据循环条件,重复执行某段代码。

  while:

  do while:

  for:

  foreach(jdk 5):

数组类型:

  java的数组要求所有的数组元素具有相同的数据元素,即一个数组中只能存储一种数据类型的数据。

  数组也是一种数据类型,它本身是一种引用类型:

    int[] arrayName;//推荐使用这种

    int arrayName[];

  数组初始化:

    静态初始化:

      int[] arrayName;

      arrayName = new int[] {1, 2, 3, 4};

      或者定义初始化同时完成:

        int[] a = {5, 6, 7, 8};

    动态初始化:

      int[] arrayName = new int[5];

  数组不要同时使用静态初始化和动态初始化:

    //错误的写法,int[]是类型,中括号中不能有值。

    //错误的写法,不能同时使用静态和动态初始化数组。

    

  Java中各类型的默认值:

    整型(byte,short,int,long):0

    浮点型(float,double):0.0

    字符型(char):‘\u0000’

    布尔类型(boolean):false

    引用类型(类,接口,数组):null

使用数组:

  访问数组元素:

    若访问数组元素时指定的索引值小于0,或者大于等于数组长度,编译程序不会出现任何错误,但是运行时会出现异常:java.lang.ArrayIndexOutOfBoundsException:N

    (数组索引越界异常),异常信息后的 N 就是程序员试图访问的数组索引。

  所有数组都提供了一个length的属性,可以防止越界访问:

    for(int i = 0; i < arrayName.length; i++)

foreach循环:

  可以循环遍历数组和集合,使用foreach循环遍历数组和集合元素时,无需获得数组和集合的长度,无需根据索引来访问数组元素和集合元素,foreach循环自动遍历数组和集合

  每个元素:

 1 public class ArrayTest{
 2     public static void main(String[] args){
 3         String[] books = {"疯狂Java讲义", "疯狂Android讲义"};
 4         for(String book : books){
 5             book = "疯狂Ajax讲义";
 6             System.out.println(book);
 7         }
 8         System.out.println(books[0]);
 9         System.out.println(books[1]);
10     }
11 }

  

  想一想上面的输出结果,并理解为什么会有这样的结果?

Java 8增强工具类:Arrays

Arrays类中包含了如下几个Static修饰的方法。//类中静态方法可以用 类名.方法名()调用。省去了创建对象的麻烦。

  1.int binarySearch(type[] a, type key);//使用二分法查询key元素在a数组中的索引值,若不包含key,则返回负数。a数组中元素已经按升序排列

  2.int binarySearch(type[] a, int fromIndex, int to Index, type key);//使用二分法查询key元素在a数组中的索引值,只搜索a数组中从fromIndex到toIndex索引的元素,若不

    包含key,则返回负数。a数组中元素已经按升序排列

  3.type[] copyOf(type[] original, int length);//把original数组复制成一个新数组,length是新数组的长度。若length小于original数组的长度,则新数组就是原数组前面length个

    元素;若length大于original数组的长度,则新数组的前面元素就是原数组的所有元素,后面按java默认值补充。

  4.type[] copyOfRange(type[] original, int from, int to);//和上面方法相似,但是只复制从from到to索引的元素。

  5.boolean equals(type[] a, type[] a2);//若a数组和a2数组的长度相同,且两者中元素也一一相同,该方法将返回true

  6.void fill(type[] a, type val);//把a数组的所有元素都赋值为val

  7.void fill(type[] a, int fromIndex, int toIndex, type val);//与上面方法类似,但是只将fromIndex到toIndex索引的元素赋值为val

  8.void sort(type[] a);//对a数组的数组元素进行排序,为升序

  9.void sort(type[] a, int fromIndex, int toIndex);//与上面方法相似,但是只将fromIndex到toIndex索引的元素排序,为升序

  10.String toString(type[] a);//将一个数组转换为字符串,若数组元素为0,1,2,3,4,则输出为[0, 1, 2, 3, 4],前后有中括号,中间以逗号和空格间隔。

时间: 2024-11-29 03:28:38

第四章.流程控制与数组的相关文章

疯狂JAVA——第四章 流程控制与数组

4.5 数组类型 数组也是一种类型.它本身是引用类型.例如int是一种基本类型,int[]就是引用类型. 两种定义数组的方式: 1.type[] arrayName; 2.type arrayName[]; 通常推荐第一种写法,这种方法既容易理解,也符合定义变量的语法. 如果访问数组元素时指定的索引值小于0,或者大于等于数组的长度,编译程序不会出现任何错误,但运行时会抛出异常 4.5.5foreach循环 String[] books={"三国演义","西游记",&

第四章 流程控制和数组

笔记: 用 break 结束循环( 可以跳到标号处 ) 用 continue 忽略本次循环到剩下语句( 也可以跳到标号处 ) 使用 return 结束方法 -> 数组类型 数组也是一种数据类型,它本身是一种引用类型 定义的时候一般使用  type[] arrayName,这种方式是比较易于理解和正规的 数组必须初始化才可以使用 初始化: 静态初始化 arrayName = new type{element1,element2,element3...} 动态初始化 arratName = new

Welcome to Swift (苹果官方Swift文档初译与注解二十六)---181~188页(第四章-- 流程控制)

Do-While  while循环的另一个版本是do-while循环,它在判断条件之前,先执行一遍循环体,然后再次执行循环体,直到条件成为false. do-while循环的通过格式: do {   statements } while condition 我们再用蛇和梯子的例子,使用do-while循环代替while循环.其中 finalSquare, board, square, 和 diceRoll 的初始化与while循环是一样的: let finalSquare = 25 var bo

Welcome to Swift (苹果官方Swift文档初译与注解二十四)---163~170页(第三章完--第四章 流程控制)

Mutability of Collections (可变集合) 字典和数组都是在一个集合里储存多个值.如果你创建数组或字典后赋值给一个变量,那么这个集合就是可变的( mutable).这就意味着你在创建这个集合之后,依然可以改变这个集合的 大小,添加元素到集合里或者删除已有的元素.相反地,如果你创建的数组或者字典赋值给一个常量,那么这个集合就是不能修改的,也就是说字典或者数组是不可变的(immutable) 对于字典,不可变就意味着你不能替换里面已有的键值对,一个不可变的字典在它一创建出来就是

Welcome to Swift (苹果官方Swift文档初译与注解二十七)---189~198页(第四章-- 流程控制)

Switch 一个switch语句里包含一个值,并且用这个值与其他几个可能的匹配模式进行比较,然后根据成功匹配上的模式,执行相应的代码块.switch语句提供了比if语句更多的选项来相应多种潜 在的情况. 最简单的一个例子: switch some value to consider { case value 1:   respond to value 1 case value 2, value 3:   respond to value 2 or 3 default:   otherwise,

Welcome to Swift (苹果官方Swift文档初译与注解二十八)---199~208页(第四章-- 流程控制)

Value Bindings (绑定值) 在switch的case中可以绑定一个或者多个值给case体中的临时常量或者变量,这个成为绑定值. 代码样例: let anotherPoint = (2, 0) switch anotherPoint { case (let x, 0):   println("on the x-axis with an x value of \(x)") case (0, let y):   println("on the y-axis with

Welcome to Swift (苹果官方Swift文档初译与注解二十九)---209~218页(第四章-- 流程控制)

Break break语句会立刻结束整个流程控制的执行.break语句可以在switch语句或者循环语句中帮助你提前结束循环或者switch的执行. Break in a Loop Statement  (循环语句中的break) 当在循环语句中使用break,会立刻结束循环的执行,并且跳转到循环体之后的第一行代码.循环不会再遍历执行了. Break in a Switch Statement (switch语句的break) 当在switch语句中使用break,break会立刻结速switc

Welcome to Swift (苹果官方Swift文档初译与注解三十)---219~224页(第四章-- 流程控制 完)

Labeled Statements  (标签语句) 循环或者switch语句可以嵌套其他的循环或者switch,这样在Swift中可以创建复杂的流程控制结构.循环或者switch语句都可以通过break语句来永久的结束,因此,有时候需要显式的 表明在循环或者switch中你需要break的语句.同样的,如果你嵌套多个循环,显式的表明里面的continue语句也是类似的. 为了达成这个目标,可以在循环语句或者switch语句中使用一个语句标签(statement label),利用这个标签和br

Java图式(第三章 流程控制、数组)

Java图式(第三章 流程控制.数组) 1.分支语句 1)if-else语句 2)switch语句 2.循环语句 1)while语句 while返回值不是1/0,必须是布尔表达式 2)do-while语句 3)for语句 4)continue/break语句 标号是对语句块/循环命名.eg:A:循环 continue A:直接终止标记的外循环 3.数组(引用类型) 1)声明时不确定大小 2)引用:下标引用,无指针 3)实例化(存储单元分配)语句:new 4)数组初始化:不要求每一维一样大 4.字