黑马程序员—Java编程基础+常量与变量+类型的转换+进制的转换+运算符+scanner的使用+程序流程结构控制+循环结构

------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------


Java编程基础:

 

1.常量与变量?

  用来对超过16位有效位的数进行精确的运算。

    01.BigDecimal:

          Java在java.math包中提供的API类BigDecimal,用来对超过16位有效位的数进行精确的运算。双精度浮点型变量double可以处理16位有效数。

          在实际应用中,需要对更大或者更小的数进行运算和处理。float和double只能用来做科学计算或者是工程计算,在商业计算中要用java.math.BigDecimal。

          BigDecimal所创建的是对象,我们不能使用传统的+、-、*、/等算术运算符直接对其对象进行数学运算,而必须调用其相对应的方法。方法中的参数也必须是BigDecimal的对象。

           构造器是类的特殊方法,专门用来创建对象,特别是带有参数的对象。

    02.Java中常量的分类:

          a.整数常量:所有整数

          b.小数常量;所有小数

          c.布尔型常量:较为特有,只有两个数值。true false。

          d.字符常量。将一个数字字母或者符号用单引号( ' ' )标识。

          e.字符串常量。将一个或者多个字符用双引号标识。

          f.null常量。只有一个数值就是:null

 

       对于整数:java有三种表现形式。

               1.十进制:0-9,满10进1.

               2.八进制:0-7,满8进1.用0开头表示。

               3.十六进制:0-9, A-F,满16进1.用0x开头表示。

    03.变量

       变量的概念?

•内存中的一个存储区域

•该区域有自己的名称(变量名)和类型(数据类型)

•该区域的数据可以在同一类型范围内不断变化

 

       为什么要定义变量?

•用来不断的存放同一类型的常量,并可以重复使用

 

       什么时候定义变量?

         当数据不确定的时候,需要对数据进行存储时。就是定义一个变量来完成存储动作。

 

       使用时变量注意

•变量的作用范围(一对{}之间有效)

•初始化值

 

       定义变量的格式

•数据类型 变量名 = 初始化值;

         提示:变量就如同数学中的未知数。

 

       Java中数据类型:教学视频02-07

 

 

 

    04.数据类型(掌握)

(1)分类

基本类型:4类8种。

引用类型:类,接口,数组。(了解)

(2)基本类型

整型:

byte 1

short 2

int 4

long 8

浮点型:

float 4

double 8

字符型:

char 2

布尔型:

boolean 不明确。可以认为是1个字节。

注意:

整数默认是int类型。long类型需要加L或者l后缀。

浮点数默认是double类型。float类型需要加F或者f后缀。

2.类型转换

  1)自动类型提升

    byte b = 3;

    int x = 4;

    x = x + b;//b会自动提升为int类型进行运算。

boolean类型不参与转换。

隐式转换(从小到大)

byte,short,char -- int -- long -- float -- double

 

  2)强制类型转换

    byte b = 3; /此处正确,3是常量,直接赋给变量

    b = b + 4;//报错,b是变量,2为整数类型,b自动提升为整数类型,重新赋给b

                                                                 丢失精度。

    b = (byte)b+4;//强制类型转换,强制将b+4的结果转换为byte类型,再赋值给

                                                                        b。

 

  3)运算时的转换:

     byte b1=3,b2=4,b;

     b=b1+b2;//报错,虚拟机规定,int short boolean byte char在运算时都会转

                                                         为int,32bit整型。

     b=3+4;//常量赋值

 

 

3.进制的转换

 A.十进制二进制 互转

 •十进制转成二进制除以2取余数(从下到上取)

 •二进制转成十进制乘以2的幂数

 

 B.二进制转成十六进制

   四个二进制位就是一个十六进制位,因为1111=15,满十六进一位

 

 C.二进制转成八进制

  三个二进制代表一个八进制位

 

 D.十进制 八进制 互转

 E.十进制 十六进制 互转

 

 F.负数的二进制表现形式

  •对应的正数二进制取反加1;正数的最高位为0,负数取反,所以负数的最高位为1

   例如:-6的二进制

 

   一个INT类型的整数在内存中是占4个字节,32bit

 

