Java基础知识 04(逻辑运算符,位运算符,循环语句)

Java基础知识 04

逻辑运算符

(1)&(并且):多个条件同时成立,有一个条件不成立就是false.这个运算符的两端表达式只要有一端是false,最终的结果都是false,只有当两端的结果都是true时,最终结果才是true。
(2)|(或者):两端的表达式只要有一端是true,其最终结果都是true,只有当两端结果都为false时,最终结果菜是false。
(3)!  (非): 取反 非 true变false,false变true。
(4)^(异或):相同为false,不同为true。
(5)&和&&:他们两个在运算结果上没有区别,在运算效率上有区别。
(6)|和||:在运算结果上没有区别,在运算效率上有区别。
package org.westos.demo1;

public class MyTest2 {
    public static void main(String[] args) {
        int a=20;
        int b=20;
        boolean f=a<b&&b++>a;//左端为false,右端不用执行,其结果肯定为false,
        System.out.println("f="+f);//false
        System.out.println("b="+b);//b=20
        boolean g=a==b&&b++>a;//左端为true,右端也要执行,右端为false,其结果为false.
        System.out.println("g="+g);//false
        System.out.println("b="+b);//b=21

        System.out.println("-----------------");

        int x=10;
        int y=10;
        boolean f1=x>y||y++>20;//左边为false,右端也要执行,右端为false,其结果为false.
        System.out.println("f1="+f1);//false
        System.out.println("y="+y);//y=21

        boolean f2=x==y||y++>20;//左端为true,右端不用执行,其结果肯定为true。
        System.out.println("f2="+f2);//true
        System.out.println("y="+y);//y=20
    }
}

位运算符

| & ^ 两端是数值,就是位运算符。----->位运算符是运用二进制补码来计算
| & ^ 两端是布尔类型,就是逻辑运算符。
(1)&:有0则0 System.out.println(3&4)
		0 0000011 --->3的补码
		0 0000100 --->4的补码
(2)1:有1则1 
(3)^:相同则0,不同则1。
(4)~:按位取反,0变1,1变0,符号位也包含在内取反。
		原码:0 0001001                   原码:1 0001010------->-10
		反码:0 0001001              	   反码:1 1110101
		补码:0 0001001----->按位取反  	补码:1 1110110
(5)<<(左移) System.out.println(3<<2)
		空位补0,被移除的高位丢弃。
		3:0 0000011      <<2   =====>   00001100:12
(6)>>(右移)被移位的二进制,最高位为0 
		右移后,空缺位补0,最高位为1,空缺位补1.
(7)>>> 无符号右移,最高位无论是0还是1,空缺位都用0补齐。
位运算符的特点:(1)^:位异或,相同则0,不同则1.
				一个数被另一个数,位异或两次,该数不变。
				System.out.println(3^8^8);  //3
				自己和自己位异或,结果为0.
			 (2)<<:把<<左边的数据乘以2的移动次幂,10<<3:10×2^3=80
			     >>:把>>左边的数据除以2的移动次幂,40>>3:40/2^3=5
		位运算符的运算效率高。

package org.westos.demo1;

public class MyTest3 {
    public static void main(String[] args) {
        System.out.println(3&4);
        //0 0000011 3的补码
        //0 0000100 4的补码
        System.out.println(3|4); //0 0000111
        //0 0000011 3的补码
        //0 0000100 4的补码
        System.out.println(3^4); //0 0000111
        //0 0000011 3的补码
        //0 0000100 4的补码
        System.out.println(~3); //1 1111100(补码)—>取反码—>取原码
        System.out.println(~4); //1 1111011(补码)—>取反码—>取原码
        //0 0000011 3的补码
        //0 0000100 4的补码
        System.out.println("---------------------");
        System.out.println(3<<2);
        //0 0000011 3的补码
        System.out.println(3>>2);
        //0 0000011 3的补码
        System.out.println(-3<<2);
        //0 0000011 3的补码
        System.out.println(-3>>2);
        //0 0000011 3的补码
        System.out.println("--------------------");
        System.out.println(3>>>2);
    }
}
值交换:(1)采用中间变量来进行值交换。
	   (2)采用位异或来运算,来交换值。
	   (3)采用±运算。
三目运算符:语法:表达式?结果1:结果2
			如果表达式的结果是true,返回结果1;如果是false,返回结果2.
