01.Java语法基础(三)-知识
本章节将为大家讲解 Scanner & 运算符
文章目录
一、Scanner键盘扫描器
在编写程序时,我们通常会输入内容,然后让程序对我们输入的内容进行处理。那么在控制台输入内容我们可以使用Scanner键盘扫描器,将你输入的内容扫描到程序中。
1.1、使用步骤
1.1.1 创建键盘扫描器
固定格式:
Scanner key = new Scanner(System.in)
注意: 使用Scanner之前需要import Scanner
1.1.2 提示用户输入
代码如下(示例):
System.out.println(“请输入内容”);
注意:此步不是必要的,可以省略。但是如果不写,运行程序时,不会自动弹出控制台,输入内容。而且用户也不知道改怎么操作或者输入什么内容。所以一般建议 此步加上。
1.1.3 接收用户输入
1)接收int类型的内容:key.nextInt();
2)接收double类型的内容:key.nextDouble();
3)接收String类型的内容:key.next();或者key.nextLine();
注意:根据输入的数据类型不同,选择对应的方法
1.1.4 关闭键盘扫描器
key.close();
注意:在使用完键盘扫描器之后,记得关闭键盘扫描器
1.2 案例:键盘输入两个数字,输出这两个数的和,差,积,商
-
算数运算符:+、-、*、/、%
-
注意:当使用/时,如果左右两边都是整数,就做相除取整运算,如果左右两边有任何一边是小数,就做正常的除法运算
package basic;
import java.util.Scanner;
/**
* 案例一:键盘输入两个数字,输出这两个数的和
*
* 算术运算符: + - * "/" %
* 注意: 当使用 “/”时,如果左右两边都是整数,就做相除取整运算
* 如果左右两边有任何一边是小数,就做正常的除法运算
* @author NING MEI
*
*/
public class Demo05 {
public static void main(String[] args){
//1.创建键盘扫描器
Scanner key = new Scanner(System.in);
//提示用户输入第一个数字
System.out.println("请输入第一个数字:");
//接收第一个数字
int num = key.nextInt();
//提示输入第二个数字
System.out.println("请输入第二个数字");
//接收第二个数字
//int num1 = key.nextInt();
double num1 = key.nextDouble();
//将两个数字加起来,得出结果
double sum = num/num1;
//输出结果
System.out.println(num+"/"+num1+"="+sum);
//关闭键盘扫描器
key.close();
}
}
- 上面案例中,如果要算加,减法,修改一下运算符即可。
- 上面案例中,我们用了 + ,- ,* ,/ 这些事Java中的运算符
关于键盘扫描器还有有疑问的同学可以QQ扫描下方二维码,寻求帮助
二,运算符
2.1 赋值运算符
- 赋值运算符以符号 ”=“ 表示,它是一个双目运算符(对两个操作数做处理),其功能是将右边操作数所包含的值赋给左边的操作数,例如:
package basic;
/**
* 1,赋值运算符
* 赋值运算符以符号 ”=“ 表示,它是一个双目运算符(对两个操作数做处理),其功能是将右边操作数所包含的值赋给左边的操作数,例如:
*
* 左边的操作数必须是一个量,而右边的操作数则可以是变量(如:number、a)、常量(如123、'book')、有效的表达式(如:3*28)
*/
public class Demo0601 {
public static void main(String[] args) {
// int a = 100;//该表达式是将100赋值给变量a
//
// int i=1,j=2,k=3;//定义整型变量i,j,k
// i=6;//变量=常数
// k=i+j;//变量=表达式
// final int val=5;//定义整型常量val
//
// 5=k;//不能赋值给常量
// i+j=k;//右值不能被赋值
int a, b, c = 11; // 声明整型变量a、b、c
a = 32; // 将15赋值给变量a
c = b = a + 4; // 将a与4的和赋值给变量b,然后再赋值给变量c,开发中不建议这么写
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
2.2 算术运算符
- +(加)、-(减)、*(乘)、/(除)、%(取余)
package basic;
/**
* 算术运算符:+、-、*、/、%
* @author Administrator
*
*/
public class Demo0602 {
public static void main(String[] args) {
int num1 = 5;
int num2 = 12;
System.out.println("num1+num2的和为:" + (num1 + num2));
System.out.println("num1-num2的差为:" + (num1 - num2));
System.out.println("num1*num2的积为:" + (num1 * num2));
System.out.println("num1/num2的商为:" + (num1 / num2));
System.out.println("num1%num2 的余数为:" + (num2 % num1));
}
}
2.3,条件(比较、关系)运算符
-
关系运算符属于双目运算符,用来判断一个操作数与另外一个操作数之间的关系。
-
<(小于)、>(大于)、==(等于)、!=(不等于)、<=(小于等于)、>=(大于等于)
-
注意:比较运算符一般用于组成条件表达式,结果都是布尔类型的,要么为true要么为false。
package basic;
import java.util.Scanner;
/**
* 3,条件(比较、关系)运算符: 关系运算符属于双目运算符,用来判断一个操作数与另外一个操作数之间的关系。
* 比如: < > <= >= == !=(不等于)
* 注意:比较运算符一般用于组成条件表达式,结果都是布尔类型的,要么为true要么为false
*/
public class Demo0603 {
public static void main(String[] args) {
Scanner key = new Scanner(System.in);
System.out.println("请输入第一个数字");
int num1 = key.nextInt();
System.out.println("请输入第二个数字");
int num2 = key.nextInt();
System.out.println(num1+"<"+num2+"? 结果:"+(num1<num2));
System.out.println(num1+">"+num2+"? 结果:"+(num1>num2));
System.out.println(num1+"<="+num2+"? 结果:"+(num1<=num2));
System.out.println(num1+">="+num2+"? 结果:"+(num1>=num2));
System.out.println(num1+"=="+num2+"? 结果:"+(num1==num2));
System.out.println(num1+"!="+num2+"? 结果:"+(num1!=num2));
key.close();
}
}
2.4,位运算符
&(与)、|(或)、^(异或)、~(非)
说明:位运算符如果作用在数字上,需要将数值转换成二进制再运算
1. &(与):按位与,只有当同时为1的时候结果才为1,否则为0.
3&4
3:0011
4:0100
结果:0000 System.out.println(3&4)为0
2. |(或):按位或,只有当同时为0的时候结果才为0,否则为1.
3|4
3:0011
4:0100
结果:0111 System.out.println(3|4)为7
3. ~(非):0变1,1变0
~3
3:0011
结果:1100 System.out.println(~3)为-4(最前面的1表示为符号,为1就是负,为0为正)
4. ^(异或):两边相同为0,不同为1:。
3^4
3:0011
4:0100
结果:0111 System.out.println(3^4)为7
位运算符作用在条件表达式上
&:当左右两边条件表达式都为true的时候结果为true,否则为false
4<5&4<6 输出为true
4<5&4>6 输出为false
| :当左右两边条件表达式都为false的时候结果为false,否则为true
4>5|4>6 输出为false
4<5|4>6 输出为true
package basic;
import java.util.Scanner;
/**
* 4,位运算符
* | 或 :左右两边有一边为true整个结果就为true
* & 与 :左右两边都为true时,整个结果才为true
*
* | 或,左右两边都是整数时,做按位或(先将整数转换成2进制,然后在将两个二进制数按位或,有一个为1,结果就为1,将最后的结果再转换成10进制)
* &(与):按位与,只有当同时为1的时候结果才为1,否则为0
*
* 4个二进制位可以表示从0到15的数字,这刚好是1个16进制位可以表示的数据,也就是说,将二进制转换成16进制只要每4位进行转换就可以了。
*
*/
public class Demo0604 {
public static void main(String[] args) {
Scanner key = new Scanner(System.in);
System.out.println("请输入第一个数字");
int num1 = key.nextInt();
System.out.println("请输入第二个数字");
int num2 = key.nextInt();
System.out.println(num1<num2|num1==num2);
System.out.println(num1<num2&num1==num2);
//面试题 3|4 =?
System.out.println(3|4);//7
System.out.println(3&4);//0
key.close();
}
}
2.5,逻辑运算符:&&(双与)、||(双或) 、!(非)、^(异或)
!(非):取反,如果a为false,则!a为true
^ (异或):a^b,如果a与b有且只有一个为true,则为true
&&:当左右两边条件表达式都为true的时候结果为true,否则为false
4<5&&4<6 输出为true
4<5&&4>6 输出为false
|| :当左右两边条件表达式都为false的时候结果为false,否则为true
4>5||4>6 输出为false
4<5||4>6 输出为true
双&&和||对比&和|:
-
对于&&而言,如果左边表达式为false,就已经能够表明整个表达式为false,右边的表达式就不会再做判断,会被屏蔽掉(语句短路)
-
对于||而言 ,如果左边左边表达式为true,就已经能够表明整个表达式为true,右边的表达式就不会再做判断,会被屏蔽掉(语句短路)
一般情况下建议使用双&&和||
自加,自减:
自加:前++,比如(++j),表示先自加1然后再赋值。
后++,比如(j++)表示先赋值然后再自加1
package basic;
import java.util.Scanner;
/**
* 5,逻辑运算符
* || 或 左右两边有一边为true整个结果就为true
* && 与 左右两边都为true时,整个结果才为true,只要有一边为false整个结果都为false
*/
public class Demo0605 {
public static void main(String[] args) {
// Scanner key = new Scanner(System.in);
// System.out.println("请输入第一个数字");
// int num1 = key.nextInt();
// System.out.println("请输入第二个数字");
// int num2 = key.nextInt();
//
// System.out.println(num1<num2||num1==num2);//true
// System.out.println(num1<num2&&num1==num2);//false
// key.close();
//
//笔试题
int x = 1;
int y = 2;
int z = 3;
boolean ok = x++<y++|++y<z++;
System.out.println(ok);//true
System.out.println(x);//2
System.out.println(y);//4
System.out.println(z);//4
/*
* && 和 || 会造成语句短路
* 对于|| 而言,左右两边有一边为true结果就为true,也就是,当左边为true时,
* 右边的结果对整体的结果没有影响,此时就不需要执行右边的代码,右边的代码就会被频闭掉(被短路)
*/
// boolean ok = x++<y++||++y<z++;
// System.out.println(ok);//true
// System.out.println("x:"+x);//2
// System.out.println("y:"+y);//3
// System.out.println("z:"+z);//3
// boolean ok = x++>y++||++y<z++;
// System.out.println(ok);//false
// System.out.println("x:"+x);//2
// System.out.println("y:"+y);//4
// System.out.println("z:"+z);//4
// boolean ok = x++>y++&&++y<z++;
// System.out.println(ok);//false
// System.out.println("x:"+x);//2
// System.out.println("y:"+y);//3
// System.out.println("z:"+z);//3
//自加和自减
//自加:
// 前++ 比如 ++j 表示,先自加1 再把加1后的结果赋值出去
// 后++ 比如 j++ 表示,先把自己的值赋值出去,再自加1
int j = 1;
int i = j++;
System.out.println(i);//1
System.out.println(j);//2
i = ++j;
System.out.println(i);//3
System.out.println(j);//3
//自减
// 前-- 比如--j 表示,先自减1 再把加1后的结果赋值出去
// 后-- 比如j-- 表示,先把自己的值赋值出去,再自减1
}
}
2.6,三目运算符
格式:条件表达式?值1:值2
表示:如果条件表达式成立就取1,不成立就取2
int age=13;
boolean ok =age>=18?true:false;
注意:值1和值2的数据类型必须相同,值式什么类型的,就需要用对应变量类型变量取接收
package basic;
import java.util.Scanner;
/**
* 6,三目运算符
* 格式:条件表达式?值1:值2;
* 条件表达式:由条件(比较)运算符组成的,最终结果为true或者false的表达式
* 含义:如果条件表达式结果为true就取值1作为最终的结果,如果结果为false就取值2作为结果
*
* 注意:格式中的值1和值2 他们的数据类型,必须一样
*/
public class Demo0606 {
public static void main(String[] args) {
Scanner key = new Scanner(System.in);
System.out.println("请输入年龄:");
int age = key.nextInt();
//String是Java中的字符串,先使用后面讲
//String say = age>=18?"可以进入网吧":"回去喝奶~~";
double i = age>=18?10:0.1;//int隐式转换为double了
//System.out.println(say);
// int j = 10;
// double d = j;
key.close();
}
}
2.7,运算符的优先级
括号 > 算数运算符 >关系运算符 > 逻辑运算符&& || > 三目运算符 > 赋值运算符