Java的运算符和程序逻辑控制你了解吗

目录
  • 运算符
    • 算术运算符
      • 基本四则运算符(+-*/%)
      • 增量运算符(+=-=*=/=%=)
      • 自增/自减运算符(++--)
    • 关系运算符
    • 逻辑运算符
      • 逻辑与(&&)
      • 逻辑或(||)
      • 逻辑非(!)
    • 位运算符
      • 按位与(&)
      • 按位或(|)
      • 按位取反(~)
      • 按位异或(^)
    • 移位运算
      • 左移(<<)
      • 右移(>>)
      • 无符号右移(>>>)
      • 小结
    • 条件运算符
  • 程序逻辑控制
    • Java中程序的逻辑控制语句
      • 分支语句
      • 循环结构
    • Java中的输入输出方式
      • 输出到控制台
      • 从键盘输入
      • 巩固练习
  • 总结

运算符

运算符,顾名思义就是用来执行数学运算的。在Java中运算符可以分为:算术运算符关系运算符逻辑运算符位运算符移位运算符条件运算符等。

算术运算符

基本四则运算符(+ - * / %)

这里与C语言基本一致,但是还要记住的是:1. 都是二元运算符,使用时必须要有左右两个操作数;2. int / int结果还是int类型,而且会向下取整。

增量运算符(+= -= *= /= %=)

这种类型运算符操作完成后,会将操纵的结果赋值给左操作数(与C语言类似)。

注意:只有变量才能使用该运算符,常量不能使用。

自增/自减运算符(++ --)

这里也是和C语言相同的,前置++是先+1,然后再再使用变量+1之后的值;后置++是先使用变量原来的值,表达式结束时再给变量+1,前置--/后置--也是类似的。

注意:只有变量才能使用自增/自减运算符,常量是不能够使用的,因为常量是不允许被修改的。

关系运算符

关系运算符主要有以下几个:==   !=   <   >   <=   >=,他们在进行计算后会得出的结果是true/false(也就是布尔类型)

其中有一点值得注意的是:当需要进行多次判断的时候

public class TestDemo {
    public static void main(String[] args) {
        int a=4;
        if(3<a<5){
            System.out.println(a);
        }
    }
}

是不能够像上面的这段代码那样连着写的,这样会报错,而应该像下面的代码一样:

