黑马程序员:基础学习<二>

来源:互联网 发布:日本好吃的零食 知乎 编辑:程序博客网 时间:2024/05/21 03:27

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

if语句
(1)if语句第一种格式
if(条件表达式)
{
执行语句;
}
A:无论条件表达式是简单还是复杂,结果是一个boolean类型的数据
          如果条件表达式结果不是boolean类型的,那么就报错
B:当条件表达式的结果为true,就执行if所控制的语句。
          否则,就不执行
注意的问题:
C:大括号可以不写吗?
  可以。但是是有条件的。如果if控制的只是单条语句,可以不加大括号。
  如果if控制的是多条语句,那么必须加大括号。
  建议:都加上大括号。
D:不要再if(条件表达式)加分号
(2)if语句第二种格式
if(条件表达式)
{
执行语句1;
}
else 
{
执行语句2;
}
A:比第一种多了else,否则,如果,那么的意思
B:如果条件表达式为true,执行语句1;否则,执行语句2
C:发现if语句和条件(三元)运算符有些相似。那么有没有区别呢?
**条件运算符是if语句的简写格式。
**条件运算符都可以用if语句改写。反之,不行。
**如果这个if语句是有赋值操作的,那么建议使用条件运算符改写。
(3)if语句第三种格式
if(条件表达式)
{
执行语句;
}
else if (条件表达式)
{
执行语句;
}
……
else
{
执行语句;
}
A:最后一个else可以省略吗?
  可以?但是一般建议写上。
**else是第三种if语句的组成部分,为了避免出现编译问题,建议加上
**我们不可能把所有的判断情况都想的特别清楚,所有建议加上
B:其实这个语句是一个整体,它是一条语句。当其中的某一种情况满足,
  那么执行语句并结束语句。
       C:else后面有if的时候,一定要有条件表达式。单独else的时候,不能有条件表达式
D:什么情况下用哪种if语句
**if的第一种格式只做一种判断
**if的第二种格式只做二种判断
**if的第三种格式只做多种判断
(4)if语句嵌套
A:if语句里面的执行语句是if语句。
(5)if语句的应用
A:给出一个数字1-7之间的,请输出对应的星期几?
B:需求如下:
一年有4季,每季有三个月
春 3,4,5
夏 6,7,8
秋 9,10,11
冬 12,1,2
请输入月份,打印季节。
(6)if语句的应用场景
A:判断几个值的时候。
B:对结果是布尔类型的表达式进行判断的时候。
C:对范围进行判断。

注意事项:

  Switch(表达示)必须和常量的数值 

保持一致

Switch表达示接收,byte short int char;

JDK6 :byte short int char

JDK7 :byte short int char String

在进行选 择语句switch时当case 中没有出现在break的时候 

程序会一直运行到遇到break才会停下来。

Switch和if的区别?

  对于几个值的判断,可以用

对于区间的判断,可以用

对于运算结果是boolean类型,也可以用

对于几个固定的值进行判断,可以使用if也可以使有Switch,建议使用 switch,因为效率稍高

在JDK7.0版本时,switch可以对字符串进行选择

在JDK5.0版本时,switch 可以对新的数据类型enum进行选 择

If和switch在接收的数据类型不一样 。

If对于范围的判断比较好用

If 可以使用引用数据类型。

Switch最好使用在比较简单数据的判断。

循行语句

,变量有自己的作用域。

对于for来讲:如果将用于控制循环的增量定义在for语句中。那么该变量 只在for语句内有效。        

for语句执行完毕。该变量在内存中被释放。        

2,for和while可以进行互换。

如果需要定义循环增量。用for更为合适。

                

什么时候使用循环结构?        

当要对某些语句执行很多次时,就使用循环结构。

While(条件表达示)

{

   //执行语句,

   //迭代

}

条件的运算结果是true,重复执行这个在括号之间的程序 

 

Do

{

  //执行语句 条件的运算结果是true,重复执行这个在括号之间的程序 

  //迭代

}while(条件表达示);

 特点: 不管条件判断语句是否成立都 会运行一次

