一、运算符
1.按功能分类
算术运算符:+ - * / %(取余) ++ --
赋值运算符:+= -= *= /= =
比较(关系)运算符: == != > < >= <=
得出的结果都是: boolean类型,true或fasle
逻辑运算符: & | ^ ! && ||
位移运算符: << >> >>>
位运算符: & | ^
三目运算: boolean类型表达式 ? 结果1 : 结果2
2.按操作个数分类:
一元(一目)运算符: a++
二元(二目)运算符: a + b a > b a == b
三元(三目)运算符: 条件 ? 结果1 : 结果
3.逻辑运算符: & | ^ ! && ||
&、&&: 一假既假
|、||: 一真既真
& 和 && 的区别:
&: 无论如何,都会将整个表示执行完成
&&:只要遇到false,则停止判断,称之为短路操作
得出的结果都是: boolean类型,true或fasle
4.位运算符: & | ^
和二进制的计算相关: 0 和 1
&: 0 和 1 与上 都是 0
|: 0 和 1 或上 都是 1
^: 相同为0,不同为1
5.位移运算符: << >> >>>
<<: 左移,相当于 ×2
>>: 右移,相当于 ÷2,如果是负数按照符号位本身填入
>>>: 无符号右移,相当于 ÷2,如果是负数,
则永远补0,得到的永远都是一个正大数
6.三目运算: boolean类型表达式 ? 结果1 : 结果2
二、逻辑控制语句
1.顺序结构
2.分支结构
条件: 一定会得出一个boolean类型结果
if(条件)
if - else
if- else if - else
switch(要判断的值)-case:
语法结构:
switch(要判断的值){
case:
break;
case:
break;
case:
break; 注意:
}
两个switch例题;
ackage c_switch;
import java.util.Scanner;
/*
模拟计算器功能,对键盘录入的两个int类型的数据进行加、减、乘、除的运算,并打印运算结果。
要求:
键盘录入三个整数,其中前两个整数代表参加运算的数据,
第三个整数为要进行的运算
(1:表示加法运算,2:表示减法运算,3:表示乘法运算,4:表示除法运算)
演示效果如下:
请输入第一个整数: 66
请输入第二个整数: 44
请输入您要进行的运算(1:表示加法,2:表示减法,3:表示乘法,4:表示除法): 1
控制台输出:66+45=100
*/
public class Work01 {
public static void main(String[] args) {
//1.定义控制台对象
Scanner sc = new Scanner(System.in);
//2.获取整数
System.out.println("请输入第一个整数:");
int num1 = sc.nextInt();
System.out.println("请输入第二个整数:");
int num2 = sc.nextInt();
System.out.println
("请输入您要进行的运算 (1:表示加法,2:表示减法,3:表示乘法,4:表示除法)");
int type = sc.nextInt();
switch (type) {
case 1:
System.out.println(num1 + " + " + num2 + " = " + (num1 + num2));
break;
case 2:
System.out.println(num1 + " - " + num2 + " = " + (num1 - num2));
break;
case 3:
System.out.println(num1 + " * " + num2 + " = " + (num1 * num2));
break;
case 4:
System.out.println(num1 + " / " + num2 + " = " + (num1 * 1.0 / num2));
break;
default:
System.out.println("您输入的运算类别有误");
break;
}
}
}
package c_switch;
/*
switch
*/
public class Demo01 {
public static void main(String[] args) {
//需求: 判断每个月都有多少天,输出天数
int month = 5;
//4 6 9 11 = 30 / 1 3 5 7 8 10 12 = 31 / 29 = 2
/*if(month == 4 || month == 6
|| month == 9 || month == 11){
System.out.println("天数为30天");
}else if (month == 1 || month == 3
|| month == 5 || month == 7
|| month == 8 || month == 10
|| month == 12){
System.out.println("天数为31天");
}else if (month == 2){
System.out.println("天数为29");
}else{
System.out.println("输入月份有误");
}*/
int a1 = 10;
//判断两个值是否相等,可以使用switch 替代 if-else 的判断
//条件可以存储的变量类型: byte、short、char、int、String、枚举
switch (month){
case 4:
case 6:
case 9:
case 11:
System.out.println("天数为30天");
break;
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:
System.out.println("天数为31天");
break;
case 2:
System.out.println("天数为29天");
break;
default:
//相当于if-else if - else 中的else
//default的内容
System.out.println("输入月份有误");
}
}
}
要判断的值取值类型:
byte、short、char、int、String、枚举
case中需要注意:
a.case后面根的值是要比较的值,只能是常量不能使变量.
b.因为case具有穿透性,需要使用break结束.
3.循环结构
1)for循环
for(int i = 0; i < 10; i++){}
for(①初始化值;②判断是否进入循环的条件;③步长){
④符合循环条件后,执行的内容(循环体)
}
执行顺序: ①②④③ > ②④③ > 直到②不符合
注意:
判断是否进入循环的条件是可以跟初始化值没有任何关系
有次数,有规律可循,会使用for循环
来一个for循环例题;
package d_for.work;
/*
在控制台输出所有的“水仙花数”,要求每行打印2个
提示:
System.out.print (打印内容); 打印后不换行
System.out.println(打印内容); 打印后换行
*/
public class Work02 {
public static void main(String[] args) {
//同于统计个数的变量
int count = 0;
for (int i = 100; i <= 999; i++) {
//获取个位
int units = i % 10;
//获取十位
int decade = i / 10 % 10;
//获取百位
int hundreds = i / 100;
if(i == units*units*units +
decade*decade*decade +
hundreds*hundreds*hundreds){
//水仙花数
System.out.print(i + " ");
//个数+1
count++;
if (count % 2 == 0){
System.out.println();
}
}
}
}
}
Debug模式测试:
作用:一般用于精准数据变化的监控
F7: 执行下一行代码
F8: 跳过这一行代码
F9: 直接跳到下一个断点位置
2)while循环
语法结构:
①初始化值;
while(②判断是否进入循环的条件){
④符合循环条件后,执行的内容(循环体)
③步长
}
执行顺序: ①②④③ > ②④③ > 直到2不满足..
特点:不知道次数,没有规律可循
例题
package e_while.work;
import java.util.Scanner;
/*
从键盘读入个数不确定的整数,
并判断读入的正数和负数的个数,输入为0时结束程序。
positive 正数
minus 负数
*/
public class Work02 {
public static void main(String[] args) {
Scanner cs = new Scanner(System.in);
System.out.println("请输出正数: ");
int num = cs.nextInt();
int positiveCount = 0;
int minusCount = 0;
while(num != 0){
if(num > 0){
positiveCount++;
}
if (num < 0){
minusCount++;
}
//用户再次输入
num = cs.nextInt();
}
}
}
3)do-while循环
语法结构:
①初始化值;
do{
④符合循环条件后,执行的内容(循环体)
③步长
}while(②判断是否进入循环的条件);
执行顺序:①④③② > ②④③ > 直到②不满足
例题
package e_while.work;
import java.util.Scanner;
/* do - while循环实现:
有猜数字游戏,其游戏规则为:
程序内置一个 1 到 1000 之间的数字作为猜测的结果,
获取随机数: int num = Math.random * 1000 (0,1)
由用户猜测此数字。new Scanner();
用户每猜测一次,由系统提示猜测结果:大了、小了或者猜对了;
while() - if()判断
直到用户猜对结果,则提示游戏结束。 break结束
用户可以提前退出游戏,即,游戏过程中,如果用户录入数字0,则游戏终止。
*/
public class Work05 {
public static void main(String[] args) {
//1.随机生成程序内置数值
int num = 333;
Scanner sc = new Scanner(System.in);
int userInput;
do{
System.out.println("请输入数字: ");
//2.用户猜测此数字
userInput = sc.nextInt();
//5.输入0,则退出
if (userInput == 0){
break;
}
//3. 系统提示猜测结果:大了、小了或者猜对了
if(userInput > num){
System.out.println("结果大了");
}else if (userInput < num){
System.out.println("结果小了");
}else {
System.out.println("结果猜对了");
}
}while(userInput != num);//条件判断
}
}
4)三种循环结构中:
先判断后执行: for、while
知道次数,有规律可循则选择for循环
不知道次数,没有有规律可循则选择while循环
先执行后判断:do-while
5)跳转控制语句
a.continue:跳过本次循环,继续下一次循环
b.break:结束循环
return:结束循环(不属于跳转控制语句)