public class TestDemo {
    public static void main(String[] args) {
        int a=4;
        if(3<a&&a<5){
            System.out.println(a);
        }
    }

但是上面这段在Java中错误的代码,在C语言中却不会报错,在C语言中是会先判断3是否小于a,发现确实是小于,泽会将其变为1,再判断1是否小于5,发现是就直接执行了这个if语句。但是计算机中这样的执行方式肯定是和我们元本的意愿是不符符,所以从这个方面又可以看出Java相对C语言安全性是更高的(因为Java在这个时候会就直接报错)。

逻辑运算符

逻辑运算符在所有运算符里面算得上是比较重点的,其中,逻辑运算符主要有三个:&&  ||  !,其运算结果都是布尔类型(true/false)。

逻辑与(&&)

语法是:布尔表达式&&布尔表达式(注意:左右表达式应该都是布尔类型)

与C语言相同:

1. 只有两个表达式都为真,结果才为真;两表达式只要有一个是假,那结果就是假。

2. 遵循短路求值:如果左侧表达式为假,那么结果就一定是假,不会计算右侧的表达式。

与C语言不同:单纯使用&时,如果表达式结果为布尔类型,也可以表示逻辑与,但是不会遵循短路求值。

public class TestDemo {
    public static void main(String[] args) {
        int a=10;
        System.out.println(a>20 & a/0 == 0);   //err
    }
}

逻辑或(||)

语法是:布尔表达式||布尔表达式(注意:左右表达式应该都是布尔类型)

与C语言相同:

1. 两表达式只要有一个是真,那结果就是真;只有两个表达式都为假,结果才为假。

2.  遵循短路求值:如果左侧表达式为真,那么结果就一定是真,不会计算右侧的表达式。

与C语言不同:单纯使用|时,如果表达式结果为布尔类型,也可以表示逻辑或,但是不会遵循短路求值。

public class TestDemo {
    public static void main(String[] args) {
        int a=10;
        System.out.println(a<20 | a/0 == 0);   //err
    }
}

逻辑非(!)

语法是:!表达式

与C语言相同:真变假,假变真。

位运算符

我们知道字节是最小的存储单位,Java也不例外,在Java中数据存储的最小单位是字节,而数据操作的最小单位是比特位。其每个字节是由8个二进制比特位组成的,多个字节组合在一起可以表示各种不同的数据。

位操作表示按二进制位运算。计算机中都是使用二进制来表示数据的(01构成的序列),按位运算就是在按照二进制位的每一位依次进行计算。

位运算符主要有以下四个:&  |  ~  ^(其中除了~是一元运算符以外,其余的都是二元运算符)。这部分知识基本与C语言一模一样(当做巩固,具体见之前文章或者题目)。

按位与(&)

两个二进制位都是1,则结果是1,否则结果为0(注意:只能是整数(int/short/long/byte)的时候)。

按位或(|)

两个二进制为都是0,则结果是0,否则结果为1(注意:只能是整数(int/short/long/byte)的时候)。

按位取反(~)

把所有二进制位0转为1,1转为0。

按位异或(^)

两个数字的二进制相同,则结果为0;相异的结果则为1。

移位运算

移位运算符主要有三个:<<  >>  >>>,且都是二元运算符,都是按照二进制比特位来运算的。

左移(<<)

与C语言一样:

1. 最左侧位舍去,最右侧补0(注意:左移时,丢弃的是符号位,因此正数左移可能会变成负数)。

2. 左移一位相当于原数字*2;左移N位相当于原数字*2的N次方。

右移(>>)

与C语言一样:

1. 最右侧位舍弃,最左侧不符号位(正数补0,负数补1)。

2. 右移一位相当于原数字/2;左移N位相当于原数字/2的N次方。

无符号右移(>>>)

无符号右移在C语言中是没有的,其作用是:最右侧位舍弃,最左侧补0。

小结

1. 进行移位运算相对于直接做乘除效率会高一些,所以当某个代码正好需要乘除2的N次方的时候就可以使用移位运算。

2. 对负数进行移位运算,会得出向上取负数的整的值,导致其运算的结果与直接做除法的结果不相同。

public class TestDemo {
    public static void main(String[] args) {
        System.out.println(-3>>1);   //-2
        System.out.println(-3/2);   //-1
    }
}

条件运算符

语法是:布尔表达式1?表达式2:表达式3(当布尔表达式1的值为ture,整个表达式的值为表达式2的值;当布尔表达式1的值为flase,整个表达式的值为表达式3的值)。

这是唯一的一个条件运算符,也是唯一一个三目运算符。

注意的点:

1. 表达式2和表达式3的结果是要同类型的,除非是能够发生类型隐式类型转换的。

2. 表达式是不能单独存在的,其产生的结果必须要被使用。

程序逻辑控制

Java中程序的逻辑控制语句

分支语句

在Java中,分支语句有两种:if语句和switch语句。大部分与C语言中的语法一样(详细可以看之前C语言文章),但是还有几点需要注意:

1. 在if语句中的判断表达式必须是布尔表达式

2. 悬垂else问题也是和C语言一样,匹配的是其最近的if

3. 在switch语句中,多个case后的常量值是不可以重复的

4. switch语句的括号内只能是下面的几种类型:

(1)基本类型:byte、char、short、int(注意不能是long类型)

(2)引用类型:String常量串、枚举类型

循环结构

在Java中,循环语句有三种:while循环、for循环、do……while循环。大部分与C语言中的语法一样(详细可以看之前C语言文章),但是还有几点需要注意:

1. 使用while循环的时候的循环条件必须是布尔类型

2. 使用for循环的时候循环条件(也就是第二个表达式)也必须是布尔表达式

3. do while循环的循环条件也必须是布尔表达式且是在第一次执行语句块之后才进行判断

4. break的功能是让循环提前结束

5. continue的功能是跳过本次循环,立刻进入下一次循环执行

Java中的输入输出方式

输出到控制台

有以下这三种方法:

public class TestDemo {
    public static void main(String[] args) {
        System.out.println(10);     //输出带换行
        System.out.print(10);       //输出不换行
        System.out.printf("%d",10); //格式化输出
    }
}

从键盘输入

1. 使用Scanner读取字符串/整数/浮点数

案例1:

import java.util.Scanner;
public class TestDemo {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.print("请输入姓名:");
        String name=sc.nextLine();
        System.out.print("请输入年龄:");
        int age=sc.nextInt();
        System.out.print("请输入工资:");
        float money=sc.nextFloat();
        System.out.println("信息如下:");
        System.out.println("姓名:"+name+"\n"+"年龄:"+age+"\n"+"工资:"+money);
        sc.close();
    }
}

