Java【03】输入输出、分支结构(++ 和 -- 运算符理解)

小数运算经常出现精度丢失的问题,不建议使用基本类型运算.
示例:
public class Home4{
    public static void main(String[] args){
        double x=100.8;
        double y=20.6;
        double add=x+y;
        double sub=x-y;
        System.out.println("x+y的和为:"+add);
        System.out.println("x-y的差为:"+sub);
    }
}

输出:
x+y的和为:121.4
x-y的差为:80.19999999999999


【4】
1. 算数运算符
1.1 ++    自身加1
1.2 --    自身减1

语法:
变量名++   或   ++变量名
变量名--   或   --变量名
++放在前面和放在后面,是有先后顺序的,但是如果这行代码只有++,对于结果来说没有影响

示例:
public class Demo1{
    public static void main(String[] args){
        int i=10;
        int j=i++;
        System.out.println(i);
        System.out.println(j);
        
        int a=10;
        int b=++a;
        System.out.println(a);
        System.out.println(b);
    }
}

输出:
11
10
11
11


分析上面++过程【跟原先想的,可能不一样!!!】:
public class Demo1{
    public static void main(String[] args){
        int i=10;
        int j=i++;//除了++运算之外,还有一个赋值运算
        //① 肯定是运算i++   
        //    a. 将i的值赋值给i++这个整体  
        //    b. 在将i的值进行自增
        //② 在进行赋值
        //  将i++的值赋给了j,所以j的结果是10
        
        //  ++在后面,是先赋值在自增
        //  ① 将i的值赋给j      ② i在自增    错误的
        //  ① 将i的值赋给i++  ② i在自增   ③ 将i++的值赋给j  正确的
        //  i  和  i++   是两码事!
        System.out.println(i);//11
        System.out.println(j);//10
        
        int a=10;
        int b=++a;
        //++放在前面,得到的结论是   先自增在赋值
        //① 先进行a的自增  ② 将a的值赋值给++a  ③ 将++a的值赋给b
        System.out.println(a);//11
        System.out.println(b);//11
    }
}


//排除你之前的思想,下面再来验证一下
示例:
public class Demo2{
    public static void main(String[] args){
        int i=10;
        i=i++;
        System.out.println(i);
    }
}

输出:
10


分析上面++过程
public class Demo2{
    public static void main(String[] args){
        int i=10;
        i=i++;
        //先赋值在自增
        //  我的思想: ① 将i的值赋值给i++  ② i在自增  ③ 将i++的值赋值给i 
        // 之前的思想: ① 将i的值赋值给i      ② i在自增  错误的
        System.out.println(i); //10   
        /*
            额 那这样的话,如果一直循环输出的话,是不是i一直都是10? 对的
            int  j = (a+b)++   可以吗?  不可以【因为:++前后需要是变量名】
            不是,第二种方法是先将i赋值给j如果i,结果是10,然后i自增前边的i
            i==i++   判断i和i++是否相等?  是相等的
            j=++(i++) 不可以的
            先将i赋值给i,结果是10,然后i自增前边的i
            i++后的i不是11吗,再执行i++赋值此时不应该是11吗?
                如果按照第二种思想i的值应该是11,但是结果是10
        */
        
        int a=10;
        System.out.println(a==a++);
        //int j=++(i++); //报错
    }
}

练习:
1. int i=10; int k=i++ + i; int m=i++ - i + i++;
System.out.println(i);
System.out.println(k);
System.out.println(m);