package org.westos.demo2;

public class MyDemo {
    public static void main(String[] args) {
        int a=10;
        int b=20;
        //值交换
        int t=a;
        int a1=b;
        int b1=t;
        System.out.println("a1="+a1);
        System.out.println("b1="+b1);
        //三目运算符
        int c=10;
        int d=20;
        System.out.println(c>d?c:d);
    }
}
键盘录入:从键盘上录入用户的数据。
	(1)导入包(2)创建scanner对象(3)提示用户(4)获取用户输入的整数
package org.westos.demo2;

import java.util.Scanner;

public class MyDemo3 {
    public static void main(String[] args) {
        //alt+enter   万能纠错键 自动补全上面import这句话
        //ctrl+alt+v 自动补全下面这句话
        Scanner scanner = new Scanner(System.in);
        System.out.println("请输入第一个数");
        int a1=scanner.nextInt();
        System.out.println("请输入第一个数");
        int a2=scanner.nextInt();
        System.out.println("请输入第一个数");
        int a3=scanner.nextInt();
    }
}

if…else…语句

if(布尔类型的值,或是布尔类型的表达式){执行的代码}
if()括号中的结果是true,那么大括号{}中的代码就会执行。
if()括号中的代码是false,那么大括号中的代码就不执行。
if(条件){真的情况的处理}
	else{假的情况的处理}
三元表达式和if...else...的区别:
能用三元表达式写出来的,那么if...else...一定能写出来。
能用if...else...写出来的,三元表达式不一定能写出来。
package org.westos.demo4;

import java.util.Scanner;

public class MyDemo {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入月份1--12");
        int i = sc.nextInt();
        if(i>=3&&i<=5)
        {
            System.out.println("春季");
        }else if (i>=6&&i<=8)
        {
            System.out.println("夏季");
        }else if (i>=9&&i<=11)
        {
            System.out.println("秋季");
        }else
        {
            System.out.println("冬季");
        }
    }
}
package org.westos.demo4;

import java.util.Scanner;

import java.util.Scanner;

public class MyDemo7 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //请输入三个数中的最大数
        System.out.println("请输入第一个数");
        int num1=scanner.nextInt();

        System.out.println("请输入第二个数");
        int num2=scanner.nextInt();

        System.out.println("请输入第三个数");
        int num3=scanner.nextInt();
		
        /*if(num1>num2){
            if(num1>num3)
                System.out.println("最大数是:"+num1);
        }else(num2>num1){
            if(num2>num3)
                System.out.println("最大数是:"+num2);
        }else(num3>num1){
            if(num3>num2)
                System.out.println("最大数是:" + num3);
        }*/
        
        if(num1>num2){
            if(num1>num3){
                System.out.println("最大数为:"+num1);
            }else{
                System.out.println("最大数为:"+num3);
            }
        }else{
            if(num2>num3){
                System.out.println("最大数为:"+num2);
            }else{
                System.out.println("最大数为:"+num3);
            }
        }
        
        /*int max=num1>num2?num1:num2;
        int max1=max>num3?max:num3;
        System.out.println("最大数为:"+max1);*/
        
        /*if(num1>num2&&num1>num3) {
            System.out.println("最大数为:"+num1);
        }
        if(num2>num1&&num2>num3) {
            System.out.println("最大数为:"+num2);
        }
        if(num3>num1&&num3>num2) {
            System.out.println("最大数为:"+num3);
        }*/
    }
}

Switch语句

(1)switch语句所支持的类型:byte,short,int,char.
	JDK1.5之后支持枚举类型,JDK1.7之后支持执行string字符串类型
	case匹配项:case后面只能写常量,不能写变量。
	多个case的值不能出现重复的值。
	多个case项的类型值都要保持一致。
	default:所有的case项都没有匹配上,那就执行默认项。不是必须要提供的,也不一定说要放在最后,放哪都行
	break:中断,用来结束switch语句,如果忘记不写或者故意不写,语法不报错,但是会出现case穿透现象。
package org.westos.demo4;

import java.util.Scanner;