2.使用Scanner循环读取N个数字

案例2:

import java.util.Scanner;
public class TestDemo {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        while(sc.hasNextInt()){
            int num=sc.nextInt();
            System.out.println(num);
        }
    }
}

注意:

1. 当循环输入多个数据的时候,可以使用Ctrl+D来结束运行

2. 当使用完Scanner进行输入的时候,需要将其close掉

巩固练习

下面引出一个猜数字游戏练习来巩固程序逻辑控制。

系统自动生成一个随机数(1-100),输入一个数字,如果输入的数比该数小,则输出“猜小了”;如果输入的数比该数达,则住处“猜大了”;否则输出“猜对了”。

实现代码:

import java.util.Random;
import java.util.Scanner;
public class TestDemo {
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        Random random=new Random();//在此处填值可以使这个随机数一致都是同一个数
        //int randNum=random.nextInt(100)+1;//1-100(方法一)
        int randNum=(int)(Math.random()*100+1);//1-100(方法二)
        while(true){
            System.out.print("请输入:");
            int num=sc.nextInt();
            if(num<randNum){
                System.out.println("猜小了");
            }else if(num>randNum){
                System.out.println("猜大了");
            }else{
                System.out.print("猜对了");
                break;
            }
        }
    }
}

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注我们的更多内容!

(0)

