黑马程序员_语句 函数 数组

------- android培训、java培训、期待与您交流! ----------

 

判断结构:

判断语句:

格式一

If(条件表达式)

{

执行语句;

}

格式二

If(条件表达式)

{

执行语句;

}

else

{

执行语句;

}

If格式二:多了一个else语句块。如果...否则...意味着,这两个语句块肯定有一个执行。

三元运算符:就是if  else 语句的简写格式。

只有当if  else语句执行完有具体结果时,才可以简写成三元运算符的形式。因为三元运算符是一个运算符,只要是运算符运算完必须有结果。

 

If只有单条语句的时候可以省略大括号

单条语句:一个完整的整体才是一条单条语句。

格式三

if(条件表达式)

{

执行语句;

}

else if(条件表达式)

{

执行语句;

}

... ...

else

{

执行语句;

}

特点:

1.虽然有多行,但是是单条语句。

2.虽然有多个代码块组成,但是只有一个会执行。

3.对语句进行多次判断。

选择语句:

switch(表达式)             表达式只接收四种类型的值 byte short int char

{

case  取值1:                 case的书写是没有顺序的,从具体答案先执行,最后

执行语句;              执行default。

 

break;

case 取值2:

执行语句;

break;

default:

执行语句;

}

结束switch语句有两种情况:遇到break或执行到switch语句大括号结束。

如果匹配的case或default没有break,那么程序会一直执行到结束。

当值不多,且符合byte short int char,用switch较高效

当结果为boolean型或区间的情况用if

例如:

public class SwitchDemo{
 public static void main(String[] args) {
  int x=3;
  switch (x)
  {
  default:
   System.out.println(3);   
  case 1:
   System.out.println(4);
   break;
  case 2:
   System.out.println(5);
  }
  }
}

运行结果:3   4

循环结构:

代表语句:while  do while  for

While语句格式:

While(条件表达式)

{

执行语句;

}

Do while语句格式

Do

{

执行语句;

}

While(条件表达式);

While条件不满足,循环体不会执行。

Do while无论条件是否满足,循环体至少执行一次。

循环结构的使用:

当某些语句需要执行很多次,这时就必须要想到循环结构

For循环结构

格式:

For(初始化表达式;循环条件表达式;循环后的操作表达式)

{

执行语句;(循环体);

}

For循环和while循环的区别:

变量除了需要定义才能使用外还有一个作用域的问题,如for循环语句,变量x在循环语句中有效,循环结束则消失。

While循环结束,变量仍存在。

For(int  x = 1,y = 1;x<3;x++,y++)

For循环可以定义多个变量,和多个循环后的表达式。

For( ; ;)//for语句的最简单的无限循环模式。条件表达式不写,默认情况下为ture

While(ture)//while语句的最简单无限循环格式。

练习

1         获取1到10的和,并打印。(累加思想)

class Demo

{

   public static void main(String[] args)

   {   

     int sum =0;

     for(int x=1;x<=10;x++)

     {

        sum = sum + x;        

     }

     System.out.println("sum="+sum);

//一定要明确哪些需要循环,哪些不需要

   }

}

2  获取1~100之间7的倍数的个数,并打印(计数器思想)

class Demo

{

   public static void main(String[] args)

   { 

     int count = 0;

     for(int x = 1;x<=100;x++)

     {

        if (x%7==0)

          /*=和==的区别:一个等号是赋值号,两个等号是判断号。赋值表示把右边的值或引用赋给左边的变量,判断号表示返回符号两边的值是否相等,这里的值包括引用。*/

          count++;      

     }

     System.out.println("count="+count);  

   }

}

3000米长绳子,每天减一半。需要多少天绳子小于五米?

class Demo

{

   public static void main(String[] args)

   {

     int count = 0;

     for(int x = 3000;x>=5;x=x/2)

     {

        count++;

     }

     System.out.println("count="+count);

 

   }

}

For循环的嵌套循环

利用循环嵌套输出各种图形: 

1.需求:输出下列图形(尖朝下)

*****
****
***
**
*

class Demo

{

   public static void main(String[] args)

   {

     for (int x=0 ;x<5 ;x++ )

     {

        for (int y =x;y<5 ;y++ )

        {

          System.out.print("*");

        }

        System.out.println();

     }   

   }

}
 2.需求:打印出下列图形(尖朝上)
 1
 12
 123
 1234
 12345

class Demo

{

   public static void main(String[] args)

