如何接收键盘录入数据
java.util.Scanner类常用于控制台的输入,当需要使用控制台输入时即可调用这个类。
使用方法
1、首先需要构造一个Scanner类的对象,并且与标准输入流System.in关联Scanner sc = new Scanner(System.in);
2、调用Scanner类对象sc的方法从输入流中获取你需要的输入
说明:
当创建了一个Scanner类对象之后,控制台会一直等待输入,直到敲回车键结束,把所输入的内容传给对象sc,若要获取需要的内容,调用sc的方法即可
Scanner sc=new Scanner(System.in);
System.out.println("请输入园的半径值:"); //用于提示用户录入数据
int r=sc.nextInt(); //要求用户输入数据,否则阻塞等待用户输入
System.out.println("接受到的数据为"+r);
每次可以只输入一个数字,回车确认,例如123,只能被一个nextInt读取。也可以输入一组数字,例如123 456 789,每个数字之间用空格(一个或多个空格)隔开,可被多个nextInt()读取,空格及回车不会被读取。(注:输入数字中不能夹杂除数字、空格、回车之外的其他字符,否则会报错)
如何在控制台输出数据
System.out.println(数据);
System.out.println("请输入圆的半径值:");
int kk=100;
double res=3.14*kk*kk;
System.out.println("圆的半径值为"+kk+",对应面积为"+res);
表达式
表达式就是运算符、操作数以及方法调用的序列,用来说明某个计算过程并返回计算结果。按照运算符功能来分,基本的运算符分为算术运算符、关系运算符、位运算符、条件运算符等
1、算术运算符 +、-、*、/、%、++、--
2、关系运算符 >、<、>=、<=、==、!=
3、逻辑运算符 &&、 ||、 !。注意:逻辑计算支持短路操作
4、位运算符 &、|、^、~、<< 、 >>、>>>。注意:为运算符不支持短路操作
5、赋值运算符 =,+=,―=,*=,/=
6、三目条件运算符(?:)规则是完全一致的,使用的形式是: x ? y:z;
算术运算符+、-、*、/、%、++、--
+-*/
整除:参与运算的双方都是整数 10/3=3而不是3.33333
如果是10./3=3.333...这里由于10.是浮点数,则3会自动转换为大类型并参与计算,所以最终是10.0/3.0的计算结果
计算次序为先乘除后加减,如果优先级一致,则自动从左向右进行计算 10+2*5=20
/除法分母不能为0,否则出错
% 求余(取模) 10%3=1实际就是10除以3求余数double k=10.12;System.out.println(k%3);输出:1.1199999999999992 应该返回值为1.12,由于浮点数不能精确存放,所以返回值是一个类似值double d1=-10.12;double res=d1%3;System.out.println(res);输出值为-1.1199999999999992 求余计算中符号位不参与计算++和--是单目运算符i++等价于i=i+1,i--等价于i=i-1以++为例写法有2个:i++或者++ii++是先获取i的值,然后再对i加1int age=100;System.out.println(age++);输出为100System.out.println(age); 输出为101,因为上面进行加1++i是先对i加1,然后再获取i的值int age=100;System.out.println(++age);输出101,先加1然后获取值System.out.println(age); 输出101
例题
public class Oper11 {
public static void main(String[] args) {
int k = 0;
int res = k++ + k++ + k;
System.out.println(res); //3
int m = 0;
res = ++m + m++ + m;
System.out.println(res); //4
}
}
关系运算符>、<、>=、<=、==、!=
用于判断两个数据之间的大小关系,计算结果为boolean,如果成立返回为true,否则为false
double d1=10;
System.out.println(d1>3); //返回true
//==和=的区别:
k=100; //这是赋值运算符,意思是将=右边的计算结果储存在=左边的变量中
k==100; //这是比较计算符,意思是判断k是否值为100;如果是则返回true,否则false
//!=意思是判断是否不等于,表示如果相等时返回false,否则返回true
k!=100; //不等于判定,如果k值为100则返回false,如果k值不是100则返回true
//由于浮点数无法精确存放,所以判断k==1.0这个写法是错误的
//正确写法: a-b的绝对值小于1e-6
//Java提供了一个工具类Math,其中包含一个abs()的方法实现求绝对值
Math.abs(d1-1)<1e-6 //判断浮点类型的变量d1的值是否为1
浮点数的比较
double res = 0;
for(int i=0;i<10;i++)
res=res+0.1;
if(Math.abs(res-1)<1e-6) //|res-1|判断是否小于10的-6次方
System.out.println("计算结果为1");
else
System.out.println("计算结果不为1");
练习题:
1、键盘录入升数,输出对应的加仑数
//1加仑(美)=3.785 412升
Scanner sc=new Scanner(System.in);
System.out.print("请输入升数:");
double d=sc.nextDouble();
double g=d/3.785412;
g=g*10000+0.5;
g=(int)g/10000.; //如果写成(int)g/10000结果一定是没有小数,因为参与运算的双方是整数,所以除法是
// 整除运算
System.out.println(d+"升等于"+g+"加仑");
2、键盘录入华氏温度,输出对应的摄氏温度
//C = 5×(F- 32)/9
Scanner sc = new Scanner(System.in);
System.out.println("请输入华氏温度值:");
double f = sc.nextDouble();
// C = 5×(F- 32)/9
double cc = 5 * (f - 32) / 9;
//额外要求:只输出整数
System.out.println("华氏" + (int) f + "等于摄氏" + (int) cc);
逻辑运算符&&、||、!
注意:逻辑计算支持短路操作
表达多个条件之间的关系。例如年龄大于等于18并且年龄小于65
&&:与运算,含义是两个条件必须同时成立,可以翻译为并且
//年龄大于等于18并且年龄小于65
age>=18 && age<65
//算法规则:同真则真,其余为假
||:或运算,含义是两个条件中成立一个即可,可以翻译为或者
//年龄小于18岁或者年龄不小于65
age<18 || age>=65
//算法规则:同假则假,否则为真
!:非运算,含义是不是,用于对某个条件进行否定
//年龄不小于18
age >=18 //写法1
//!(age<18) //写法2
//算法规则:非真则假,非假则真
短路运算的一些小测试
int age=100;
char cc='A';
if(cc>='B' || age++<200){
System.out.println("ZZZZZ");
}
System.out.println(age);//?输出101
int age=100;
char cc='A';
if(cc>='B' && age++<200){
System.out.println("ZZZZZ");
}
System.out.println(age);//?输出100,因为短路的原因,导致age++并没有得到执行
int age=200;
char cc='A';
if(cc>='B' || age++<=200){
System.out.println("ZZZZZ");
System.out.println(age);//?输出201
}
赋值运算符=,+=,-=,*=,/=,%=
int k=100; 含义是将100赋值存储在k相应的存储单元中
k=k+3; 可以简写成k+=3; -= *= /= 类似
short k=3;
k=k+3; //出现了一个语法错误,因为k+3这里的3系统识别为int类型,所以计算时所有数据自动转换为int
//类型,必然计算结果也是int类型,将int类型的数据赋值给short类型变量----错误
System.out.println(k);
short k=3;
k+=3; //没有语法错误,因为+=这种符号中包含了自动类型转换
三目运算符
三目条件运算符 (? : ) 规则是完全一致的,使用的形式是:x?y:z;
需求:要求输入两个整数,输出最大的整数
使用if判断的实现方式:
public class Test8 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
int max = num1;
if (max < num2) max = num2;
System.out.println("两个整数("+num1+","+num2+")中最大的值为:"+max);
sc.close();
}
}
使用三目运算符实现
Scanner sc = new Scanner(System.in);
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
/*
* if(num1>num2) max=num1;
* else max=num2;
*/
int max = num1 > num2 ? num1 : num2;
System.out.println("两个整数("+num1+","+num2+")中最大的值为:"+max);
sc.close();
1、要求表达式1必须返回值为boolean类型
2、要求表达式2和表达式3的返回值类型一致
Object max = num1 > num2 ? num1 : "num2";
例题
int k=100;
int m=99;
int res=k>100?m++:++m;
System.out.println(res); //100 k>100不成立,则直接执行++m,而和表达式2:m++无关,不会执行System.out.println(m); //100