For(初始化值;条件表达示;迭代)

{

//执行语句

//只要变量符合条件,就会一直重复for 的大括号中的程序

}

双重循环

   For()

{

For()

{

}

}

总循环的次数=外圈次数*内圈次数

语句的总结:

   什么情况,使用哪个语句

  1、当对某几个值进行判断的时候 ,可以使用IF语句,或者switch语句建议

Switch

但是,使用switch要注意,它只能操作四种类型的值:byte short int  char

如果是四种类型以外的值,需要使用if

2、如果对数据区间进行判断,或者对运算结果是boolean类型的进行凑数

使用if语句

3、当需要某些语句执行很多次的时候,使用循环结构

如果定义变量只为循环增量存在时,可以使用for语句

如果对一个条件进行判断使用if,如果对该条件进行多次判断,使用 while

4、如果要结束循环,可以控制循环条件,或者通过break语句完成

如果要控制循环的流程,是否继续执行,可以通过continue或者break 来完成

Break 和continue关键字

  Break(终止循环):只能用在switch 语句和循环语句中。用于跳出,或成为 结束 。

Java中不允许写费话。

Break;语句单独存在时,下面不能写语句

Continue: 只能用在循环中。 (终止本次循环,开始下次循环)

Continue:单独存在时,下面不可以定义其他语句。因为执行不到

Continue:结束本次循环,继续下次循环

While for 在什么时候 使用合适??

  选择的循环的时候,需要根据循环的次数来选择

   知道次数的,可以选 用for 

   不知道循环次数的时候 可以选择while.

在双循环中如果想跳出外循环时,可以使用标记(标记名:)例如:w:

转义字符:通过\ 来转变后面字母或者符号的含义。       

\n:换行。       

\b:退格。相当于backspace。        

\r:按下回车键。window系统,回车符是由两个字符来表示\r\n.        

\t:制表符。相当于tab键。

第四天课程 

函数

   定义:函数就是定义在类中的具有特定功能的一段独立小程序

用于将代码进行封装。提高了代码的复用性

 记住,要定义功能时,就用函数来体现

函数只有被调用才执行

函数中可以调用其它函数,但是不能定义函数

定义格式:

   修饰符 返回值类型 函数名(参数列表.......)

{

 函数中执行的代码

可以有循环

判断

运算

Return;

}

修饰符: public static 

  返回值类型:这个函数计算数据,计算后得到的结果的数据类型

函数名: 标识符,自定义的。 规范:函数名首字母小写,后面的 第一个单词首字母大写

Return 就是将计算后的结果进行返回,从哪来的回哪里去。

如何实现一个功能,用函数体现呢?

 1、明确该功能的运算结果

其实就是在明确函数的返回值类型

2、明确该 功能实现过程 中是否需要未知内容参与运算

其实就是在明确函数的参数列表

定义函数,使用函数中的注意事项!

1.   函数是根据实际的功能需要而定义出来

2.一个函数不能定义在另一个函数中

3.调用函数的时候 ,你传递的实际参数,要和函数中的形式参数保持一致。 ( 包 括:顺序、个数、数据类型)

4.函数上定义的返回值类型,必须和return中返回的类型一致

5.当函数有返回值的时候,调用者可以使用sop进行打印

6.当函数没有返回值得时候,不能使用sop进行打印

 重载:

概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数 个数或参数类型用顺序不同即可。

特点:与返回值类型无关,只看参数列表(参数类型以及参数个数)

好处; 方便于阅读,优化了程序设计。

什么时候用重载?

当实现某些功能时,发现功能的主体是一致的,但是功能的实现细节有所区别,这个时候我们就可以考虑使用重载的特性

  当定义的功能相同,但参与运算的未知内容不同

那么,这时就定义一个函数名称以表示起功能,方便阅读,而通过参数

列表的不同来区分多个同名函数

例: 

   Public static int function(){}

Public static void function(int x){}