   {

     for (int x=1;x<=5;x++ )

     {

        for (int y=1;y<=x ;y++ )

        {

          System.out.print(y);

        }   

        System.out.println();

     }   

   }

}3.需求:打印出九九乘法表(尖朝上)

思路:观察乘法表,发现*两边的数有规律,正符合循环嵌套,并且定义好循环变量的值。

public class ChengFaBiao {
public static void main(String[] args) {
 for(int x=1;x<=9;x++)
 {
  for(int y=1;y<=x;y++)
  {
   System.out.print(y+"*"+x+"="+y*x+"\t");  

 //加上\t是制表位,目的是让打印出来的数据较为整齐
  }
  System.out.println();
 }
}
}

打印结果:

1*1=1 
1*2=2   2*2=4 
1*3=3   2*3=6   3*3=9 
1*4=4   2*4=8   3*4=12   4*4=16 
1*5=5   2*5=10 3*5=15   4*5=20 5*5=25 

..................

1.尖朝上,要让内层的循环条件随着外层循环变化。

2.尖朝下,要让内层的初始化值随着外层循环变化

break和continue

1.作用范围

break作用在switch和循环结构内

continue只作用在循环结构内

标号只能用于循环上,给循环起名字的一种方式,可以让这两个语句作用于指定的范围。

2.意义

break指跳出其所在的循环

continue指跳出本次循环继续执行下次循环

3.break和continue单独存在时下面不可以有语句,因为都执行不到。

For(int x =0;x<3;x++)

{

   System.out.println(“*”)

   break;//x=0,打印一次*,break跳出当前循环,循环结束

}

标号使用

class Demo

{

   public static void main(String[] args)

   {

     w:for (int x = 0;x<3; x++)

     {

        p:for (int y = 0;y<4; y++)

        {

          System.out.println("x="+x);

          break w;

        }

     } 

  

   }

}

求100~500之间所有不能被3、5、7、11和13同时整除的整数的和。class Demo

{

public static void main(String[] args)

{

  int sum =0;

  for (int x = 100;x<=500; x++)

  {

   if (x%3==0&x%5==0&x%7==0&x%11==0&x%13==0)

  

      continue;

 

    sum = x+sum;

   }   

 

  System.out.println("sum="+sum);

}

}

需求:打印图形
   *
  * *
 * * *
* * * *

分析:可以将其看成是两个图形的组合,补的都是空格,

一个for循环里,嵌入两个for

class Demo

{

   public static void main(String[] args)

   {

     for (int x =0;x<5 ;x++ )

     {

        for (int y =x;y<5 ;y++ )

        {

          System.out.print(" ");

        }

        for (int z =0;z<x ;z++ )

        {

          System.out.print("* ");

        }      

        System.out.println();

     }

   }

}

函数
一.函数的定义

函数就是定义在类中的具有特定功能的一段独立小程序。也称为方法。

函数的格式:
修饰符返回值类型函数名(参数类型形式参数1,参数类型形式参数2,)
{
执行语句;
return 返回值;
}
函数的特点:
1定义函数可以将功能代码进行封装
2便于对该功能进行复用
3函数只有被调用才会被执行
4函数的出现提高了代码的复用性
5对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后 一行可以省略不写。

注意:
1函数中只能调用函数,不可以在函数内部定义函数。
2定义函数时,函数的结果应该返回给调用者,交由调用者处理。

两个明确
1明确要定义的功能最后的结果是什么?
2明确在定义该功能的过程中,是否需要未知内容参与运算

函数的重载(overload)

什么时候用重载?

当定义的功能相同时,但参与运算的未知内容不同,此时就定义一个函数名称表示其功能,

方便阅读,而通过参数列表的不同来区分不同函数。

 重载的特点:与返回值类型无关,只看参数列表,参数列表是有顺序之分的。
    重载的好处:方便阅读,优化了程序设计

定义一个功能,用于打印矩形

class Demo

{

        public static void main(String[] args)

     {

          getJu(3,4);       

        }

     public static void getJu(int row,int col)

     {

     for (int x =0;x<row ;x++ )

     {

       for (int y =0;y<col ;y++ )

       {

          System.out.print("*");

       }

       System.out.println();

     }

     }

}

定义一个打印九九乘法表的功能。

class Demo

{

        public static void main(String[] args)

     {

          get99(7);       

        }

     public static void get99(int num)

