MyException - 我的异常网
当前位置:我的异常网» 计算机图书 » 第四章.流程统制与数组

第四章.流程统制与数组

www.MyException.Cn  网友分享于:2013-08-16  浏览:0次
第四章.流程控制与数组

流程控制结构:

分支结构

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

  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 转成字串的方法大同小异.

 

文章评论

做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
漫画:程序员的工作
漫画:程序员的工作
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
旅行,写作,编程
旅行,写作,编程
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
一个程序员的时间管理
一个程序员的时间管理
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
老程序员的下场
老程序员的下场
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
 程序员的样子
程序员的样子
为什么程序员都是夜猫子
为什么程序员都是夜猫子
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
编程语言是女人
编程语言是女人
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
那些争议最大的编程观点
那些争议最大的编程观点
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
我的丈夫是个程序员
我的丈夫是个程序员
10个调试和排错的小建议
10个调试和排错的小建议
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
程序员应该关注的一些事儿
程序员应该关注的一些事儿
程序员都该阅读的书
程序员都该阅读的书
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
中美印日四国程序员比较
中美印日四国程序员比较
每天工作4小时的程序员
每天工作4小时的程序员
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
鲜为人知的编程真相
鲜为人知的编程真相
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
我是如何打败拖延症的
我是如何打败拖延症的
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
代码女神横空出世
代码女神横空出世
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
总结2014中国互联网十大段子
总结2014中国互联网十大段子
程序员必看的十大电影
程序员必看的十大电影
程序员的鄙视链
程序员的鄙视链
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有