相关推荐

  • Java中的运算符你知道多少

    目录 1.算术运算符 1.基本的算数运算符:+-*/% 2.增量运算符**+=-=/= =%=* 3.自增自减运算符++–-- 2.关系运算符 3.逻辑运算符 4.位运算符 5.条件运算符 6.运算符的优先级 总结 1.算术运算符 1.基本的算数运算符:+ - * / % 规则比较简单,但是需要注意的是除法:a). int / int结果还是int,需要使用double来计算. int a = 1; int b = 2; System.out.println(a/b);//结果为0 b). 0不

  • java基础javeSE程序逻辑控制语法

    目录 顺序结构 分支结构 if 语句 悬垂 else switch 语句 循环结构 while 循环 for 循环 do while 循环 输入输出方式 输出到控制台 从键盘输入 猜数字游戏 顺序结构 按照代码书写的顺序一行一行执行 分支结构 if 语句 基本语法形式: if(布尔表达式){ //条件满足时执行代码 } if(布尔表达式){ //条件满足时执行代码 }else{ //条件不满足时执行代码 } //多分支 if(布尔表达式){ //条件满足时执行代码 }else if(布尔表达式)

  • 一定要让你搞懂Java位运算符

    目录 常用的运算符 位运算符 &.|.^ 运算符 ~ 运算符 << 和 >> 运算符 >>> 运算符 有<<<运算符吗 总结 常用的运算符 在Java语言中,官方给我们提供了极为丰富的运算操作,但是常用的,好像也就是算术运算符,例如加.减.乘.除.取余等.还有就是关系运算符大于.小于.等于.不等于等.再或者就是逻辑运算符&&.||.!等,至于位运算符,属实用的不多.用的不多今天为什么拿出来讲呢,首先这可以帮助你很好的去理解

  • Java中的位运算符全解

    目录 1.&(按位与运算符) 2.|(按位或运算符) 3.^(异或运算符) 4.<<(左移运算符) 5.>>(右移移运算符) 6.~(取反运算符) 7.>>>(无符号右移运算符) (1)正数无符号右移 (2)负数无符号右移 总结 1. &(按位与运算符) &按位与的运算规则是将两边的数转换为二进制位,然后运算最终值,运算规则即(两个为真才为真):1&1=1 , 1&0=0 , 0&1=0 , 0&0=0 pu

  • Java的运算符和程序逻辑控制你了解吗

    目录 运算符 算术运算符 基本四则运算符(+-*/%) 增量运算符(+=-=*=/=%=) 自增/自减运算符(++--) 关系运算符 逻辑运算符 逻辑与(&&) 逻辑或(||) 逻辑非(!) 位运算符 按位与(&) 按位或(|) 按位取反(~) 按位异或(^) 移位运算 左移(<<) 右移(>>) 无符号右移(>>>) 小结 条件运算符 程序逻辑控制 Java中程序的逻辑控制语句 分支语句 循环结构 Java中的输入输出方式 输出到控制台

  • Java 位运算符>>与>>>区别案例详解

    下图是java教程中对于>>和>>>区别的解释,但是介绍的并不详细,因为这两种运算符是以补码二进制进行运算的. 1.学习过计算机原理的都知道,数字是以补码的形式在计算机中存储的,那么源码,反码,补码之间的关系是如下所示: **正整数**的原码.反码和补码都一样: **负数部分**: 1.原码和反码的相互转换:符号位不变,数值位按位取反 2.原码和补码的相互转换:符号位不变,数值位按位取反,末位再加1 3.已知补码,求原码的负数的补码:符号位和数值位都取反,末位再加1 2.了解

  • Java 基础语法中的逻辑控制

    目录 Java 基础语法中的逻辑控制 一.逻辑控制语句 1. 顺序结构 2. 分支结构 3. 循环结构 二.输入输出方式 1. 输出到控制台 2. 从键盘输入 三.猜数字游戏 四.总结 Java 基础语法中的逻辑控制 一.逻辑控制语句 1. 顺序结构 像我们写的代码,执行时会按照从上到下一行一行的执行.这z就是顺序结构,不同的顺序,结果可能就不一样.如 System.out.println(1) System.out.println(2) System.out.println(3) 该代码结果为

  • Java计算两个程序运行时间的实例

    一.获取系统当前时间 long startTime = System.currentTimeMillis(); //获取开始时间 doSomething(); //测试的代码段 long endTime = System.currentTimeMillis(); //获取结束时间 System.out.println("程序运行时间:" + (endTime - startTime) + "ms"); //输出程序运行时间 二.以纳秒为单位计算 // 第二种是以纳秒

  • java 简单的计算器程序实例代码

    java 简单的计算器程序 实现实例: import java.awt.*; import java.awt.event.*; import javax.swing.*; public class Calculator { public static void main(String[] args) { EventQueue.invokeLater(new Runnable() { public void run() { CalculatorFrame frame = new Calculato

  • 解决java编译错误( 程序包javax.servlet不存在javax.servlet.*)

    解决java编译错误( 程序包javax.servlet不存在javax.servlet.*) 编译:javac Servlet.java 出现 软件包 javax.servlet 不存在 软件包javax.servlet.http 不存在 等错误 由于servlet和JSP不是Java平台JavaSE(标准版)的一部分,而是Java EE(企业版)的一部分,因此,必须告知编译器servlet的位置. 解决"软件包 javax.servlet不存在"错误的方法: 1. 搜索servle

  • Java中==运算符与equals方法的区别及intern方法详解

    Java中==运算符与equals方法的区别及intern方法详解 1.  ==运算符与equals()方法 2. hashCode()方法的应用 3. intern()方法 /* Come from xixifeng.com Author: 习习风(StellAah) */ public class AboutString2 { public static void main(String[]arsgs) { String myName="xixifeng.com"; String

  • Java自学书籍推荐 程序员到架构师必看的书

    作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们. 一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是"囫囵吞枣不求甚解",先对Java熟悉起来再说.用很短的时间快速过一遍Java语法,连懵带猜多写写代码,要"

  • java实现验证码小程序

    手动制作java的验证码,具体内容如下 Web应用验证码的组成: (1)输入框 (2)显示验证码的图片 验证码的制作流程: 生成验证码的容器使用 j2ee的servlet 生成图片需要的类: (1) BufferedImage 图像数据缓冲区 (2)Graphic绘制图片 (3)Color获取颜色 (4)Random生成随机数 (5)ImageIO输入图片 具体实现流程: (1)定义一个Servlet,用于生成验证码 (2)定已BufferedImage对象,主要作用就是制作一个图片缓冲区,作为

随机推荐