• 第四章.流程控制与数组


    流程控制结构:

    分支结构

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

      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 }
    View Code

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

        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 }
    View Code

      

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

    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],前后有中括号,中间以逗号和空格间隔。

    数组应用:

    把一个4位数字字符串转换成一个中文读法:

     1 import java.util.Arrays;
     2 
     3 public class Num2Rmb{
     4     private String[] hanArr = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
     5     
     6     private String[] unitArr = {"十", "百", "千"};
     7     
     8     /**
     9     *把一个浮点数分解成整数部分和小数部分字符串
    10     *@param num 需要被分解的浮点数
    11     *@return 分解出来的整数部分和小数部分。第一个数组元素是整数部分,第二个数组是小数部分
    12     */
    13     private String[] divide(double num){
    14         
    15         //将一个浮点数前值类型转换为long型,即得到它的整数部分
    16         long zheng = (long) num;
    17         
    18         //浮点数减去整数部分,得到小数部分,小数部分乘以100后再取整得到两位小数
    19         int xiao = (int) ((num - zheng) * 100);
    20         
    21         //下面用了两种方法把证书转换为字符串
    22         return new String[] {zheng + "", String.valueOf(xiao)};
    23     }
    24     
    25     /**
    26     *把一个四位的数字字符串变成汉字字符串
    27     *@param numStr 需要被转换的四位的数字字符串
    28     *@return 四位的数字字符串被转换成汉字字符串
    29     */
    30     private String toHanStr(String numStr){
    31         String result = "";
    32         
    33         //防止numStr数字字符串开头为0,先把其转换为整型,再转换为数字字符串
    34         int numInt = Integer.parseInt(numStr);
    35         numStr = numInt + "";
    36         
    37         int numLen = numStr.length();
    38         
    39         //找出从右往左 数 不是零的位置
    40         int minimumNot0 = 0;
    41         while((!numStr.equals("0")) && numStr.charAt(numLen - 1 - minimumNot0) == '0'){
    42             minimumNot0++;
    43         }
    44         
    45         //依次遍历数字字符串的每一位数字(除从右往左 数 是零数字),
    46         for(int i = 0; i < (numLen - minimumNot0); i++){
    47             
    48             //把char型数字转换成int型数字,因为它们的ASCII码值恰好相差48
    49             //因此把char型数字减去48得到int型数字,例如'4'被转换成4
    50             int num = numStr.charAt(i) - 48;
    51             
    52             //如果不是最后一位数字,而且数字不是零,则需要添加单位(千、百、十)
    53             if( i != numLen - 1 && num != 0){
    54                 result += hanArr[num] + unitArr[numLen - 2 - i];
    55             }else{
    56                 
    57                 //否则不要添加单位
    58                 result += hanArr[num];
    59                 
    60                 //判断数字字符串中间有几个零
    61                 while((i != (numLen - 1)) && (numStr.charAt(i + 1) == '0')){
    62                     i++;
    63                 }
    64             }
    65         }
    66         result += "元";
    67         return result;
    68     }
    69     
    70     public static void main(String[] args){
    71         Num2Rmb nr = new Num2Rmb();
    72         
    73         //测试把一个浮点数分解成整数部分和小数部分
    74         System.out.println(Arrays.toString(nr.divide(236711125.129)));
    75         
    76         //测试把一个四位的数字字符串变成汉字字符串
    77         System.out.println(nr.toHanStr("0000"));
    78         System.out.println(nr.toHanStr("0001"));
    79         System.out.println(nr.toHanStr("0010"));
    80         System.out.println(nr.toHanStr("0011"));
    81         System.out.println(nr.toHanStr("0100"));
    82         System.out.println(nr.toHanStr("0101"));
    83         System.out.println(nr.toHanStr("0110"));
    84         System.out.println(nr.toHanStr("0111"));
    85         System.out.println(nr.toHanStr("1000"));
    86         System.out.println(nr.toHanStr("1001"));
    87         System.out.println(nr.toHanStr("1010"));
    88         System.out.println(nr.toHanStr("1011"));
    89         System.out.println(nr.toHanStr("1100"));
    90         System.out.println(nr.toHanStr("1101"));
    91         System.out.println(nr.toHanStr("1110"));
    92         System.out.println(nr.toHanStr("1111"));
    93     }
    94 }
    View Code

    GitHub链接:

    https://github.com/lanshanxiao/-Java-

    1 java中的length属性是针对数组说的,比如说你声明了一个数组,想知道这个数组的长度则用到了length这个属性.
    2 java中的length()方法是针对字符串String说的,如果想看这个字符串的长度则用到length()这个方法.
    3.java中的size()方法是针对泛型集合说的,如果想看这个泛型有多少个元素,就调用此方法来查看!

     Integer类中parseInt()和valueOf()的区别:

      static int parseInt(String s) 
                将字符串参数作为有符号的十进制整数进行分析。 
      static Integer valueOf(int i) 
                返回一个表示指定的 int 值的 Integer 实例。 
      static Integer valueOf(String s) 
                返回保持指定的 String 的值的 Integer 对象。

    int转换为String,String转换为int的方法:

    int -> String

    int i=12345;
    String s="";
    第一种方法:s=i+"";
    第二种方法:s=String.valueOf(i);
    这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢?

    String -> int

    s="12345";
    int i;
    第一种方法:i=Integer.parseInt(s);
    第二种方法:i=Integer.valueOf(s).intValue();
    这两种方法有什么区别呢?作用是不是一样的呢?是不是在任何下都能互换呢?

    以下是答案:

    第一种方法:s=i+""; //会产生两个String对象
    第二种方法:s=String.valueOf(i); //直接使用String类的静态方法,只产生一个对象

    第一种方法:i=Integer.parseInt(s);//直接使用静态方法,不会产生多余的对象,但会抛出异常
    第二种方法:i=Integer.valueOf(s).intValue();//Integer.valueOf(s) 相当于 new Integer(Integer.parseInt(s)),也会抛异常,但会多产生一个对象

    --------------------------------------------------------------------
    1如何将字串 String 转换成整数 int?

    A. 有两个方法:

    1). int i = Integer.parseInt([String]); 或
    i = Integer.parseInt([String],[int radix]);

    2). int i = Integer.valueOf(my_str).intValue();

    注: 字串转成 Double, Float, Long 的方法大同小异.
    2 如何将整数 int 转换成字串 String ?
    A. 有叁种方法:

    1.) String s = String.valueOf(i);

    2.) String s = Integer.toString(i);

    3.) String s = "" + i;

    注: Double, Float, Long 转成字串的方法大同小异.

  • 相关阅读:
    【例题 8-11 UVA-10954】Add All
    【例题 8-10 UVA
    【BZOJ1226】学校食堂Dining(状压DP)
    【Tyvj1601】魔兽争霸(主席树,树套树)
    【BZOJ3504】危桥(最大流)
    【BZOJ1812】riv(多叉树转二叉树,树形DP)
    【Vijos1412】多人背包(背包DP)
    【Codevs1907】方格取数3(最小割)
    【Codevs1227】方格取数2(费用流)
    【Tyvj1982】武器分配(费用流)
  • 原文地址:https://www.cnblogs.com/lanshanxiao/p/7248095.html
Copyright © 2020-2023  润新知