零基础学习java------day3-运算符 以及eclipse的使用
今日内容:
1. 算数运算符
2. 赋值运算符
3. 关系运算符
4. 逻辑运算符
5. 位运算符
6.三目运算符
一 运算符
运算:对常量和变量进行操作的过程称为运算
运算符:对常量和变量进行操作的符号称为运算符
操作数:参与运算的数据称为操作数
1. 算数运算符
1.1. 加减乘除运算
1.1.1 加减乘除运算
+: 正号;加法运算;字符串的连接
—: 负号;减法运算
* : 乘法
/ : 除法运算,取商
%:取余
注意事项:
整数和整数相运算得到的还是整数,运算时从左往后,先算乘除后加减,有括号先算括号
案例:
1 class MathOperatorDemo{
2 public static void main(String[] args){
3 int a = 13;
4 int b = 2;
5 System.out.println(a+b); // 15
6 System.out.println(a-b); // 11
7 System.out.println(a*b); // 26
8 System.out.println(a/b); // 6,两个int相运算,得到的结果还是int
9 System.out.println(a%b); // 1
10 }
11 }
若想a/b等于6.5,则第8行代码改为如下两行之一:
System.out.println(1.0*a/b) //7.5
System.out.println((double)a/b) //7.5 , 若将a/b用括号括起来,则结果为7.0
1.2 加加和减减的运算
(1)++ :前加加,放在变量的前面;后加加,放在变量的后面(只能操作变量)
单独使用的时候,二者相同,就是做了一个加1的操作
参与运算时又区别:
前加加:先加1,后运算(包括赋值,打印语句,小括号)
后加加:先运算,后加1
案例:
class MathOperatorDemo2{
public static void main(String[] args){
int a = 10;
int b = 10;
System.out.println(a++); //10 后加加,先运算(打印)后加1,打印完后a=11
System.out.println(++b); //11 前加加,先加1,后运算
}
}
若在打印前,加上a++;b++;则两个打印的结果都为11
(2)练习
/*
1:基本小题目
int a = 10;
int b = 10;
int c = 10;
a = b++;c=--a;b = ++a;a=c--;
请分别计算出a,b,c的值
**/ class MathOperatorTest{
public static void main(String[] args){
int a = 10;
int b = 10;
int c = 10;
a = b++; //a=10,b=11 后加加,先赋值a=10,赋值后b加1变成了11,后面同理
c = --a; //c=9,a=9
b = ++a; //b=10,a=10
a = c--; //a=9,c=8
System.out.println(a); //9
System.out.println(b); //10
System.out.println(c); //8 }
}
稍微复杂点的题目
int a = 4;
int b = (a++)+(++a)+(a*10);// 70
注意:括号也要看成一种运算
(a++) 后加加, 先运算,先算小括号,小括号的值4,后加1, a 变成了5
(++a) 前加加,先加1 ,a 变成了6, 小括号的值变成了6
4+6+60 = 70
2. 赋值运算符
符号:=,+=,-=,*=,/=,%=
=为基本的赋值运算符,其他的为扩展的赋值运算符
注意:+=,-=,*=,/=,%= 等符号中包含了一个强制类型转换
如下代码(为面试题)
short s = 1;
s = s + 1; // 错误,右边预算完数值类型为int,但左边的s为short类型,int范围大于short,所以会报错
s += 1; // 等价于 s = (short)(s+1),所以不会报错
案例
class GiveValueOperatorDemo{
public static void main(String[] args){
int a = 13;
int b = 2;
System.out.println(a+=b); //15 a = a+b=15
System.out.println(a-=b); //13 a = a-b=13
System.out.println(a*=b); //26 a=26
System.out.println(a/=b); //13
System.out.println(a%=b); //1
System.out.println(a=b); //2 a=2
System.out.println(a==b); //true
}
}
3. 关系运算符
关系运算符(也叫比较运算符),特点是返回的结果都是布尔类型的值,要么是true,要么是false
== :连接基本数据类型,比较数值是否相等;连接引用数据类型,比较的是地址值
!= : 不等于
> ;<;>=;<=;
instanceof: 判断对象是否属于类 "hello" instanceof String =====> true 此关系运算符只能用于引用数据类型
案列
class RelationOperatorDemo{
public static void main(String[]args){
int a = 15;
int b = 2;
System.out.println(a=b);//2
System.out.println(a==b);//true
System.out.println(a!=b);//false
System.out.println(a>b);//false
System.out.println(a<b);//false
System.out.println(a>=b);//true
System.out.println(a<=b);//true
System.out.println("jh " instanceof String);//true
}
}
4. 逻辑运算符
4.1 基本规则
逻辑运算符通常用来连接布尔类型的值
(1)& : AND(并且) 两个都是true 结果才是true false&true = false
(2)| :OR(或者) 只要有一个是true,那么结果就是true false|true = true
(3)^ : XOR(异或) 不同为true, 相同为false true^true=false
(4)! 非: (取反) !true = false
优先级: & 先于 ^ 先于 |
6>x>3 在java 中不能这么写, 要写成x>3 & x<6
案例
class LogicOperatorDemo{
public static void main(String[] args){
System.out.println((4>3)&(2!=1)); // true: true&true
System.out.println((4>3)^(2==1));// true true^false
System.out.println((4<3)|(2!=1));//true false|true
System.out.println((4>=3)^(2!=1)&(2!=1));//false true^true&true
System.out.println(!(2!=1));//false
}
}
4.2 短路运算
(1)
&: 两个都是true, 结果就为true,不管前面运算的结果是什么,后面的表达式都进行运算
&&: 在连接两个布尔类型的表达式的时候,如果&& 前面的表达式的结果为false,那么其实已经可以确认整个表达式的结果就是false,短路运算符,后面就不在进行运算了
& 和&& 最终运算出来的结果是一致的
(2)
|: 只要有一个是true,结果就是true,不管前面表达式的结果如何,后面都进行运算
||: 短路或者. 如果前面的表达式结果为true,那么整个表达式的结果就为true,后面就不在运算了
案例
class LogicOperatorDemo2{
public static void main(String[] args){
int x = 3;
int y = 4;
System.out.println((x++ > 3) & (y++ > 4)); //false,&后面的代码也执行了,从后面打印显示的y值可以知道
System.out.println(x);//4
System.out.println(y);//5
}
}
若代码变成如下(注释为运行结果),则
System.out.println((x++ > 3) && (y++ > 4));//false,由结果可知,&&后面的代码没有运行
System.out.println(x);//4
System.out.println(y);//4
同理符号“ | ” 也一样
4.3 连接数字
& ,| ,^ 除了可以连接布尔类型外,还可以用来连接整数,短路运算符不能连接数字. 在连接数字的时候,是针对二进制进行运算的, 将连接的数字转成二进制的补码,逐位进行运算, 把0 当做false ,把1 当做true
"~" 也是一个运算符,是把数字转成二进制的补码后逐位(包括符号位)取反
练习题:
a = 15, b=2 求a&b,a|b,a^b,~2
class LogicOperatorDemo3{
public static void main(String[] args){
int a = 15;
int b = 2;
System.out.println(a&b); //2
System.out.println(a|b); //15
System.out.println(a^b); //13
System.out.println(~b); // -3
}
}
解释如下
5 . 位运算符
针对二进制的补码做移位的操作
<<: 最高位丢弃,空位补0
>>: 空位补最高位
>>>: 无符号右移, 最高位补0
规律:
左移几位就相当于乘以2 的几次方
右移几位就相当于除以2 的几次方
案例
class BitOperatorDemo{
public static void main(String[] args){
System.out.println(15>>2);// 3
System.out.println(15<<2);// 60
}
}
6. 三目运算符
也称之为三元运算符
格式:
(关系表达式)?表达式1:表达式2;
如果条件为true,运算后的结果是表达式1;
如果条件为false,运算后的结果是表达式2;
表达式1 和表达式2 的最终结果是一个明确的值(不能写输出语句)
练习
/**
1. 定义两个float 类型的变量, 返回最小值
2. 定义一个int 类型的变量,如果这个数是偶数,就返回true, 否则返回false
3. 定义两个long 类型变量,如果这两个数相等,就返回"相等",否则返回不相等
4. 定义三个double 类型的变量,求出这三个数中的最大值
*/
class ThreeEyesTest{
public static void main(String[] args){
//1
float f1 = 12.3F;
float f2 = 56;
float min = f1<f2?f1:f2;
System.out.println(min);//12.3
System.out.println(f1<f2?f1:f2);
//2
int a = 100;
boolean bo = a%2==0?true:false;
boolean bo1 = a%2==0;
System.out.println(bo);//true
//3
long b1 = 100;
long b2 = 200L;
String result = b1==b2?"相等":"不相等";
System.out.println(result);//不相等
//4
double d1 = 12.3;
double d2 = 45;
double d3 = 89.3;
double temp = d1>d2?d1:d2;// 求前两个数中的最大值
double max = temp >d3?temp:d3;// 再用前两个数中的最大值和第三个数比较,
System.out.println(max);
System.out.println(d1>d2?(d1>d3?d1:d3):(d2>d3?d2:d3));
System.out.println(d1>d2&d1>d3?d1:d2>d3?d2:d3); //如果d1 大于d2 并且d1>d3,最大值就是d1,否则d1 不是最大值,最大值就在d2 和d3 中
嵌套练习
需求:
利用条件运算符的嵌套来完成此题:
学习成绩>=90 分的同学用A 表示,
80-89 分之间的用B 表示,
70-79 分以下的用C 表示,
60-69 分以下的用D 表示,
60 以下用E。
class StudentScoreSystem{
public static void main(String[] args){
int score = 69;
String result = score>=90?"A":score>=80?"B":score>=70?"C":score>=60?"D":"E";
System.out.println(result);
}
}
二 . 键盘录入
1. 导包: import 全类名(包名+类名)这句话要放到class 的上面
如: import java.util.Scanner
2. 创建Scanner 的对象
Scanner 对象名(变量名) = new Scanner(System.in);
3. 使用对象获取键盘录入的信息:
对象名.nextInt(); 获得 int
对象名.nextDouble() double
....
没有nextChar 这个方法
对象名.nextLine(); 获取字符串的
注意事项: 如果一个程序中,即使用了nextInt(nextDouble.nextLong....) ,同时还使用了nextLine
如果把nextLine 放到了nextInt(nextDouble.nextLong....) 的下面,就会导致nextLine 还未接收到内容就结束了
解决方案:
1. 把nextLine 放到nextInt(nextDouble.nextLong....) 上面
2. 可以使用next 替换nextLine
import java.util.Scanner;
class ScannerDemo{
public static void main(String[] args){
//2. 创建对象
Scanner sc = new Scanner(System.in);
//3 使用对象获取键盘录入的信息
System.out.println("请输入您的年龄");
int age = sc.nextInt();//如果输入的类型不是int,java.util.InputMismatchException
System.out.println("请输入您的姓名");
String name = sc.next();
System.out.println("您好,"+name+",原来您的年龄是:"+age+",您好年轻啊");
}
}
三 eclipse的使用
零基础学习java------day3-运算符 以及eclipse的使用的更多相关文章
- 音乐出身的妹纸,零基础学习JAVA靠谱么
问:表示音乐出身的妹纸一枚 某一天突然觉得身边认识的是一群程序员 突然想 要不要也去试试... 众好友都觉得我该去做个老师,可是我怕我会误人子弟,祸害祖国下一代..... 要不要 要不要 学Ja ...
- 总结了零基础学习Java编程语言的几个基础知识要点
很多Java编程初学者在刚接触Java语言程序的时候,不知道该学习掌握哪些必要的基础知识.本文总结了零基础学习Java编程语言的几个基础知识要点. 1先了解什么是Java的四个方面 初学者先弄清这 ...
- 零基础学Java第二节(运算符、输入、选择流程控制)
本篇文章是<零基础学Java>专栏的第二篇文章,文章采用通俗易懂的文字.图示及代码实战,从零基础开始带大家走上高薪之路! 第一章 运算符 1.1 算术运算符的概述和用法 运算符 对常量和变 ...
- 零基础学习Hadoop
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- 零基础学习hadoop到上手工作线路指导(编程篇)
问题导读: 1.hadoop编程需要哪些基础? 2.hadoop编程需要注意哪些问题? 3.如何创建mapreduce程序及其包含几部分? 4.如何远程连接eclipse,可能会遇到什么问题? 5.如 ...
- 零基础学习hadoop到上手工作线路指导(中级篇)
此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结. 五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解: hadoop分为h ...
- 零基础学习hadoop到上手工作线路指导(初级篇)
零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了.整个过程整理一下,给大家参考,欢迎讨论,共同学习. ...
- [原]零基础学习SDL开发之在Android使用SDL2.0显示BMP图
关于如何移植SDL2.0到安卓上面来参考我的上一篇文章:[原]零基础学习SDL开发之移植SDL2.0到Android 在一篇文章我们主要使用SDL2.0来加载一张BMP图来渲染显示. 博主的开发环境: ...
- [学习线路] 零基础学习hadoop到上手工作线路指导(初级篇)
about云课程最新课程Cloudera课程 零基础学习hadoop,没有想象的那么困难,也没有想象的那么容易.在刚接触云计算,曾经想过培训,但是培训机构的选择就让我很纠结.所以索性就自己学习了. ...
- 零基础学习hadoop到上手工作线路指导初级篇:hive及mapreduce
此篇是在零基础学习hadoop到上手工作线路指导(初级篇)的基础,一个继续总结.五一假期:在写点内容,也算是总结.上面我们会了基本的编程,我们需要对hadoop有一个更深的理解:hadoop分为h ...
随机推荐
- redis 的主从模式哨兵模式
原理理解 1,哨兵的作用就是检测redis主服务的状态,如果主服务器挂了,从服务就自动切换为主服务器,变为master.哨兵是一个独立的进程,作为进程,它会独立运行.其原理是哨兵通过发送命令,等待Re ...
- hash 哈希表 缓存表
系统初始hash表为空,当外部命令执行时,默认会从 PATH路径下寻找该命令,找到后会将这条命令的路径记录到 hash表中,当再次使用该命令时,shell解释器首先会查看hash 表,存在将执行之,如 ...
- 『学了就忘』Linux基础命令 — 27、搜索操作相关命令
目录 1.whereis命令 2.which命令 3.locate命令 1.whereis命令 whereis是搜索系统命令的命令,也就是说,whereis命令不能搜索普通文件,而只能搜索系统命令. ...
- JavaScript 事件循环
JavaScript 事件循环 事件循环 任务队列 async/await 又是如何处理的呢 ? 定时器问题 阻塞还是非阻塞 实际应用案例 拆分 CPU 过载任务 进度指示 在事件之后做一些事情 事件 ...
- pyinstaller打包:AttributeError: module ‘win32ctypes.pywin32.win32api’ has no attribute ‘error’
pyinstaller打包:AttributeError: module 'win32ctypes.pywin32.win32api' has no attribute 'error' 是因为pyin ...
- C#中OnLoad事件和Form1_Load事件的区别
在学习<GDI+高级编程>第二章的过程中遇到一个疑问,就是为何有的代码用的是覆写一个OnLoad事件,而平日里我用的一般是Form1_Load事件,这两个函数很相近,但是具体有什么关系呢? ...
- Django笔记&教程 2-1 URL与View关系
Django 自学笔记兼学习教程第2章第1节--URL与View关系 点击查看教程总目录 参考:how-django-processes-a-request 1- Django处理请求(request ...
- [luogu2303]Longge的问题
1 #include<bits/stdc++.h> 2 using namespace std; 3 #define ll long long 4 ll n,ans; 5 ll phi(l ...
- [bzoj1853]幸运数字
容易发现幸运数字只有1024个,暴力标记倍数还是会tle的 容斥,即从中任选i个的lcm,复杂度为$o(2^1024)$ 剪枝一:当答案超过1024就不用算了 剪枝二:当某个数是另一个数的倍数时就删掉 ...
- [bzoj1858]序列操作
考虑建立一棵线段树,维护:1.左端点的连续1和:2.右端点的连续1和:3.最长1的连续子序列:4.1的个数:5.将0和1交换后上面的四项:6.懒标记具体实现中,需要注意细节,可以看代码(比较短) 1 ...