运算符

算术运算符

听其名而知其意,就是用于计算的,java中常用的是:

  • +   加
  • -    减
  • *    乘
  • /    除
  • %  取模,取余——%可以用来得到两个数相除的余数

小练习——写一个java程序判断两个数是否能够整除

public class Demo1	//公共类必须和文件名相同
{
public static void main (String []args)
{
int a=2;
int b= 4;
if(b%a == 0)    //=代表赋值 ==代表相等
{
System.out.println("可以整除!");
}
else
{
System.out.println("不能整除!");
}
}
} 运行结果:
D:\myJavaDemo>javac -encoding UTF-8 Demo1.java D:\myJavaDemo>java Demo1
可以整除!
  • ++  自加 —— a++ —— a = a + 1
  • --  自减 —— b-- —— b = b - 1

实例:前自加和后自加的区别

public class Demo1
{
public static void main (String []args)
{
int a = 1;
int b = ++a;
int c = 1;
int d = c++;
System.out.println(b);
System.out.println(d);
}
} 输出结果:
2
1

  结论:总之就记住 ++ 在 a 前面,a的值就会先则增加。-- 也是相同的

int b = ++a;
{
a = a + 1;
b = a;
}
int b = a++;
{
b = a;
a = a+1;
}

  问:这段代码的结果是多少

public class Demo1
{
public static void main (String []args)
{
int a = 3;
int b = ++(++a)--;
System.out.println(b);
}
}

  答案是:

D:\myJavaDemo>javac -encoding UTF-8 Demo1.java
Demo1.java:12: 错误: 意外的类型
int b = ++(++a)--;
^
需要: 变量
找到: 值
1 个错误 答案是会报错, 可见自加自减运算符并不是随心所欲的进行自加自减的 为什么会报错呢?
因为++a在进行自加后,就处于一个不稳定状态,编译器不知道a是什么,确定不了a是一个小数还是一个字符或者什么的。
报错说的错误就是我不知道,我不知道就是个意外。
所以自加自减运算符要跟着一个确定的值
  • +=   左加
  • -=   左减
  • /=   左除
  • *=   左乘
  • %=   左取模  

小例子

a += 90  ——>  a = a + 90
b += a ——> b = b + a
a -= 90 ——> a = a - 90
a *= 90 ——> a = a * 90
a /= 90 ——> a = a / 90
a %= 90 ——> a = a % 90

关系运算符  

  • ==   等于
  • >    大于
  • >=   大于等于
  • <    小于
  • <=   小于等于
  • !=   不等于

练习:请编写一个程序,改程序可以接受两个数(可以使整数,也可以是小数),并判断这两个数是大于?小于?还是等于?

import java.io.*;
//InputStreamReader 和 BufferedReader 都在这个包里面,所以要把这个包引进来 public class Demo1
{
public static void main (String []args)
{
//从控制台接受两个数
try
{
//输入流,从键盘接收数
InputStreamReader isr = new InputStreamReader(System.in); //system.in代表标准输入,就是键盘
BufferedReader br = new BufferedReader(isr);
//这些内容到控制台中才会详细讲解 System.out.println("请输入一个数"); //提示 //从控制台读取一行数据
String a1=br.readLine();
//控制台不管输入的是数还是字符串,他都认为是字符串,所以要用String接受 System.out.println("请输入第二个数"); //提示
String a2=br.readLine(); //把String -> float
float num1 = Float.parseFloat(a1);
float num2 = Float.parseFloat(a2);
if (num1 > num2)
{
System.out.println("第一个大");
}
if(num1 == num2)
{
System.out.println("相等");
}
if(num1 < num2)
{
System.out.println("第二个大");
} }catch(Exception e)
{
e.printStackTrace();
}
}
}

  注意如果出现这样的报错信息——找不到符号,说明编译器找不到这个类,就要意识到自己有没有把包含这个类的包导进去

D:\myJavaDemo>javac -encoding UTF-8 Demo1.java

Demo1.java:19: 错误: 找不到符号
InputStreamReader isr = new InputStreamReader(System.in);
^
符号: 类 InputStreamReader
位置: 类 Demo1

逻辑运算符

  逻辑运算符——用于进行逻辑判断  

  • ||   或
  • &&   与
  • !    非 —————— 把结果进行取反

案例

public class Demo1
{
public static void main(String args[])
{
int a=90; int b = 90;
if(a==b||a>8){System.out.println("ok1");}
b--;
if(a>b&&a>8){System.out.println("ok2");}
if(!(a<=b)){System.out.println("ok3");}
}
} 输出结果:
ok1
ok2
ok3

三大流程控制——顺序控制,分支控制,循环控制

顺序控制

  程序从上到下,从左向右,依次执行

示例:

public class Demo1
{
public static void main(String args[])
{
int a = 7;
System.out.println("a="+a);
System.out.println("hello!");
a++;
System.out.println("a="+a);
System.out.println("qwq");
a++;
System.out.println("a="+a);
}
}

  

分支控制

  让程序有选择的执行,分支控制有三种——单分支,双分支,多分支