4.运算符

 A.算数运算符

 

  b=a++ 等同于b=a=a+1;先赋值给b,然后自增1;

  b=++a 等同于b=a=a+1;先自增然后赋值给b;

  字符串数据和任何数据使用+都是相连接,最终变成字符串:

  System.out.print(5+5+5+5)      输出:5+555

 B.转义字符

  \n:换行符

  \t:制表符,相当于TAB键

  \r:相当于linux系统中按下回车键,,Windows系统中由 \r\n 组成

  \b:退格,相当于backspace

  \:双引号

 C.赋值运算符

  符号:

  = , +=, -=, *=, /=, %=;

  short a=3

  a=a+3//编译失败,丢失精度,是先做加法运算再进行赋值,两步计算

  因为a会被提升为INT类型,运算后的结果还是INT类型,无法赋值给short类型。

  a+=3//编译通过,复合赋值运算符实际上包含了强制转换,只有一步赋值运算,会做

                                                             自动转换动作。

  因为+=运算符在赋值时,自动完成了强转动作。

 D.比较运算符

 

   提示:比较运算符“==不能误写成“=

 

 E.逻辑运算符

 

   true & true = true;

                true & false = false;

                false & true = false;

                false & false = false;

                & : 只要两边的boolean表达式结果,有一个为false。那么结果就

                                                               是false。

                只有两边都为true,结果为true。

                

                true | true = true;

                true | false = true;

                false | true = true;

                false | false = false;

                | : 两边只要有一个为true,结果为true。

                        只有两边都有false,结果为false。

 

                ^ : 异或;就是和|有点不一样。当true ^ true = false;

                true ^ true = false;

                true ^ false = true;

                false ^ true = true;

                false ^ false = false;

                ^ : 两边相同结果是false。两边不同结果是true。

 

                &和&&的特点:

                &:无论左边是true是false。右边都运算。

                &&:当左边为false时,右边不运算。

 

                |:两边都参与运算。

                ||:当左边为true。右边不运算。

 

 

5.三元运算符:(条件表达式)?表达式1:表达式2;--是if else 结构的简写。

 •如果条件为true,运算后的结果是表达式1;

 •如果条件为false,运算后的结果是表达式2;

  好处:简化if else代码

  弊端:因为是运算符,所以运算完必须要有一个结果。

 

6.Scanner的使用(掌握)

(1)Scanner是JDK5以后设计的用来接收键盘录入数据使用的。

(2)目前我们要通过键盘录入int类型数据,必须按照如下步骤:

A:导包

import java.util.Scanner;

B:创建对象,封装键盘录入

Scanner sc = new Scanner(System.in);//System.in:是标准输入流。对应着键盘录入。

C:调用方法,获取数据

/*一年有12个月,每个月分别对应于不同的季节。
请根据给定的月份,输出对应的季节。
 
春:3,4,5
夏:6,7,8
秋:9,10,11
冬:1,2,12
并设计打印1-6为上半年,7-12为下半年
*/
 
import java.util.Scanner;
 
class YueFen
{
public static void main(String[] args) 
{
//封装键盘录入
Scanner s =new Scanner(System.in);
 
//提示键盘录入月份
System.out.println("请输入月份1-12; ");
int month = s.nextInt();
 
 
//判断结构
if (month == 1 || month == 2 || month == 12)
{
System.out.println( "冬季");
}
else if (month == 3 || month == 4 || month == 5)
{
System.out.println( "夏季");
}
else if (month == 6 || month == 7 || month == 8 )
{
System.out.println( "秋季");
}
else if (month == 9 || month == 10 || month == 11)
{
System.out.println( "春季");
}
//判断这个月份是上半年还是下半年
if(month>=1 && month<=6)
{
System.out.println("上半年");
}
else if(month>=7 && month<=12)
{
System.out.println("下半年");
}
}
}

int number = sc.nextInt();

例如:


 

7.程序流程结构控制

  判断结构:if ,   if…else …,    if…else if...else…

 

 

  选择结构:

  switch(表达式)

  {

        case  取值1:

        case  取值2:

        执行语句;

        break;

        case  取值3:

        执行语句;

        break;

        …

        Default:

        执行语句;

 

        Break;//可以省略

  }

  Switch特点:

        a.switch语句选择的类型只有四种:byte, short, int, char

        b.case之间与default在定义的时候没有顺序。先执行第一个case,没有匹配 的case执行default。

        c.结束switch语句的两种情况:遇到break,执行到switch语句结束。

        d.如果匹配的case或者default没有对应的break,那么程序会继续向下

          执行,运行可以执行的语句,直到遇到break或者switch结尾结束。

 

  if和switch语句很像,具体什么场景下,应用哪个语句呢?

* switch如果判断的具体数值不多,而是符合byte short int char这四种类型。

* 虽然两个语句都可以使用,建议使用swtich语句。因为效率稍高。

 

* 其他情况:对区间判断,对结果为boolean类型判断,使用if,if的使用范围更广。

 

  If else为什么比switch效率低

1.switch用来根据一个整型值进行多路分支,并且编译器可以对多路分支进行优化

2.switch-case只将表达式计算一次,然后将表达式的值与每个case的值比较,进而选择 

                                                   执行哪一个case的语句块。

3.if..else 的判断条件范围较广,每条语句基本上独立的,每次判断时都要条件加载
  一次;所以在多路分支时用switch比if..else if .. else结构要效率高。

 

 

首先要看一个问题,if 语句适用范围比较广,只要是 boolean 表达式都可以用 if 判断;而 switch 只能对基本类型进行数值比较。两者的可比性就仅限在两个基本类型比较的范围内。
说到基本类型的数值比较,那当然要有两个数。然后重点来了——
if 语句每一句都是独立的,看下面的语句:
if (a == 1) ...
else if (a == 2) ...
这样 a 要被读入寄存器两次,1 和 2 分别被读入寄存器一次。于是你是否发现其实 a 读两次是有点多余的,在你全部比较完之前只需要一次读入寄存器就行了,其余都是额外开销。但是 if 语句必须每次都把里面的两个数从内存拿出来读到寄存器,它不知道你其实比较的是同一个 a。
于是 switch case 就出来了,把上面的改成 switch case 版本:
switch (a) {
        case 0:
                break;
        case 1:
}