public class MyDemo2 {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        //请输入月份
        System.out.println("请输入月份1--12");
        int month=scanner.nextInt();
        switch (month)
        {
            case 3:
            case 4:
            case 5:
                System.out.println("春季");
                break;
            case 6:
            case 7:
            case 8:
                System.out.println("夏季");
                break;
            case 9:
            case 10:
            case 11:
                System.out.println("秋季");
                break;
            case 12:
            case 1:
            case 2:
                System.out.println("冬季");
                break;
        }
    }
}

if语句和switch语句的区别

if...else...语句是对结果是布尔类型的判断,能对范围进行判断,可以对常量进行判断。
Switch语句只能对某个常量进行判断,不能判断范围。

for循环语句

(1)求1--100以内的奇数,偶数和。
案例程序分析1:
package org.westos.demo4;

public class MyDemo3 {
    public static void main(String[] args) {
        //1--100以内的奇数和
        int sum=0;
        //快捷键生成for循环100.fori
        for (int i = 1; i <=100; i=i+2) {
            sum=sum+i;
        }
        System.out.println(sum);
        System.out.println("=================");
        //1--100以内的偶数和
        int num=0;
        for (int i = 0; i <=100; i=i+2) {
            num=num+i;
        }
        System.out.println(num);
    }
}
案例程序分析2:
package org.westos.demo4;

public class MyDemo4 {
    public static void main(String[] args) {
        //计算1--100以内的奇数偶数和
        int sum=0;
        int sum1=0;
        //快捷键生成for循环体 100.fori
        for (int i = 0; i <= 100; i++) {
            if(i%2==1) {
                sum+=i;
            }else{
                sum1+=i;
            }
        }
        System.out.println("sum="+sum);
        System.out.println("sum1="+sum1);
    }
}
(2)将1--10和10--1列出来
案例程序分析:
package org.westos.demo4;

public class MyDemo5 {
    public static void main(String[] args) {
        //将1--10列出来
        for (int i = 1; i <= 10; i++) {
            System.out.println(i);
        }
        System.out.println("================");
        //将10--1列出来
        //快速生成for循环体10.forr
        for (int i1 = 10; i1 >= 1; i1--) {
            System.out.println(i1);
        }
    }
}
(3)计算所有的水仙花数
案例程序分析:
package org.westos.demo4;

public class MyDemo6 {
    public static void main(String[] args) {
        //输出所有的水仙花数
        //水仙花数必须得是三位数,因此限定范围为100--999
        //输出个位数:153%10
        //输出十位数:153/10%10
        //输出百位数:153/100
        System.out.println("请输出所有的水仙花数");
        int ge;
        int shi;
        int bai;
        int count=0;
        for (int i = 100; i <= 999; i++) {
            ge = i % 10;
            shi = i / 10 % 10;
            bai = i / 100;
            //求每个字位上的立方和
            int number=ge*ge*ge+shi*shi*shi+bai*bai*bai;
            //判断是否为水仙花数
            if(i==number){
                System.out.println("水仙花数为:"+i);
                count ++;
            }
        }
        System.out.println("水仙花数总共有:" + count + "个");
    }
}

while循环语句

do{循环体}while{条件}
先执行一次do里面的代码,然后再去判断while()中的条件,是否成立,如果成立就继续循环,不成立循环结束。
(1)用while循环列出1--10和10--1
案例程序分析:
package org.westos.demo5;

public class MyDemo2 {
    public static void main(String[] args) {
        int i=1;
        while(i<=10){
            System.out.println(i);
            i++;
        }
        System.out.println("-------------------");
        int j=10;
        while (j>=1){
            System.out.println(j);
            j--;
        }
    }
}
(2)用while循环编写1--100以内的奇数偶数和。
package org.westos.demo5;

public class MyDemo3 {
    public static void main(String[] args) {
        //用while循环输出1--100以内的奇数偶数和:
        int sum=0;
        int jishu=0;
        int oushu=0;
        int i=1;
        while (i<=100){
            if (i %2==1){
                jishu+=i;
            }else{
                oushu+=i;
            }
            sum+=i;
            i++;
        }
        System.out.println("总和为:"+sum );
        System.out.println("奇数和为:"+jishu);
        System.out.println("偶数和为:"+oushu);
    }
}
一般来说,知道循环次数,用for循环,如果不知道循环的次数,用while循环,但要知道循环结束的条件。
发布了7 篇原创文章 · 获赞 0 · 访问量 240

猜你喜欢

转载自blog.csdn.net/weixin_45447369/article/details/105334356