练习解答:
public class Test1{
    public static void main(String[] args){
        int i=10; 
        int k=i++ + i;    //【注:+ i 时,会去取当前i的值,无论前++ 或 后++,即取自增后的值】
        /*
            ① 将i的值赋值给i++   i=10    i++=10
            ② i会自增            i=11    i++=10
            ③ i++ + i   = 10 + 11   =21
            ④ 将21赋值给k        k=21
        */
        int m=i++ - i + i++; //i=11 
        /*
            ① 将i的值赋值给i++     i=11  i++=11
            ② i会自增              i=12  i++=11
            ③ i++ -i        11 - 12   = -1
            ④ 将i的值赋值给i++      i=12  i++=12
            ⑤ i会自增                i=13   i++=12
            ⑥ -1 + 12   =11
            ⑦ 将11赋值给m          m=11
        */
        System.out.println(i);//13
        System.out.println(k);//21
        System.out.println(m);//11
    }
}

输出:
13
21
11


2. 赋值运算符(了解)
= += -= *= /= %=
2.1 = ★
等号右侧的值赋给左侧的内容(变量)
2.2 +=  -= *= /= %=
在原变量值的基础上做相应的操作,将结果在赋值给该变量

3. 关系(比较运算符)运算符  
比较运算符的结果是一个布尔值(只有两个结果true false)
3.1 > >= < <=   
可以进行比较的数据类型有   byte short int long float double char
3.2 ==   判断两个值是否相等
任意类型都可以采用==做对比,但是前后类型要兼容
3.3 !=   判断两个值是否不相等
任意类型都可以采用!=做对比,但是前后类型要兼容

4. 逻辑运算符
4.1 并且  两个条件都成立总体才成立,否则总体就不成立 
① &&  双与(短路与)   
会造成短路--> 当第一个条件不成立的时候,总体就已经不成立了,不在判断第二个条件
② &   单与
第一条件是不成立时,第二个也需要判断(需求需要执行)

4.2 或者  两个条件都不成立,总体就不成立,否则总体就是成立
① || 双或(短路或)  --> 当第一个条件成立的时候,总体就已经成立了
② |  单或

4.3 非
① !   取反

4.4 异或(了解) 
^  相同为false,不同为true
true ^ true   相同
false ^ false  相同
true ^ false    不同
false ^ true    不同


【8】
布尔值不能参与数值型的比较运算(跟布尔值不能参与数值运算是一致的)
"j"+"a"+"v"+"a"=="java"     暂时不讲(涉及到内存)   专门讲String


示例:
public class Demo5{
    public static void main(String[] args){
        int a=50;
        int b=10;
        System.out.println(a++>50 & b++>5);//false
        System.out.println(b);//10   11

        int i=20;
        int j=30;
        System.out.println(i++>10 | j++>10);
        System.out.println(j);//30
        
        System.out.println(!(i>10));
        
        System.out.println("------------------------------");
        System.out.println(i>10 ^ j>10);//结果?相同为false
        System.out.println(i>100 ^ j>100);//结果?相同为false
        System.out.println(i>100 ^ j>10);//结果?不同为true
        System.out.println(i>10 ^ j>100);//结果?不同为true
        System.out.println(i ^ j);//此时的^是位运算符,不是异或
    }
}

输出:
false
11
true
31
false
------------------------------
false
false
true
true
10


5. 三元运算符
语法: 条件?值1:值2;
原理:条件成立返回值1,条件不成立返回值2!

6. 位运算符(了解)  和二进制有关    后面会有详细讲解(偏难)
因为我们在学习集合的时候,源码内会有相关的位运算符,能看懂
左移:<<
运算规则:左移几位就相当于乘以2的几次方
右移:>>
运算规则:右移几位就相当于除以2的几次方

练习:
1. 随机生成一个10000内的整数,判断该数字是否能被7或者3整除!
输出true或者false!


【13】
示例:
public class Demo2{
    public static void main(String[] args){
        short s=10;//直接赋值,默认是可以转化
        //s=s+5;//有运算,类型会提升,5默认是int值,所以s+5结果是int
        s+=5;//默认是可以转化的
        System.out.println(s);
    }
}