因为特定的规则,他一开始就知道你要比 a,于是 a 一次性读取,相比 if 节约了很  

                                                                  多开销。

 

 

 

 

 

8.循环结构:

 

1.While(条件表达式)

  {执行语句};

 

 

2.Do

  {执行语句}

  While(条件表达式);

 

While与do while的区别

       while:先判断条件,只有条件满足才执行循环体。

       do while: 先执行循环体,在判断条件,条件满足,再继续执行循环体。

简单一句话:do while:无论条件是否满足,循环体至少执行一次。

 

 

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

  {

   执行语句;

  }

  for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就  

  执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个

                                                 过程,直到条件不满足为止。

4.While与for区别:

       while与for可以互换,区别在于,用于控制循环的增量定义在for语句中,在   

       for循环结束就在内存中释放。而while循环使用的变量在循环结束后还可以继     

                                                                续使用。

 

5.最简单无限循环格式:

         while(true) , for(;;),无限循环存在的原因是并不知道循环多少次,而是

         根据某些条件,来控制循环。

 

 

6.计数器思想:通过一个变量记录住数据的状态变化。也是通过循环完成。

       break(跳出),continue(继续)

       break语句:应用范围:选择结构和循环结构。

       continue语句:应用于循环结构(结束本次循环,继续下一次循环)。

注意:break和continue单独存在时,下面可以有任何语句,因为都执行不到。

跳到指定位置:

A:

Break A;

提示:

a,这两个语句离开应用范围,存在是没有意义的。

b,这个两个语句单独存在下面都不可以有语句,因为执行不到。

c,continue语句是结束本次循环继续下次循环。

d,标号的出现,可以让这两个语句作用于指定的范围

 

 

7.嵌套循环:

 简单的说就是循环里面还有循环。 

 外循环执行一次,内循环执行一遍。 

 

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

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

 

while(条件表达式){ };while(条件表达式){ }

 

总结:嵌套循环是外循环条件成立执行一次,内循环必须执行到条件不满足才结束。 

 

 

1)累加思想: 

 

      原理:通过变量记录住每次变化的结果,通过循环的形式,进行累加动作。 

 

2).计数器思想: 

 

        原理:通过一个变量记录住数据的状态变化,也许通过循环完成。 

 

3)大圈套小圈思想: 

 

           原理:尖朝上改变条件。尖朝下改变初始值。 

 

 

   注意: 

 

1.for里面的连个表达式运行的顺序,初始化表达式只读一次,判断循环条件,为真就执行循环体,然后再执行循环后的操作表达式,接着继续判断循环条件,重复找个过程,直到条件不满足为止。 

 

2. while和for可以互换,区别在于for为了循环而定义的变量在for循环结束就是在内存中释放。而while循环使用的变量在循环结束后还可以继续使用。 

 

3.最简单无限循环格式:while(true),for(;;)无限循环存在的原因是并不知道循环多少次,而是根据某些条件,来控制循环。比如在循环体定义判断语句。

 

 

8.递归函数:

一个过程(或函数)直接或间接调用自己本身,这种过程(或函数)叫递归过程(或函数).

递归算法解决问题的特点:

(1) 递归就是在过程或函数里调用自身。

(2) 在使用递归策略时,必须有一个明确的递归结束条件,称为递归出口。

(3) 递归算法解题通常显得很简洁,但递归算法解题的运行效率较低。所以一般不提倡用递归算法设计程序。

(4) 递归调用的过程当中系统为每一层的返回点、局部量等开辟了栈来存储。递归次数过多容易造成栈溢出等。所以一般不提倡用递归算法设计程序。

递归算法所体现的重复一般有三个要求:

一是每次调用在规模上都有所缩小(通常是减半)

二是相邻两次重复之间有紧密的联系,前一次要为后一次做准备(通常前一次的输出就作为后一次的输入)

三是在问题的规模极小时必须用直接给出解答而不再进行递归调用,因而每次递归调用都是有条件的(以规模未达到直接解答的大小为条件),无条件递归调用将会成为死循环而不能正常结束。

递归应用:

1.求数组中的最大数

2.1+2+3+...+n

3.n个整数的积

4.n个整数的平均值

5.n个自然数的最大公约数与最小公倍数

6.有一对雌雄兔,每两个月就繁殖雌雄各一对兔子.n个月后共有多少对兔子

7.已知:数列1,1,2,4,7,13,24,44,...求数列的第 n.(斐波那契数列)

8.梵塔问题(汉诺塔问题)

9.楼梯有n阶台阶,上楼可以一步上1阶,也可以一步上2阶,编一程序计算共有多少种不同的走法.n阶台阶的走法数为f(n)

 

 

 

 

 

 

 

 



------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值