day03(8月4日)
一、8月4日课程内容(紧接8月3日)
五、Java的运算符
一个条件控制——关系运算符
多个条件控制——逻辑运算符
5.3、逻辑运算符 (与&&、或||、非! )
参与逻辑运算的变量或者表达式都是boolean类型,运算结果也是boolean类型。
运算规则如下所示:
逻辑运算符 | |
---|---|
与 && | 当且仅当两个操作数都为真,条件才为真 |
或 || | 两个操作数任何一个为真,条件才为真 |
非 ! | 如果条件为true,则逻辑非运算将得到false;如果条件为false,则逻辑非运算将得到true。 |
5.4、赋值运算符 ( = 、+=、-=、*=、/=、%=)
赋值运算符就是为变量赋值的运算符
运算符 | 运算规则 | 范例 | 结果 |
---|---|---|---|
= | 赋值(要和关系运算符==区别清楚) | int a=2; | 2 |
+= | 加后赋值 | int a=2; a+=2 | 4 |
-= | 减后赋值 | int a=2; a-=2 | 0 |
*= | 乘后赋值 | int a=2; a*=2 | 4 |
/= | 除后赋值 | int a=2; a/=2 | 1 |
%= | 取模后赋值 | int a=2; a%=2 | 0 |
5.5、字符串连接符 ( + )
字符串连接就是将两个字符串连接为一个新的字符串。因为字符串是Java最常用的显示信息方式,所以字符串连接也是最常见的字符串运算。Java字符串的连接使用“+”实现。
加号两侧都是数值就是数值加法。
System.out.println(10+20);//30,此时连接符作为运算符,30是一个数字
如果加号的一侧出现了字符串,就按照字符串连接运算。
System.out.println("10"+20);//1020
System.out.println(10+20+"");//此时30是一个字符串
System.out.println(10+20+""+30);//3030
5.6、多元运算符——三目运算符(表达式?值1:值2)
多元运算符——三目运算符
语法:boolean表达式?值1:值2
运算规则:如果boolean表达式的值为true,表达式的值为值1。如果boolean表达式的值为false,表达式的值为值2。
if(a<b){
min=a;
else
min=b;
}
//有些选择分支结构可以使用简单的条件运算符来代替
min=(a<b)?a:b;
int a=25,b=10;
int max;
//求最大值
max=(a<b)?b:a;
System.out.println("a、b之间的最大值为"+max);
5.7、转义符
5.8、运算符优先级
优先级表格
运算符的结合性:相同等级的运算符在运算时按照结合性顺序进行运算。
顺序调整:可以用()调整优先级顺序
六、Java语法
6.1、Scanner输入流
用户交互Scanner(输入流),Scanner是Java自带的实用工具包java.util包中的一个类,是用来扫描输入文本的,就是用来获取用户的输入。
Scanner的基本的语法:
//该类需import导入模块
import java.util.Scanner
//创建Scanner类对象,附属于标准输入流System.in
Scanner xxx = new Scanner(System.in);
如果要输入int或double类型的数据,在Scanner类中同样有支持,声明相应类型的变量在使用Scanner.nextXxx();来读取。
//提示用户输入商品单价price
System.out.println("请输入商品单价:");
double price=scanner.nextDouble();
//提示用户输入商品数量count
System.out.println("请输入商品数量:");
double count=scanner.nextDouble();
//提示用户输入支付金额money
System.out.println("请输入支付金额:");
double money=scanner.nextDouble()
//计算商品总价totalprice
double totalprice=price*count;
System.out.println("商品共计"+totalprice);
通过Scanner类的next()与nextLine()方法获取输入的字符串,在读取前我们一般需要使用hasNext()与hasNextLine()判读是否还有输入的数据。
next()方法获取输入的字符串
public static void main(String[] args) {
// 创建一个扫描器,用于接收键盘输入的数据,通过控制台输入数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一段字符串,用next方式接收:");
// 判断用户有没有输入字符串
if (scanner.hasNext()) {
// 使用next方式接收
String s = scanner.next();
System.out.println("输出的内容为:"+s);
}
// 关闭IO流节省资源,System.in属于IO流,一旦打开,它一直在占用资源,因此使用完毕后要关闭
scanner.close();
}
请输入一段字符串,用next方式接收:
hubo hhh
输出的内容为:hubo
//空格后的内容没有被输出
nextLine()方法获取输入的字符串
public static void main(String[] args) {
// 创建一个扫描器,用于接收键盘输入的数据,通过控制台输入数据
Scanner scanner = new Scanner(System.in);
System.out.println("请输入一段字符串,用nextLine方式接收:");
// 判断用户有没有输入字符串
if (scanner.hasNextLine()) {
// 使用nextLine方式接收
String s = scanner.nextLine();
System.out.println("输出的内容为:"+s);
}
// 关闭IO流节省资源,System.in属于IO流,一旦打开,它一直在占用资源,因此使用完毕后要关闭
scanner.close();
}
请输入一段字符串,用nextLine方式接收:
hubo hhh
输出的内容为:hubo hhh
//空格后的内容被输出
6.2、流程控制语句
1、顺序结构(天然结构)
逐行执行代码,每行必走。
程序按照从上到下顺次执行指令序列。
2、分支结构(if 分支结构、switch 分支结构)
根据分支条件选择一路指令序列执行。使用分支流程控制语句可以实现有条件的执行,并非每句都执行。
if 分支结构
if 语句是使用最多的条件分支结构,它属于选择语句,也可以成为条件语句。
语法结构:
if(条件——boolean表达式){
满足条件则...
}
else{
不满足条件则....
}
Scanner scanner=new Scanner(System.in);
System.out.println("请输入成绩:");
int score=scanner.nextInt();
if (score>=60&&score<=80) {
System.out.println("成绩评定为良!");
}
else if(score>=80&&score<=100){
System.out.println("成绩评定为优秀!");
}
else{
System.out.println("成绩评定为一般!");
}
if 分支结构又可以分为三种分支
单分支结构
if(boolean 类型表达式){
//条件为true,执行的代码块
}
双分支结构
if(boolean 类型表达式){
//条件为true,执行的代码块
}else{
//条件为false,执行的代码块
}
多分支结构
if(boolean 类型表达式){
代码块1;
}else if(boolean 类型表达式){
代码块2;
}else if(boolean 类型表达式){
代码块3;
}
....
switch 分支结构
能用switch…case分支结构解决的问题,都可以用if…else解决,但是能用if…else分支结构解决的问题,不一定能用switch…case解决。
switch后面的表达式可以是哪些类型数据:整型、字符型、布尔型、枚举型
switch()语句的括号内的表达式必须是整型,它要与case 里的值呼应
字符型,只有字符常量可以,例如 ‘a’ ‘b’ ‘6’ '\r’实际上是整型。
布尔型(真,假) 实际上是 0, 1 …整型。
enum 型也可以,凡表达式值为整型的都可以
语法结构:
switch(条件){
case 1: //每一个分支块用case表示,用冒号表示分支内容
代码块;
break; //跳出当前程序块
case 2:
代码块;
break;
....
default: //类似于else功能
代码块;
}
int num=2;
switch (num) {//switch(key),填入key值,与下面的case(value)中的value值匹配
//key值可以是(byte short int char String)类型,但不可以是浮点型
case 1://if(条件)
System.out.println("hhh~");
break;//跳出当前case块
case 2://else if(条件)
System.out.println("find you !");
break;//如果不跳出case 2 分支,也会执行default中的代码
default://所有case未匹配到时执行default中内容
System.out.println("no~");
break;
}
分支结构中如果只有一条路可走,未必一定执行;分支结构中如果有多条路可走,必走其中一条。
3、循环结构(如果…则继续)
循环就是指循环往复的执行,反复执行一个或者多个相同的或相似的代码。
循环的四要素:循环变量的初始化;循环的条件;循环变量的改变;循环体。
while循环
while循环:不计次,先判断再执行,有可能一次也不执行。
while循环的结构:
while(循环条件 boolean){//1、首先计算循环表达式的值,如果循环条件是true,则执行循环体
循环体 //2、执行完毕后再次判断循环条件是否为true,直到表达式的值是false为止
}
利用while循环来实现猜数循环
/*猜数游戏*/
//利用强制转换((Math.random*100)+1)为int类型生成0-100之间的随机数
int num=(int)(100*Math.random()+1);//0-100之间的随机数
//在控制台上输出生成的随机数
System.out.println(num);//在控制台上输出随机生成数
//导入Scanner类,让用户输入数字
Scanner scanner=new Scanner(System.in);
System.out.println("开始猜数吧!");
//使用Scanner.nextInt()声明int类型的变量guess
int guess=scanner.nextInt();
//利用while循环进行多次猜数
while(guess!=num){//判断条件为猜的数与生成的随机数不等
if (guess<num) {
System.out.println("小啦!");
}else if (guess>num) {
System.out.println("大啦!");
}
System.out.println("继续猜吧!");
//当猜的数guess与生成的随机数相等时,跳出循环
guess=scanner.nextInt();
}
//跳出循环并输出语句
System.out.println("厉害啦!猜对啦!");
开始猜数吧!
12
小啦!
继续猜吧!
99
大啦!
继续猜吧!
88
厉害啦!猜对啦!
do while循环
do while循环:不计次循环,先执行一次再进行判断是否继续执行。
do while循环的结构:
do{
循环体;
}while(循环条件);
利用do while循环来实现猜数循环
/*猜数游戏*/
//利用强制转换((Math.random*100)+1)为int类型生成0-100之间的随机数
int num=(int)(100*Math.random()+1);//0-100之间的随机数
//在控制台上输出生成的随机数
System.out.println(num);//在控制台上输出随机生成数
//导入Scanner类,让用户输入数字
Scanner scanner=new Scanner(System.in);
System.out.println("开始猜数吧!");
//使用Scanner.nextInt()声明int类型的变量guess
int guess=scanner.nextInt();
//利用do-while循环进行多次猜数
do{
guess=scanner.nextInt();
if (guess<num) {
System.out.println("太小了!");
}else if (guess>num) {
System.out.println("太大了");
}else if (guess==num) {
System.out.println("猜对啦!");
}
}while(guess!=num);//猜测数据guess与生成的随机数num不等
开始猜数吧!
33
太小了!
66
太大了
12
猜对啦!
for循环
计次循环,固定次数循环结构,万能循环。
for循环的要素:声明循环变量(循环中反复执行的数)和初始量;循环方向(向循环结束的方向循环);循环体。
for循环的语法结构:
for(声明并初始化循环变量(1);循环条件(2);变量改变的方向(3)){
循环体(3);
}
for循环变量的作用域,只在循环内有效。在for以外定义的变量作用于所有循环。
//利用for循环实现九九乘法表
for(int a=1;a<=9;a++){
//9的乘法表乘法表
for(int b=1;b<=a;b++){
System.out.print(a+"*"+b+"="+a*b);
}
System.out.println();
}
6.3、Math类中的随机数random( )
jJava的Math类是属于java.lang中的一个类,math工具包提供了与数学有关的常量和计算方法,包括PI、E等常量,还有sin( )、cos( )等函数。Java在Math类还提供了random( )用于产生随机数。Math.random()返回值是一个0到1之间的随机数,其范围包括0,不包括1。
利用Math.random()返回值是一个0到1之间的随机数,可以进一步得到任何范围内的随机数
Math.random() | 0.00001 | 0.2310 | 0.5678 | 0.9978 |
Math.random()*100 | 0.001 | 23.10 | 56.78 | 99.78 |
(int) Math.random()*100 | 0(强制转换成int类型,舍弃小数部分) | 23 | 56 | 99 |
((int) Math.random()*100)+100 | 100 | 123 | 156 | 199 |
/*练习:掷骰子*/
//使用math工具类,java.lang.math,math工具包提供了一系列数学的相关方法
//random代表随机数,取值范围为0.0-1.0,不包括1.0的所有浮点型(double)随机数
//Math.random() 0.0-0.99999999
//Math.random()*100 0.0-99.9999999
//强制转换成int类型 (int) 0-99
//获取1-6之间的整数随机数
int i=(int)(6*Math.random()+1);//强制转换为int类型以后小数点部分就舍弃了
if (i<3) {
System.out.println("");
}
6.4、Random API
为了简化随机数的使用,Java提供了Random API,封装了Math.random( )生成随机数的算法,利用这个API提供的方法就可以方便的获取随机数。
使用步骤 | |
---|---|
1、导入Random API,是java.util工具包下的一个类 | import java.util.Random; |
2、创建Random对象 | Random xxx = new Random( ); |
3、调用random的方法获得随机数 | int n=random.nextInt(100);//参数100表示随机数的最大取值范围,此时方法返回的随机数范围为:[0,100) |
/*生成100-200之间的随机数*/
Random random=new Random();
int n=random.nextInt(100)+100;
System.out.println(n);
---------------------------------- |
| 1、导入Random API,是java.util工具包下的一个类 | import java.util.Random; |
| 2、创建Random对象 | Random xxx = new Random( ); |
| 3、调用random的方法获得随机数 | int n=random.nextInt(100);//参数100表示随机数的最大取值范围,此时方法返回的随机数范围为:[0,100) |
/*生成100-200之间的随机数*/
Random random=new Random();
int n=random.nextInt(100)+100;
System.out.println(n);
Random提供了生成各种类型的随机数的方法,调用方法就可以得到随机数。Random和Math.random()没有本质区别,可自由选择。