     {

     for (int x =1;x<=num ;x++ )

     {

       for (int y =1;y<=x ;y++ )

       {

          System.out.print(x+"*"+y+"="+x*y+"\t");

       }

       System.out.println();

     }

     }

}

 

 

数组

数组的定义

同一种类型数据的集合。其实数组就是一个容器。
优点:可以自动给数组中的元素从0开始编号,方便操作这些元素。

 格式1:
元素类型[] 数组名 = new 元素类型[元素个数或数组长度];
如:int[] arr=new int[5];
格式2:
元素类型[] 数组名 = new 元素类型[]{元素,元素,元素。。。};
如:int[] arr=new int[]{2,4,2,6,21};
int[] arr={2,4,2,6,21};

数组内存结构:java程序在运行时,需要在内存中分配空间。为了提高运算效率,对空间进行了不同区域的划分,因为每一片区域都有特定的处理数据方式和内存管理方式。栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。堆内存:数组和对象,通过new建立的实例都存放在堆内存中;每一个实体都有内存地址值;实体中的变量都有默认初始化值;实体不在被使用,会在不确定的时间内被垃圾回收器回收。

数组常见的两种错误

1.ArryIndexOutOfBoundsException:说明的角标超过了数组的长度。

2.NullPointerException:说明没有任何引用指向数组,不能对数组进行操作。

以上两种错误,编译都能通过,运行时产生错误。

数组名.length,就可获取数组的长度值。

二维数组

二维数组[][]:数组中又定义了数组。

格式1:int[][] arr = new int[3][2];定义了名为arr的二维数组,二维数组中有三个一位数组,每一个一位数组中有两个元素,一维数组的名称分别为arr[0], arr[1], arr[2]。

格式2:int[][] arr = new int[3][];二维数组中有3个一维数组,每个一维数组都是默认初始化值null。

格式3:int[][] arr = {{3,8,2},{2,7},{9,0,1,6}}; 定义一个名称为arr的二维组,二维数组中的有三个一维数组,每一个一维数组中具体元素也都已初始化。

求数组的最值

class Demo

{

        public static void main(String[] args)

           {

                 int[] arr = {3,18,2,4,7};

                 getMax(arr);       

        }

           public static void getMax(int[] arr)

           {

                 int max = arr[0];

                 for (int x =0;x<arr.length ;x++ )

                 {

                      if(max<arr[x])

                      {

                      max=arr[x];

                      }

                 }

          

                 System.out.println(max);

          

           }

}

选择排序

class Demo

{

      public static void main(String[] args)

      {

           int[] arr =new int[]{2,5,4,7,9,1};

                 printArray(arr);

                 selectSort(arr);

                 printArray(arr);

                

      }

      public static void selectSort(int[] arr)

      {

           for (int x =0;x<arr.length-1 ;x++ )

           {

                 for (int y =x+1;y<arr.length ;y++ )

                 {

                      if (arr[x]>arr[y])

                      {

                            int temp =arr[x];

                            arr[x]=arr[y];

                            arr[y]=temp;

                      }

                 }

           }

      }

      public static void printArray(int[] arr)

      {

           System.out.print("[");

           for (int x =0;x<arr.length ;x++ )

           {

                 if (x!=arr.length-1)

                 {

                      System.out.print(arr[x]+",");

                 }

                 else

                      System.out.println(arr[x]+"]");

           }

      }

}

冒泡排序

class Demo

{

      public static void main(String[] args)

      {

           int[] arr =new int[]{2,5,4,7,9,1};

                 printArray(arr);

                 bubbleSort(arr);

                 printArray(arr);           

      }

      public static void printArray(int[] arr)

      {

           System.out.print("[");

           for (int x =0;x<arr.length ;x++ )

           {

                 if (x!=arr.length-1)

                 {

                      System.out.print(arr[x]+",");

                 }

                 else

                      System.out.println(arr[x]+"]");

           }

      }

      public static void bubbleSort(int[] arr)

      {

           for (int x =0;x<arr.length-1 ;x++ )

           {

                 for (int y =0;y<arr.length-x-1 ;y++)

                 {

                      if(arr[y]<arr[y+1])

                      {

                            int temp =arr[y];

                            arr[y]=arr[y+1];

                            arr[y+1]=temp;

                      }

                 }

           }

      }

}

总结选择排序与冒泡排序

一个是拿一个元素与其它所有元素比较,外循环与内循环比较换位。

一个是相邻两个元素比较,外循环控制次数,内循环为两个元素比较再。换位