单分支结构

if(条件表达式)
{
语句;
} //条件表达式可以很长,但最终结果是个布尔值就行

双分支结构

if(条件表达式)
{
语句;
}
else
{
语句;
}

多分支结构一

if(条件表达式)
{
语句;
}
else if(条件表达式)
{
语句;
}
else if(条件表达式)
{
语句;
}
else
{
语句;
}

小例子——就是多个分支中选择一个走出来

public class Demo1
{
public static void main(String args[])
{
int a = 17;
if(a>18)
{
System.out.println("a>18");
}
else if(a>10 && a<18)
{
System.out.println("a>10 && a<=18");
}
else{
System.out.println("others");
}
}
}

多分支结构二——开关结构

switch(条件表达式)
{
case 常量1:
语句1;
break;
case 常量2:
语句2;
break;
.........
case 常量n;
语句n;
break;
default:
语句;
break;
}

  小例子:

public class Demo1
{
public static void main(String args[])
{
char c = 'a';
switch(c)
{
case 'a':
System.out.println("今天星期一");
case 'b':
System.out.println("今天星期二");
default:
System.out.println("不知道星期几");
}
}
} 输出结果:
今天星期一
今天星期二
不知道星期几 因为没有加break语句,所以都会输出

  加break语句

public class Demo1
{
public static void main(String args[])
{
char c = 'a';
switch(c)
{
case 'a':
System.out.println("今天星期一");
break;
case 'b':
System.out.println("今天星期二");
break;
default:
System.out.println("不知道星期几");
}
}
} 输出结果:
今天星期一

注意1:如果case后面的值相同,就会出现这样的报错——标签重复

Demo1.java:11: 错误: case 标签重复
case 'a':
^
1 个错误

注意2:switch后的 条件表达式的数据类型,应该和case后的常量类型一致

import java.io.*;
public class Demo3
{
public static void main (String args[]) throws Exception
{
String str;
int a;
BufferedReader buf;
buf=new BufferedReader(new InputStreamReader(System.in));
str = buf.readLine();
a=Integer.parseInt(str);
switch(a)
{
case a<=100&&a>=90:System.out.println("优");break;
case a<90&&a>=80:System.out.println("良");break;
case a<80&&a>=70:System.out.println("中");break;
case a<70&&a>=60:System.out.println("及格");break;
case a<60&&a>=0:System.out.println("不及格");break;
default:System.out.println("input error");break;
}
}
} 报错:
D:\myJavaDemo>javac -encoding UTF-8 Demo3.java
Demo3.java:14: 错误: 不兼容的类型: boolean无法转换为int
case a<=100&&a>=90:System.out.println("优");break;
^
Demo3.java:15: 错误: 不兼容的类型: boolean无法转换为int
case a<90&&a>=80:System.out.println("良");break;
^
Demo3.java:16: 错误: 不兼容的类型: boolean无法转换为int
case a<80&&a>=70:System.out.println("中");break;
^
Demo3.java:17: 错误: 不兼容的类型: boolean无法转换为int
case a<70&&a>=60:System.out.println("及格");break;
^
Demo3.java:18: 错误: 不兼容的类型: boolean无法转换为int
case a<60&&a>=0:System.out.println("不及格");break;
^
5 个错误
//逻辑运算符和关系运算符最后返回的是个boolean(布尔类型),而case后面需要int类型

  tips:

InputStreamReader isr = new InputStreamReader(System.in);
buf = new BufferedReader(isr) 上面的代码和下面的代码是相同的,之前的代码是用的上面的这种形式 buf = new BufferedReader(new InputStreamReader(System.in));

注意3:switch中可用的数据类型主要是:byte , short , int , char , enum(枚举类型)

public class Demo4
{
public static void main(String args[])
{
int a = 20.1;
switch(a)
{
case 12.3:System.out.println("12.3");break;
case 4.5:ystem.out.println("4.5");break;
default:System.out.println("其它");
}
}
} 报错:
D:\myJavaDemo>javac -encoding UTF-8 Demo4.java
Demo4.java:5: 错误: 不兼容的类型: 从double转换到int可能会有损失
int a = 20.1;
^
Demo4.java:8: 错误: 不兼容的类型: 从double转换到int可能会有损失
case 12.3:System.out.println("12.3");break;
^
Demo4.java:9: 错误: 不兼容的类型: 从double转换到int可能会有损失
case 4.5:ystem.out.println("4.5");break;
^
Demo4.java:9: 错误: 程序包ystem不存在
case 4.5:ystem.out.println("4.5");break;
^
4 个错误

循环控制

循环控制就是让你的代码可以循环执行

后续

