【Java】_2_Java程序入门第四课

时间:2022-09-28 20:04:09

  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个数值,然后将数组打印出来。执行如下所示:

【Java】_2_Java程序入门第四课

  从这里我们可以看到我们可以通过数组的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】_2_Java程序入门第四课

 

  在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();
    }  

【Java】_2_Java程序入门第四课

  这是与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】_2_Java程序入门第四课

 【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");
   }
}

  执行结果如下:

【Java】_2_Java程序入门第四课

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

 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!!!");
   }
}

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

【Java】_2_Java程序入门第四课

  看到没,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 }

  上面的程序执行结果:

【Java】_2_Java程序入门第四课

  我们在看下一段代码:

【Java】_2_Java程序入门第四课

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

 

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

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

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