位置转换功能抽取

public static void bubbleSort(int[] arr)

      {

           for (int x =0;x<arr.length-1 ;x++ )

           {

                 for (int y =0;y<arr.length-x-1 ;y++)

                 {

                      swap(arr,y,y+1);

                 }

           }

      }

      public static void swap(int[] arr,int a,int b)

      {

           int temp= arr[a];

           arr[a]=arr[b];

           arr[b]=temp;

      }

}

数组的查找操作

class Demo

{

     public static void main(String[] args)

     {

          int[] arr =new int[]{2,5,4,7,9,1};

          int index=getIndex(arr,4);

          System.out.println("index="+index);

                                

     }

     public static int getIndex(int[] arr,int key)

     {

          for (int x =0;x<arr.length ;x++ )

          {

                if (arr[x]==key)

                {

                      return x;

                }

          }         

                      return -1;

     }

    

}

折半查找

public class ZheBan

{

public static void main(String[] args)

{

int[] arr={1,5,7,9};

int index=chaZhao(arr,8);

System.out.println("index="+index);

 

}

public static int chaZhao(int[] arr,int key)

{

//这些都是角标值

int min=0;

int max=arr.length-1;

int mid=(min+max)/2;

//进行while循环判断

while(key!=arr[mid])

{

if(key>arr[mid])

min=mid+1;

else if(key<arr[mid])

max=mid-1;

if(min>max)

return mid; //插入。 如果不存在可以返回-1.

mid=(min+max)/2;

}

return mid;

 

}

 

}

另一种方法

与第一种方式区别在于控制循环的条件变了。

public class ZheBan2 {
public static void main(String[] args) {
int[] arr={1,5,7,9};
int index=chaZhao(arr,7);
System.out.println("index="+index);

}
public static int chaZhao(int[] arr,int key)
{
int min=0,max=arr.length,mid;
while(min<=max)
{
mid=(min+max)/2;
if(key>arr[mid])
min=mid+1;
else if(key<arr[mid])
max=mid-1;
else
return mid;

}
return -1;
}

}

练习:在有序数组中插入一个数,保证数组任然有序。

方法:

1.如果数组中有要插入的这个数,那么通过折半查找,找出这个数的位置就是要插入的位置。

2.如果数组中没有要插入的这个数,则返回折半操作后的最小角标值(min)就是要插入的位置。

class Demo

{

     public static void main(String[] args)

     {

          int[] arr={1,5,7,9};

          int index = getIndex(arr,8);

          System.out.println("index="+index);

     }

     public static int getIndex(int[] arr,int key)

          {

                int max=arr.length-1,min=0,mid=(max+min)/2;

                      while(min<=max)

                      {

                           if (key>arr[mid])

                                 min=mid+1;

                           else if (key<arr[mid])

                                 max=mid-1;

                           else

                                 return mid;

                           mid=(min+max)/2;

                      }              

                return min;

          }

}

总结:

无序数组排序:选择排序与冒泡排序

有序数组查找角标值:遍历查找,折半查找

十进制转二进制

class Demo

{

     public static void main(String[] args)

     {

          toBin(6);

     }

     public static void toBin(int num)

     {

          StringBuffer sb = new StringBuffer();//创建对象,用于存储数据

          while (num>0)

          {

                sb.append(num%2);//append意为添加

                //System.out.println(num%2);

                num=num/2;               

          }

          System.out.println(sb.reverse());//reverse意为反转数据

     }

}

十进制转十六进制

class Demo

{

     public static void main(String[] args)

     {

          toHex(60);

     }

     public static void toHex(int num)

     {

          for (int x =0;x<8 ;x++ )

          {

                int temp=num&15;

                if (temp>9)

                {

                      System.out.println((char)(temp-10+'A'));

                }

                      else

                      System.out.println(temp);

                      num=num>>>4;

 

          }

     }

}

class Demo

{

     public static void main(String[] args)

     {

          toHex(60);

     }

     public static void toHex(int num)

     {

          StringBuffer sb = new StringBuffer();//创建对象,用于存储数据

          for (int x =0;x<8 ;x++ )

          {

                int temp=num&15;

                if (temp>9)

                {

                      sb.append((char)(temp-10+'A'));//强制转换类型

                }

                else

                      sb.append(temp);

                num=num>>>4;

 

          }

 

          System.out.println(sb.reverse());//reverse意为反转数据

     }

}

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值