数组
(1)同一种类型数据的集合。其实数组就是一个容器。
A:只要是容器,就得重点掌握。
(2)数组的好处
A:可以自动给数组中的元素从0开始编号,方便操作这些元素。
(3)数组的定义格式
A:当不明确数组中的元素时
**举例 int[] arr = new int[3];
B:当明确数组中的元素时
**举例 int[] arr = new int[]{1,2,3,4,5};
(4)什么时候使用数组?
A:当要操作的数据是多个的时候,你就得想着先把这些数据用数组进行存储。
(5)内存图
A:栈 
**存储的是局部变量(在函数中定义的变量)。
**变量被使用完后,立即自动释放。
B:堆 
**存储的是实体(数组和对象)。
**实体:new出来的东西,可以存放很多数据的东西。
***class定义一个类。
**堆内存数据的特点
***每个实体都有内存地址
***堆内存中的变量都有默认初始化值
****int --> 0
****double --> 0.0
****boolean --> false
****char --> '\u0000' 空字符,unicode编码。 
***当实体不在被使用的时候,会在jvm空闲的时候,
  通过java垃圾回收机制使其自动释放。
C:方法区 后面讲。
D:本地方法区 调用是Windows系统底层资源,我们也不用考虑。
E:寄存器 和CPU相关。我们不用考虑。
(6)操作数组最常见的问题
A:当你访问到数组中的最后一个元素时,还想继续访问,这个时候,会发生角标越界异常。
**ArrayIndexOutOfBoundsException
**举例 int[] arr = new int[3];
      System.out.println(arr[3]);
B:当数组不在指向某个实体时,你还继续访问,就会发生空指针异常。
**NullPointerException
**举例 int[] arr = new int[3];
      arr = null;
      System.out.println(arr[1]);
(7)常见的数组的操作
记住:对数组的操作,一定要从角标下手。
A:遍历操作 
**数组的属性:length 数组的长度。
**格式:数组名.length
public static void printArray(int[] arr)
{
System.out.print("[");
for(int i=0; i<arr.length; i++)
{
if(i!=arr.length-1)
{
System.out.print(arr[i]+",");
}
else
{
System.out.print(arr[i]);
}
}
System.out.print("]");
}
B:获取最值
**获取最大值
public static int getMax(int[] arr)
{
int max = arr[0];

//i从1开始,因为第一个数不用跟自己比
for(int i=1; i<arr.length; i++)
{
if(arr[i]>max)
{
max = arr[i];
}
}


return max;
}


**获取最小值
public static int getMin(int[] arr)
{
int min = arr[0];

//i从1开始,因为第一个数不用跟自己比
for(int i=1; i<arr.length; i++)
{
if(arr[i]<min)
{
min = arr[i];
}
}


return min;
}
C:排序
**选择排序
原理:如果拿0角标上的元素依次和后面的元素进行比较,
                     第一次内循环结束后,最小值出现在了0角标位置。

你就想想我们是如何打星星
****
***
**
*

public static void selectSort(int[] arr)
{
//i<arr.length-1 n个数两两比,n-1次就能获得最值。
for(int i=0; i<arr.length-1; i++)
{
//0角标元素没必要和自己比,所以j从1开始。
//发现j为了不重复比较,总是要比i大1,所以j从i+1开始
for(int j=i+1; j<arr.length; j++)
{
if(arr[j]<arr[i])
{
int temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
}
}
}


**冒泡排序
原理:两个相邻元素进行比较,第一次比较完以后,最大值出现在了最大角标处。


public static void bubbleSort(int[] arr)
{
//i<arr.length-1 n个数两两比,n-1次就能获得最值。
for(int i=0; i<arr.length-1; i++)
{
//为了防止角标越界,j<arr.length-1
//为了减少比较次数,j<arr.length-1-i
for(int j=0; j<arr.length-1-i; j++)
{
if(arr[j]>arr[j+1])
{
int temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
D:传递参数
**调用的时候,传递是基本类型的值的时候,形参改变对实参没有任何影响。
**调用的时候,传递是引用类型的地址值的时候,形参改变对实参有直接影响。

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

原创粉丝点击