zoukankan      html  css  js  c++  java
  • 【Java】_2_Java程序入门第四课

      Java,为什么叫Java呢?貌似和Oak有关,也貌似与爪哇有关,这是为啥呢?说到这,让我想起了一首歌:不要问究竟。

        前面篇简单文字,使自己有了部分入手的感觉,因此今天我们来看一些比轻微复杂的Java项。

    【Java 数组】

      在Java中,也提供了与C/C++类似的数组的概念,在Java中数组强调的是Set的概念,即具有集合的特征。在Java中声明数组非常简单,语法格式如下

    所示:

       datatype    array_name[];

    或者

       datatype[]   array_name;

      这样声明的数组仅是定义数组名,并没有构造数组对象,为了构造数组对象,我们需要使用new操作符进行构造,如下所示:

          datatype[]  arrayname;

      array_name=new datatype[array_length];

      数组引用和C一样,通过下标(index)进行索引;其index_min=0、 index_max=array_length-1;

      下面我们对数组进行一个测试:

    /*
    This program test the control flow chart
    */
    
    import java.util.*;
    
    public class Cfc
    {
      public static void main(String[] args)
      {
        //array test
            int[]   array_int;
            array_int=new int[10];
    
            Scanner GetData=new Scanner(System.in);
    
            for(int i=0;i<array_int.length;i++)
        {
             System.out.println("Enter the "+(i+1) + " number:"+~0x7FFF+"<="+" number "+"<="+0x7FFF);
             array_int[i]=GetData.nextInt();
        }  
     
            for(int i=0;i<array_int.length;++i)
        {
             System.out.println("array_int["+i+"]:"+array_int[i]);
        }           
      }
    
    }

      上面的程序段,定义一个array_int数组,通过Scanner对象输入10个数值,然后将数组打印出来。执行如下所示:

      从这里我们可以看到我们可以通过数组的length属性获取数组的长度,这是与C/C++不一样的地方,在C中需要程序员自己来控制这个长度,时间常量

    容易造成混乱。

      有时需要变长数组,在C89里面没有提供变长数组的支持,而好像C99提供有有限的支持,在Java中通过类库也提供了变长数组的支持,我们以后再讨论。

      知道了数组的定义和使用,我们就来做一件稍具挑战的事情,对输入的数据进行排序,下面我们对上面的程序稍加变化,来实现这个功能:

    /*
    This program test the control flow chart
    */
    
    import java.util.*;
    
    public class Cfc
    {
      public static void main(String[] args)
      {
        //数组测试
            int[]   array_int;
            array_int=new int[10];
    
            Scanner GetData=new Scanner(System.in);
    
        //提示用户输入数据:
            System.out.println("Enter 10 numbers:"+~0x7FFF+"<="+" number "+"<="+0x7FFF);
    
            for(int i=0;i<array_int.length;i++)
        {
             array_int[i]=GetData.nextInt();
        }  
            
        //打印数组
            for(int i=0;i<array_int.length;++i)
        {
             System.out.println("array_int["+ i +"]:"+array_int[i]);
        }  
            System.out.print("\n\n");
    
            //对数组进行排序,最简单的冒泡法
        int temp=0;
        for(int i=0;i<array_int.length;++i)
             for(int j=array_int.length-1;j>i;j--)
              {
             if(array_int[j]<array_int[j-1])
                         {
                  temp=array_int[j-1];
                          array_int[j-1]=array_int[j];
                          array_int[j]=temp;
                 }
                  }
        
            //打印数组
            for(int i=0;i<array_int.length;++i)
        {
             System.out.println("array_int["+ i +"]:"+array_int[i]);
        }           
      }
    
    }

      上面的代码运行的结果是:

      在Java中对数组的处理还有几点特殊的地方:

      1、数组初始化,不需要new进行初始化。

          int[]  int_array={1,2,3,4};  //定义了一个int型的数组变量,int_array, 数组具有index=0、1、2、3

       2、匿名数组

        int[]   int_array=new int[]  {1,2,3 ,4,5}; // 后面的int[] {1,2,3,4,5}为匿名数组

      这里我们通过匿名数组来初始化数组数组,注意这里的初始化与C语言中的初始化意义相同

      3、数组复制

      Java提供了一个数组复制的机制,利用Arrays类的copyOf()方法可以实现数组的复制。

      还可以利用System.arraycopy方法来进行数组的截取复制。其语法格式是:System.arraycopy(from,index_start,to,copy_length);

      这两个方法主要的作用是用来增加数组的长度。具体应用我们就不举例子了。

            

    【Java if语句】

      IF语句的使用频率非常之高,因此这里我们介绍一下IF语句;如果你接触过C/C++的话,那么Java的IF语句的使用将会是非常简单的,在Java中

    IF语句和C/C++中一样。其语法格式如下所示:

      Style 1:  

             if(boolen condition) statement; other statement; // 如果if语句括弧中的判断条件为真,则执行statement;否则就执行other statement。

         Style 2:

        if(boolean condition)

            IF_statement;

            else

               Else_statement;

            Other_statement;

      如果boolean condition为True,那么就执行IF_statement语句(可以为语句块),然后执行Other_statement; 如果boolean condition为False,那么就

    执行Else_statmetn(可以为语句块),然后执行Other_statement。

      Style 3:嵌套IF语句

      嵌套IF语句遵循上面两条规则,同时Else部分将于最近的IF部分匹配。如下:

      if (boolean condition 1)

         if(boolean condtion 2)

        statement;

         else

              statement;

         如上所示,else子句就与boolean condition 2的if子句匹配,构成一个内部嵌套IF子句;为了程序代码的可读性,建议每个IF语句中

    加上{}构成语句块,这样能更好的区别IF、ELSE的匹配情况,如下:

        if (boolean condition 1)

          {

         if(boolean condtion 2)

        statement;

         else

              statement;

           }  //End of  boolean  condition 1 IF 

    【Java While循环语句】

      Java中while循环语句与C/C++语言中while语句也非常相似;这里就不多说了。

      Java中还提供了一个do....while循环,do...while循环的循环体,必须至少执行一次。

      注: 有些书籍将while循环叫做“当型”循环,即当条件不为真时结束循环;而将do..while循环叫做“直到型”循环,直到条件不成立时结束循环。

    【Java For循环语句】

      Java的循环For循环,通常用于循环次数确定的循环(当然,循环次数不确定的也可以用);Java中For循环和C/C++的结构类似,这里也不介绍了;

    值得说明的是:

      可以再for循环语句中定义for语句中可用的变量,这些变量只是在for语句中可见;当在for语句中定义的变量与for语句外的变量重名时,那么就会出现

    符号重定义的错误,如下所示:

    /*
    This program test the control flow chart
    */
    
    import java.util.*;
    
    public class Cfc
    {
      public static void main(String[] args)
      {
        //数组测试
            int[]   array_int;
            array_int=new int[10];
           
        //定义i变量,看是否会影响for语句中i变量
        int   i;
            i=100;
            
    
            Scanner GetData=new Scanner(System.in);
    
        //提示用户输入数据:
            System.out.println("Enter 10 numbers:"+~0x7FFF+"<="+" number "+"<="+0x7FFF);
    
            for(int i=0;i<array_int.length;i++)
        {
             array_int[i]=GetData.nextInt();
        }  

      这是与C/C++中,小作用域变量屏蔽大作用域变量的机制不一样的地方,需要注意。

      在For语句和while语句中还有一点必须注意:就是必须保证for循环体中的每一条语句都有机会执行到,否则就会报错,这在很多C/C++程序中也是

    经常会出现的。

     1 public class Break
     2 {
     3    public static void main(String args[])
     4    {
     5     int int_var=10;
     6 
     7         for(;int_var>1;)
     8         {
     9       break;
    10       System.out.println("Can you see this statement!!!");
    11     }
    12 
    13         System.out.println("Break statement hava interupt the if statemtn");
    14    }
    15 }

      上面的代码编译的结果如下:

     【Java  枚举类型】

      为啥在这个地方说枚举类型呢? 因为接下来要说switch语句,可以看到switch语句和枚举类型具有“天然”的联系。

      Java中也提供了枚举类型,这种类型在处理一些问题的时候,非常方便。例如: 月份、星期、商城果品种类等。在Java中定义枚举类型也非常的容易;

    其语法格式如下所示:

      enum  Week {Mon、Thu、Wend、Ths、Fri、Sat、Sun};

       这样就定义了一个Week的枚举类型(在这里我们不分别声明和定义,不拘束于C/C++中声明与定义的差异),我们可以利用它来定义变量:

      Week  Vication;

      Vication=Week.Mon ;  //这里需要注意,赋初值的时候,需要指定枚举的类型。但也写特殊的情况不需要指定枚举类型。这里我们就不多说了。下面是我

    通过度娘搜索的一个链接:http://www.cnblogs.com/Fskjb/archive/2009/08/03/1537917.html  里面有关于枚举类型的详细的介绍。

      要点:

        枚举类型变量可以赋值为null,表示枚举类型变量没有初始化;注意的是null并不表示枚举变量没有指向确定的内存,定义枚举变量后就已经分配内存了,这

    与C语言中null不一样。

    【Java switch语句】

      swith语句适用于知道选择项目集合的情况,例如我们到商城买衣服,里面有不同的品牌,我们通过enum定义一个衣服类别的类型,然后我么就可以

    根据用户的选择来判断价钱、折扣等信息。

      Java中switch语句和C/C++中的机制一样,这里不多说。具体可以参考上面的链接。

      需要说明的一点是:如果在Java中结合使用enum和swith语句,那么在swith语句的case 子句部分不需要指定枚举的类型信息,如:

      Week  workday=Week.Sun;

      switch(workday)

         {

      case  Mon:

          statement;

              break;

         case  Week.Thu:

         statement;

                 break;

          .......

         }

      可以看到,这时在case子句中不需要指定枚举类型名Week,当然也可以指定,如上实例所示。

          要点:

        1、break, 在每个Case子句后一般需要加上break语句;当然这不是必须的,我们可以选择几个case子句执行一个语句(语句块)。

        2、default  在switch语句中可以用default子句,这个与C语言一样。具体不多说。

    【Java  break和continue语句】

      break语句用来中断正常的控制流程,它一般用来跳出循环和switch语句。

    例如:

    /*
    This program test break statement
    */
    
    public class Break
    {
       public static void main(String args[])
       {
        int int_var=10;
        
        //can execute forever ??
            for(;int_var>1;) 
            {
          System.out.println("Can you see this statement how many times???");
              break;
        }
    
            System.out.println("Break statement hava interupt the if statement");
       }
    }

      执行结果如下:

      那么下面的程序能执行多少次呢?

     1 /*
     2 This program test break statement
     3 */
     4 
     5 public class Break
     6 {
     7    public static void main(String args[])
     8    {
     9     int int_var=4;
    10  
    12     for(;int_var>1;int_var--) 
    13        for(int i=0;i<5;i++)
    14           {
    15             System.out.println("How many times can you see this statement ???");
    16             break;
    17           }
    18 
    19         System.out.println("Break statement hava interupt the if statement!!!");
    20    }
    21 }

      这个谜题大家自己怎么看? 这里我就不说出结果了,有兴趣的可以自己试试,当然在测试之前你可以说一下for循环体重的语句究竟会输出几行??。

      有时候,在嵌套循环中,为了跳出整个大循环,就是跳出来执行循环后面的语句,我们应该怎么办呢?  在Java中提供了另外一种机制:break label机制。我们

    对上面的代码稍微做一点改变,看结果又会是怎样:

    /*
    This program test break statement
    */
    
    public class Break
    {
       public static void main(String args[])
       {
        int int_var=3;
        
        //测试break label机制:
            break_label:
            for(;int_var>1;int_var--) 
           for(int i=0;i<5;i++)
              {
                System.out.println("How many times can you see this statement ???");
                break break_label;
              }
             
          
            System.out.println("Break statement hava interupt the if statement!!!");
       }
    }

      这段代码执行后又是什么结果呢?我们就卖关子了:

      看到没,for循环体的语句仅执行了一次。

      要点:

             break语句跳出循环体包含的循环,而break label语句可以跳出break label标志的循环。即break与最”近“的循环体匹配,而break label则与

    break label所标志的循环匹配。

      continue语句与C语言中的机制一样,就是会中断本次循环体的执行过程,而不会跳出本循环。我们可以通过下面的程序比较break和continue的差别:

     1 /*
     2 This program test break statement
     3 */
     4 
     5 public class Break
     6 {
     7    public static void main(String args[])
     8    {
     9     int int_var=4;
    10     
    11      
    12         for(;int_var>1;int_var--) 
    13        for(int i=0;i<5;i++)
    14            {
    15             if(i==1)
    16         continue;    
    17            
    18         System.out.println("How many times can you see this statement ???");
    19             
    20        }
    21          
    22 
    23         System.out.println("Break statement hava interupt the if statement!!!");
    24    }
    25 }

      上面的程序执行结果:

      我们在看下一段代码:

      我们看到了,continue并不能跳出循环体,而break可以跳出循环体。  

      这次小结,主要的是对Java的结构化编程的控制流程进行大致的描述,后面还会进一步进行讨论。

      因为我感觉写这些东西都是自己学习的过程的小结,自己以前接触过C/C++;因此有些时候写的内容会有点穿插。但是这样的穿插可能不适合

    完全没有基础过计算机编程的人员。

      

  • 相关阅读:
    HDU1058Humble Numbers(DP)
    HDU1285确定比赛名次(拓扑排序)
    HDU2602Bone Collector(DP,0/1背包)
    HDU1869六度分离(最短路floyd)
    HDU3342Legal or Not(拓扑)
    Dijkstra不能得到含有负权边图的单源最短路径
    HDU1069Monkey and Banana(DP)
    HDU1176免费馅饼(DP)
    DAG上的动态规划
    网络分析中数据包结构的定义
  • 原文地址:https://www.cnblogs.com/volcanol/p/2838641.html
Copyright © 2011-2022 走看看