7. 流程控制
7.1 顺序结构
程序是按照顺序执行的(从上往下)
① 输出
输出语句,从上往下依次执行
② 输入(在实际工作中没有用处)
用途:为了一些练习使用
功能:在命令窗口输入一些数据,被程序获取!
知识点范围:属于面向对象
关注点:实现步骤
步骤:
a. 准备一个输入的工具
java.util.Scanner input=new java.util.Scanner(System.in);
b. 准备输入入口
nextInt()        整型数据输入的入口
nextDouble()    浮点型数据的输入入口
next()              字符串数据的输入入口
    只能取空格前面的内容
nextLine()       字符串数据的输入入口
    读取一行,空格也算
建议使用next(),输入的数据不要有空格

注意事项:
java.util.InputMismatchException   输入的数据和类型不匹配

练习:
1. 手动输入自己的个人信息,姓名、年龄、身高、手机号码、地址...
输入完毕后,在展示数据!
2. 手动输入一个四位数字,求出各位之和!

7.2 分支结构和选择结构  ★
分支结构:
① 单分支
举例:手动输入小明的java成绩,如果成绩高于90,奖励假发一顶
语法:if(条件){代码块}
原理:如果条件成立,则执行代码块,如果条件不成立则不执行代码块
特性:
a. 当if后大括号中只有一行代码的时候,大括号可以省略的
   这行代码不能是变量的声明(做完练习后在解释)
b. if是可以嵌套的,if的大括号就可以写main方法大括号中的任意代码
补充:
变量的作用域:是在当前大括号

② 双分支
举例:手动输入小明的java成绩,如果成绩高于90,奖励假发一顶
否则在敲2万行代码
语法:if(条件){代码块1}else{代码块2}
原理:条件成立执行代码块1,条件不成立执行代码块2
特性:
a. if和else后的大括号中只有一行代码的时候,大括号可以省略的
   这行代码不能是变量的声明(做完练习后在解释)
b. 大括号是可以嵌套的

③ 多分支
举例:手动输入小明的java成绩,如果成绩满分,奖励植发一次
如果成绩高于90,奖励假发一顶,
如果成绩高于80,奖励洗头膏一袋,
如果成绩大于60,奖励洗面奶一瓶,
否则在敲2万行代码
语法:if(条件1){代码块1}
else if(条件2){代码块2}
else if(条件3){代码块3}
...
【else{代码块n}】
原理:判断条件1是否成立,如果成立,执行代码块1,多分支结束
如果条件1不成立,就会判断条件2,如果成立的,执行代码块2,多分支结束
如果条件2不成立,就会判断条件3,如果成立的,执行代码块3,多分支结束
...
如果所有的条件都不成立,则执行代码块n(存在else的情况下)


选择结构:
语法:
switch(变量名){
    case 值1:
        代码块1;
    【break;】
    case 值2:
        代码块2;
    【break;】
    case 值3:
        代码块3;
    【break;】
    ...
    【default:
        代码块n;
    break;】
}
原理:判断变量的值和值1是否相等,如果相等,则执行代码块1,
执行完之后,开始寻找break(才是结束switch的标识)
      如果不相等,则判断变量和值2是否相等,如果相等,则执行代码块2,
执行完之后,开始寻找break(才是结束switch的标识)
      如果不相等,则判断变量和值3是否相等,如果相等,则执行代码块3,
执行完之后,开始寻找break(才是结束switch的标识)
      变量如果和所有值都不一样,则执行default中的代码块n

注意:
a. case后的值不能相同
b. case的穿透(下坠)
c. switch结束,要么执行完毕,要么遇到break
d. switch都支持什么数据类型 
byte short int char String(JDK1.7新增) 枚举(后面会讲到)

示例:
public class Demo4{
    public static void main(String[] args){
        char num='a'; //97
        switch(num){
            case 96:
                System.out.println("969696");
            break;
            case 97:
                System.out.println("aaaaaa");
            case 98:
                System.out.println("穿透到98");
        }
    }
}

输出:
aaaaaa
穿透到98


7.3 循环结构  (难点)   ★
7.4 跳转结构   ★

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值