Java第四章和第五章:运算符加控制结构
第四章:运算符
算数运算符
-
-
-
-
/
-
%:
-
a%b,当a是小数时,公式 = a - (int)a / b * b 注:跟C++不同,C++要求%两侧必须是整数 如:-10.5%3 但因为-10.5是近似的,所以算出的结果也是近似的(即十分接近,但不相等,若要判断是否相等根据差<0.0001来判断)
-
-
++
-
+(字符串拼接)
面试题: 1. int i=1; i = i++;//规则:使用临时变量:(1)temp = i;(2)i = i+1;(3)i = temp; System.out.println(i);//1 2. int i=1; i = ++i;//规则:使用临时变量:(1)i = i+1;(2)temp = i;(3)i = temp; System.out.println(i);//2
赋值运算符
-
=
-
复合赋值运算符:自动进行类型转换
-
如
byte b = 1; b = b + 2;//报错,int-->byte b += 2;//不报错,相当于b = (byte)(b + 2);
-
关系运算符(比较运算符)
- <
- >
- =
- !=
- <=
- =>
- instanceof:检查是否是类的对象
逻辑运算符
- 逻辑与&
- 逻辑或|
- 逻辑异或^
- 短路与&&
- 短路或||
- 取反!
位运算符
- <<:算数左移
- >>:算数右移
- >>>:逻辑右移
三元运算符
定义:
条件表达式?表达式1:表达式2
口诀:一真大师
运算符优先级
(),{}等
单目运算符
算数运算符
位移运算符
比较运算符
逻辑运算符
三元运算符
赋值运算符
标识符命名规则和规范
-
规则
-
1.字母,数字,下划线,$组成 2.数字不可以开头 3.不能用关键字和保留字 4.不能包含空格 5.区分大小写
-
-
规范
-
1.包名:多单词组成时所有字母小写:aaa.bbb.ccc 2.类名、接口名:大驼峰命名法 3.变量名、方法名:小驼峰命名法 4.常量名:所有字母都大写,单词之间_间隔,如:TAX_RATE
-
关键字和保留字
关键字:被赋予特殊含义,用做专门用途的字符串(都为小写)
保留字:尚未使用,以后版本可能会作为关键字使用
键盘输入
import java.util.Scanner
Scanner reader = new Scanner(System.in)
double c = reader.nextDouble()
String a = reader.next()
第五章:控制结构
顺序结构
顺序执行
分支结构
-
单分支:if
-
双分支:if-else
-
多分支:if-else if…-else
-
嵌套分支
-
switch分支
-
细节
1.表达式数据类型,应和case后的常量类型一致,或者可以自动转换 2.switch(表达式)中表达式的返回值必须是:byte,short,int,char,enum(枚举),String 3.case子句中的值必须是常量,不能是变量
-
-
switch和if的比较
-
如果判断的具体数值不多,而且符合byte,short,int,char,enum[枚举],String,使用switch 对区间进行判断,对结果为boolean类型判断,使用if
-
循环结构
-
四要素:循环变量初始化,循环判断条件,循环变量迭代语句,循环体
-
for循环
-
细节
1.for(;;):表示无限循环 2. int i = 1;//循环条件 for(;i<10;i++){ 循环体 } 循环条件是否放在for里面的区别:作用域不同 如果循环结构结束之后还需使用i变量:就将循环变量初始化放在外面
-
编程思想
1.化繁为简:即将复杂的需求,拆解成简单的需求,逐步完成 2.先死后活:先考虑固定的值,然后转成可以灵活变化的值
-
-
while循环
循环变量初始化 while(循环条件){ 循环体 循环变量迭代语句 }
-
do-while循环
循环变量初始化 do{ 循环体 循环变量迭代语句 }while(循环条件)
-
多重循环:最多2-3层
break语句
功能:退出循环结构
细节:
可以通过标签指明终止哪一层语句块
如:
lable1:
for(;;){
lable2:
for(;;){
break label1;
}
}
continue语句
功能:结束本次循环,进入下次循环
细节
标签使用同break
return语句
功能:跳出所在方法
本章作业
统计班级成绩
-
统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生成绩从键盘输入]
统计三个班及格人数,每个班有5名同学
import java.util.Scanner; public class classNum { public static void main(String[] args) { /* 需求:统计3个班成绩情况,每个班有5名同学,求出各个班的平均分和所有班级的平均分[学生成绩从键盘输入] 统计三个班及格人数,每个班有5名同学 实现:编程思想:1.化繁为简: (1):for循环实现一个班级的5名同学成绩的输入 (2):算出总分sum和平均分average (3):if单分支统计及格人数passNum (4):for循环实现3个班级的情况 2.先死后活: (1):班级个数,班级人数 */ //代码实现: double sum = 0,totalSum = 0,aver = 0,totalAver = 0; int passNum = 0,totalPassNum = 0; int classNum = 3,stuNum = 5; for(int s = 0;s < classNum; s++){ for(int i = 0;i <stuNum;i++) { System.out.println("请输入学生的分数:"); Scanner reader = new Scanner(System.in); double score = reader.nextDouble(); sum += score; if (score >= 60) { passNum++; } } aver = sum / stuNum; totalSum += sum; sum = 0; System.out.println("本班平均分:" + aver); System.out.println("本班及格人数:"+passNum); totalPassNum += passNum; passNum = 0; } totalAver = totalSum / (classNum * stuNum); System.out.println("所有班级平均分:"+totalAver); System.out.println("所有班级及格人数:"+totalPassNum); } }
九九乘法表
-
九九乘法表
class chengfa { public static void main(String [] args){ /* 需求:九九乘法表 */ //代码实现 for(int i = 1;i <= 9;i++){ for(int j = 1;j <= i;j++){ System.out.print(j+" * "+i + " = " + j*i + "\t"); } System.out.println(); } } }
打印空心金字塔
- 打印空心金字塔
public class jinzita {
public static void main(String [] args){
/*
需求:打印空心金字塔
实现:
编程思想:1。化繁为简
(1):先打印半个金字塔
(2):打印整个金字塔
(3):将金字塔镂空
2。先死后活
(1):金字塔层数
*/
//代码实现(1):控制好*个数
int level = 5;
/*
for(int i = 0;i < 5;i++){
for(int j = 0;j < i;j++){
System.out.print("*");
}
System.out.println();
}*/
//代码实现(2):前面加空格,控制好*个数
/*
for(int i = 0;i < 5;i++){
for(int s = 0;s < level-i;s++){//*前输出空格
System.out.print(" ");
}
for(int j = 0;j < (2*(i+1)-1);j++){//*为1、3、5、7、9,为2*level - 1
System.out.print("*");
}
System.out.println();
}*/
//代码实现(3):除最后一层之外其他层只有第一个和最后一个输出*,最后一层*全部输出
for(int i = 0;i < level;i++){
for(int s = 0;s < level-i;s++){//*前输出空格
System.out.print(" ");
}
for(int j = 0;j < (2*(i+1)-1);j++){//*为1、3、5、7、9,为2*level - 1
if(j == 0|| j == (2*(i+1)-1)-1 || i == level-1){
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
打印空心菱形
4.打印空心菱形
public class lingxing {
public static void main(String [] args){
/*
需求:打印空心菱形
实现:
1.化繁为简:
(1):打印正金字塔
(2):打印正金字塔加倒金字塔
(3):镂空菱形
2.先死后活:
(1):菱形层数
*/
//代码实现(2):加倒金字塔,输出level-1层,i=4,3,2,1进行循环,可以使level-i=0,1,2,3输出空格
/*
int level = 5;
// 输出上半部分菱形
for (int i = 1; i <= level; i++) {
// 输出空格
for (int j = 1; j <= level - i; j++) {
System.out.print(" ");
}
// 输出星号
for (int j = 1; j <= 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}
// 输出下半部分菱形
for (int i = level - 1; i >= 1; i--) {
// 输出空格
for (int j = 1; j <= level - i; j++) {
System.out.print(" ");
}
// 输出星号
for (int j = 1; j <= 2 * i - 1; j++) {
System.out.print("*");
}
System.out.println();
}*/
//代码实现(3):
int level = 20;
// 输出上半部分菱形
for (int i = 1; i <= level; i++) {
// 输出空格
for (int j = 1; j <= level - i; j++) {
System.out.print(" ");
}
// 输出星号
for (int j = 1; j <= 2 * i - 1; j++) {
if(j ==1||j == 2 * i - 1)
{
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.println();
}
// 输出下半部分菱形
for (int i = level - 1; i >= 1; i--) {
// 输出空格
for (int j = 1; j <= level - i; j++) {
System.out.print(" ");
}
// 输出星号
for (int j = 1; j <= 2 * i - 1; j++) {
if(j ==1||j == 2 * i - 1)
{
System.out.print("*");
}
else{
System.out.print(" ");
}
}
System.out.println();
}
}
}
换行输出
5.每5个输出一行
int count = 0;
//每执行一次count++
if(count % 5 == 0){
System.out.println();
}