Java学习日记——基础篇(三-上)基本语法之运算符和流程控制的更多相关文章

  1. Java学习日记基础篇(三-下)——流程控制之循环控制

    循环控制 for循环 语法: for(循环初值;循环条件;步长) { 语句; //循环体 } 例子: import java.io.*; public class Demo4 { public sta ...

  2. Java学习日记基础篇(六)—— 抽象类、接口、final

    抽象类 为什么要有抽象类? 因为父类方法有不确定性,我们在Animal中定义了一个方法,但是它会被子类的方法覆盖掉,我们就不知道这个方法原本是做什么的 public class test1 { pub ...

  3. Java学习日记——基础篇(一)常识

    JAVA简介 Java的标准 Java是一种语言,一个平台包含JavaSE.JavaEE.JavaME三个版本 JavaSE标准版(属于Java的基础部分,可以开发C/S构架的桌面应用程序) Java ...

  4. Java学习日记基础篇(七) —— 数组、排序

    数组 为什么要有数组? 案例:一个养鸡场有六只鸡,他们的体重分别为3kg,5kg,1kg,3.4kg,2kg,50kg.请问这六只鸡的总体重和平均体重是多少? public class test5 { ...

  5. Java学习日记基础篇(四)——类,对象之成员变量,成员方法,构造方法

    面向对象(Object Oriented) 一.面向对象杂谈 面向对象(Object Oriented),我的翻译是以物体为目标的,就是说编程的时候是建立一个物体,然后对这个物体进行操作. Java语 ...

  6. Java学习日记基础篇(九) —— 集合框架,泛型,异常

    集合框架 有事我们会需要一个能够动态的调整大小的数组,比如说要添加新员工但是数组已经满了,并且数组的大小是在定义的时候定死的,所以我们就需要一个能够动态调整大小的数组或者用链表解决,而java中提供了 ...

  7. Java学习日记——基础篇(二)基本语法

    变量 变量和常量是程序处理的两种基本数据对象,变量是程序的基本组成单位 变量的目的就是确定目标并提供存放空间 public class Hello { public static void main( ...

  8. Java学习日记基础篇(八) —— 二进制、位运算、位移运算

    二进制 二进制是逢2进位的进位置,0,1是基本算符 原码反码补码 在基本数据类型那里,有详细解释 二进制的最高位数是符号位:0表示整数,1表示负数 正数的原码,反码,补码都一样 负数的反码 = 它的原 ...

  9. java学习笔记-基础篇

    Java基础篇 1—12 常识 13 this关键字 14参数传递 16 继承 17 访问权限 28—31异常 1—12 常识 1.文件夹以列表展示,显示扩展名,在地址栏显示全路径 2.javac编译 ...

随机推荐

  1. Identityserver4证书

      dotnet应用用IdentityServer4做了登陆的功能,本地运行没有问题,部署到服务器上面就出现上面的问题,打开服务器的日志记录开关,获取到下面的异常信息.原来是     通过分析日志信息 ...

  2. Pytorch:module 'torch' has no attribute 'bool'

    Pytorch:module 'torch' has no attribute 'bool' 这个应该是有些版本的Pytorch会遇到这个问题,我用0.4.0版本测试发现torch.bool是有的,但 ...

  3. Modelsim问题集锦

    前言 收集工程调试中遇到的modelsim问题. 问题 (1)仿真发现时钟信号和理论上的数据信号没有边沿对齐. 解决:一般是时钟精度不匹配的问题. 如果想要1ns的精度则代码中的精度需设置为: v语法 ...

  4. SHA256WithRSA

    在上文中了解到SHA和RSA,工作中恰好用到扩展应用:SHA256WithRSA,本文总结下学习过程,备忘の 再提供另外一种方法,实现Java版pem密钥和.Net版xml密钥相互转换的方法 密钥转换 ...

  5. Java位运算总结:位运算用途广泛

    前天几天研究了下JDK的Collection接口,本来准备接着研究Map接口,可是一查看HashMap类源码傻眼咯,到处是位运算实现,所以我觉得还是有必要先补补位运算知识,不然代码看起来有点费力.今天 ...

  6. tomcat 处理HTTP请求

    一.Tomcat是什么?Tomcat是一个Web应用服务器,同时也是一个Servlet/JSP容器.Tomcat作为Servlet容器,负责处理客户端请求,把请求传送给Servlet,并将Servle ...

  7. Java实习生面试题分享

    1.Java有那些基本数据类型,String是不是基本数据类型,他们有何区别. Java语言提供了八种基本类型: 六种数字类型(四个整数型,两个浮点型) 字节型byte 8位 短整型short 16位 ...

  8. Mac+Appium+Python+Pycharm环境搭建

    为什么优先选择Mac做自动化测试? 1.既可以做iOS端的测试也可以进行Android端测试 2.Mac运行效率相对于Win要高很多,可以真正发挥appium的功能 以下是在Mac上完整搭建过程 一. ...

  9. [Sdoi2013] [bzoj 3198] spring (hash+容斥原理)

    题目描述 给出nnn个666维坐标,求有多少对点对满足恰好mmm个位置相等 1<=n<=1051<=n<=10^51<=n<=105 0<=k<=60& ...

  10. Flask+nginx+Gunicorn部署

    当我们开发完Flask项目后是不能直接通过命令启动服务来使用的(扛不住的) Gunicorn 是一个给 UNIX 用的 WSGI HTTP 服务器.这是一个从 Ruby 的 Unicorn 项目移植的 ...