打牢基础:流程控制和数组


世界上的任何一种算法的代码实现都需要三种结构,就是顺序,分支和循环,Java语言作为高级语言,也没能突破这个逻辑,所以也提供了这三种结构的语法支持。顺序就是执行代码的先后顺序,分支就是选择性的执行代码,循环就是重复执行代码。此外数组也是一种非常符合程序猿逻辑的数据结构,Java也提供了支持。


分支

主要是if和switch这两种。
if主要有三种语法:if……,if……else……,if……else if……else……。

 /**
 * 这段代码是对swicth语句的语法进行熟悉的练习代码
 * @author 郭聪聪
 *
 */
public class SwicthDemo {
    /*
     * 程序的主方法,功能是输出指定季节的成语
     */
    public static void main(String [] args){
        //声明变量season
        String season="夏天";
        //执行swicth语句
        switch (season){
        case "春天":{
            System.out.println("春暖花开");
            break;
        }
        case"夏天":{
            System.out.println("夏日炎炎");
            break;
        }
        case"秋天":{
            System.out.println("秋高气爽");
            break;
        }
        case"冬天":{
            System.out.println("冬雪皑皑");
            break;
        }
        default:{
            System.out.println("季节输入错误");
        }
        }
    }

}

循环

Java提供了while,do……while……,for……,三种循环。
while循环:当循环条件成立的时候执行循环体和迭代语句。
do……while循环无论如何先执行一遍循环体,在进行条件语句的判断。
for 循环:循环条件为true,执行循环体,再执行循环迭代语句。

当把一个循环放到另一个循环里,就形成了一个嵌套循环,任何形式的循环都可以作为内层循环,也可以作为外层循环。

控制循环结构:使用break结束循环,使用continue忽略本次循环剩下的语句,此外return可以结束整个方法,当然也就结束了整个循环。

* break
    /*
    *联系使用break终止循环语句,所以这个类没有数据,只有一个没什么意义的方法
    */
    public class BreakDemo{
         public static void main(String [] args){
         //一个简单的for循环
              for(int i=0;i<10;i++){
                   System.out.println("i的值是:"+i);
                   if(i==3){
                        break;
                   }
              }
         }
    }

break还可以直接结束外层循环

/*
本类是为了联系break出外层循环的用法,因此没有属性,主方法也没什么意义
*/
public class BreakDemo2{
    public static void main(String [] args){
        //一个外层循环,添加一个标签
        outcircle:
        for(int i=0;i<10;i++){
            for(int j=0;j<10;j++){
                System.out.println("i:"+i+"    j:"+j);
                if(j==2){
                    break outcircle;
                }
            }
        }
    }
}

数组

目前为止,8种基本的数据类型中没有数组,三种代码结构中也没有数组,所以数组是什么呢?数组可以说是一种数据结构,它的出现是为了方便的处理大量的相同类型的数据,从C语言开始,之后的所有的高级语言都支持这种结构,但是每种语言的数组特性有不太一样,在java中,所有的数组元素具有相同的类型,一旦一个数组初始化完成,它的内存空间也就确定了,所以从这个角度来讲,数组也是一个数据类型,实际上是一个引用类型,所有初始化的时候要用new关键字。Java数组可以储存任意类型的数据,包括引用类型。所以定义数组的方法和定义其他基本类型和引用类型一样,只要在数据类型的后边加上一个【】即可。

实际上数组有两种初始化方式,一种是静态初始化,一种是动态初始化。静态初始化的语法格式如下

  type[]  arrayName=new type[]{ , , ,);

但是数组的静态初始化也支持直接赋值type[] arrayName={,,,};
动态初始化只指定数组的长度,数组的初始值由系统指定。系统指定数组元素时,整数类型为0,浮点为0.0,boolean为false,字符型为“/u0000”,数组元素为null。
访问数组元素的时候使用【索引值】即可。所有的数组提供了一个lengh属性,可以通过arrayName.lengh来索引数组元素的长度。
自从Java 5之后,java提供了foreach循环来遍历数组元素和集合,语法如下
for(数组元素类型 形参名:数组名){}
foreach循环中的形参只能临时保存数组元素的值,不能改变数组元素的值,使用要谨慎。

堆内存与栈内存

其实数组的特性是一种引用数据类型,所以要想深入理解,就要谈一谈“堆内存”和“栈内存”。其实数组变量被存放在一个栈内存里,而实际的数组对象被存放在堆内存里,程序中通过p[x]的方式由数组变量找到实际的数组对象,也就是说数组的引用变量是访问推内存数组的根本方式。
当一个方法执行时,每个方法都会建立自己的栈内存,用来存放临时的变量,而方法执行结束以后,栈内存自动销毁,而程序中的对象被存放在堆内存中。
数组相互赋值的过程其实就是指向相互赋值的过程,b=a,这句话成立的前提是数组a和数组b的类型一致,这时,b就会舍弃原来的指向,转而指向a指向的堆内存空间。
所以定义数组,也就是int[]=iArr;这个过程只是开辟了栈内存,初始化数组的过程才是开辟堆内存并且明确指向的过程。

​没有多维数组

多维数组实际上就是每一个数组元素也是一个引用,也就是每一个数组元素都是一个一维数组,但是因为Java是强类型语言,所以只能扩展到二维为止。也就是二维数组的元素是一维数组,三维数组的元素是二维数组。

/*
*本类是一个数组的应用举例,目的是把浮点数转换成人民币读法的字符串
*/
public class Num2Rmb{
    public static void main(String [] args){
        Num2Rmb nr=new Num2Rmb();
        System.out.println(nr.tohanStr("6108"));
    }
    private String [] hanArr={"零","壹","贰","叁","四","伍","陆","柒","捌","玖"};
    private String [] unitArr={"十","百","千"};
    /*
    divide方法:把一个浮点数分解成整数部分和小数部分的字符串
    @parameter num
    @return 分解出来的整数部分和小数部分的字符串
    */
    private String [] divide(double num){
        String[] result=new String[2];
        //得到整数部分,强制转化为long型
        long zheng=(long)num;
        //浮点数减去整数部分得到小数部分,乘以100再取整得到两位小数
        long xiao=Math.round((num-zheng)*100);
        result[0]=String.valueOf(zheng);
        result[1]=String.valueOf(xiao);
        return result; 
    }
    /*
    tohanStr方法:把一个四位的数字字符串转化为汉字字符串
    @para:numString
    @return:hanString
    */
    public String tohanStr(String numString){
        String result=" ";

        for (int i=0;i<numString.length();i++){
            //把char类型的数据转化为int类型的数据,利用ASCII码差48
            int num=numString.charAt(i)-48;
            //如果num不是最后一位也不是零加单位
            if(i!=numString.length()-1&&num!=0){
                result+=hanArr[num]+unitArr[numString.length()-2-i];
            }
            //如果num是最后一位或者是零,不加单位
            else{
                result+=hanArr[num];
            }

        }
        return result;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值