一.重点总结
1.if…else与三元运算符比较
- 三元运算符实现的,if…else一定可以实现
- if…else实现的,三元运算未必能实现 。 比如if…else里有多条语句,并且不是赋值语句时,三元运算就不能实现,因为三元运算只能赋值。
2.if…else if…else 语句语法
/if(布尔表达式 1){
//如果布尔表达式 1的值为true执行代码
}else if(布尔表达式 2){
//如果布尔表达式 2的值为true执行代码
}else if(布尔表达式 3){
//如果布尔表达式 3的值为true执行代码
}else {
//如果以上布尔表达式都不为true执行代码
}/
- if…else嵌套,嵌套时候尽量不要嵌套太多,一般嵌套3层就差不多
//求出3个数的最大值,不使用三元运算符
if(a > b){//a值大
if(a > c){
System.out.println("a的值大");
}else{
System.out.println("c的值大 18行");
}
}else{//b的值大
if(b > c){
System.out.println("b的值大");
}else{
System.out.println("c的值大 24行");
}
}
3.switch
- switch:中文意思【开关; 转换,转换器】
- expression:中文意思 【表达】
- switch(expression){
case value :
//语句
break; //可选
case value :
//语句
break; //可选
//你可以有任意数量的case语句
default : //可选
//语句
} - 案例:根据int整型来判断星期几
int week = 8;//1:星期一,2:星期二,3:星期三,4:星期四,5:星期五,6:星期六,7:星期日
switch(week){
case 1 :
System.out.println("星期一");
break;
case 2 :
System.out.println("星期二");
break;
case 3 :
System.out.println("星期三");
break;
case 4 :
System.out.println("星期四");
break;
case 5 :
System.out.println("星期五");
break;
case 6 :
System.out.println("星期六");
break;
case 7 :
System.out.println("星期日");
break;
default://如果case里没有一个条件满足,就会执行default的代码
System.out.println("你是火星来的...地球是没有星期" + week);
}
4.for循环
- for循环结构语句的格式
- for(初始化表达式;条件表达式;循环后的操作表达式) {
循环体;
} - for语句执行后变量会被释放,不能再使用
5.while语句
- while(判断条件语句) {
循环体语句;
控制条件语句;
}
6.do …while语句
- do {
循环体语句;
控制条件语句;
} while(判断条件语句);
//使用do...while打印1~10
int i = 1;
do{
System.out.println(i);
i++;
}while(i<=10);
7.补充转义符号
‘\x’ x表示任意
\是转义符号,这种做法叫转义字符
‘\t’ tab键的位置
‘\r’ 回车
‘\n’ 换行
‘"’*/
//注:当键盘按下enter键,表示2个字符 \r\n 回车换行
8.break、continue和return
- break和continue只能放在循环里面
// 演示在main里写break/continue的错误 - break是跳出循环,for循环体后面的代码不执行,for循环后面的代码还是会执行
- continue是继续下一个循环,当前循环体的下面代码不执行
- return的作用
- 返回
- 其实它的作用不是结束循环的,而是结束方法的。
- 也就是return后面的代码都不执行了
9.方法的声明格式
-
修饰符 返回值类型 方法名(参数类型 参数名1,参数类型 参数名2…) {
方法体语句;
return 返回值;
} -
方法声明注意事项
1.方法定义的时候参数之间用逗号隔开
2.方法调用的时候不用在传递数据类型
3.如果方法有明确的返回值,一定要有return带回一个值
4.方法不调用不执行
5.方法与方法是平级关系,不能嵌套定义方法调用注意事项 (有具体返回值) a:单独调用,一般来说没有意义,所以不推荐。 add(10, 11); b:输出调用,但是不够好。因为我们可能需要针对结果进行进一步的操作。 System.out.println(add(10, 11)); c:赋值调用,推荐方案。 int sum1 = add(10, 11);
9.方法重载
1.在同一个类中有多个相同的方法名,就这是方法的重载
2.方法的重载它的“参数列表”是不同
3.方法的重载与返回值类型无关。
参数列表不同
参数个数不同
参数类型不同
参数的顺序不同(算重载,但是在开发中不用)
public static double add(int a,double b){
System.out.println("public static double add(int a,double b)");
double sum = a + b;
return sum;
}
public static double add(double b,int a){
double sum = a + b;
return sum;
}
public static int add(int a,int b){
int sum = a + b;
return sum;
}
10.数组
-
数组概述和定义格式说明
数组的作用:用来存储同种数据类型的多个值 数组的概念:数组是存储同一种数据类型多个元素的集合。也可以 看成是一个容器。 数组既可以存储"基本数据类型",也可以存储"引用数据类型"。 数组定义格式: 数据类型[] 数组名 = new 数据类型[数组的长度];
//数组打印结果的分析
/**
* [I@15db9742
* [:代表一维数组
* I:代表int
* @ 固定写法,没有意思
* 15db9742: 16进制,理解成的数组地址
*/
静态初始化
//数据类型[] 数组名 = new 数据类型[]{元素1,元素2,…};
- 数组遍历:就是依次输出数组中的每一个元素
- 数组的属性:arr.length数组的长度
- 数组的最大索引:arr.length – 1
- 使用for循环遍历 【灵活】
二维数组定义
二维数组本质上是以数组作为数组元素的数组,即“数组的数组”。相当于一个箱子里有n个箱子
/***
* [[I@15db9742
* [[ :表示二维数组
*/
二.练习题
- 判断一个数是奇数还是偶数,并输出是奇数还是偶数
int a = 10;
//判断能否被2整除
if(a % 2 == 0){
System.out.println("a是偶数");
}else{
System.out.println("a是奇数");
}
- 根据分数来判断"优良中差"
/***
* 总分0~100分
* 90以上:优
* 80以上:良
* 60以上:中
* 60分以下:差
*/
int score = 150;//分数
if(score >= 90 && score <=100){//90~100
System.out.println("成绩为优,恭喜可以获得168红包");
}else if(score >= 80 && score<=89){//80~89
System.out.println("成绩为良,恭喜可以获得88红包");
}else if(score >= 60 && score <= 79){//60~79
System.out.println("成绩为中,恭喜再接再厉");
}else if(score >=0 && score <=59){//0~59
System.out.println("成绩为差,那你就复读吧!");
}else{
System.out.println("你的分数是自己给的吧...");
}
//这个版本代码不严谨 可以输入100以上的数字
/*if(score >= 90){
System.out.println("成绩为优,恭喜可以获得168红包");
}else if(score >= 80){
System.out.println("成绩为良,恭喜可以获得88红包");
}else if(score >= 60){
System.out.println("成绩为中,恭喜再接再厉");
}else{
System.out.println("成绩为差,那你就复读吧!");
}*/
- 使用switch来实现一个一年四季的打印int season = 1~4
//1.季节
int season = 1;
switch(season){
case 1:
System.out.println("春..");
//break;
case 2 :
System.out.println("夏..");
//break;
case 3 :
System.out.println("秋..");
break;
case 4 :
System.out.println("冬..");
break;
default:
System.out.println("中国没有你说的季节..");
break;//不一定要
}
- 判断下面程序的结果(易错点)
int y = 3;
switch (y) {
default:
System.out.println("default...");
y++;
break;//default:放在前面没有意义,不会被执行
case 3:
System.out.println("case 3...");
y++;
case 4:
System.out.println("case 4...");
y++;
}
System.out.println(y);
- 根据用户输入的整数来判断一年四季(if方式来实现)
//1.导包
//2.创建键盘录入对象
Scanner scanner = new Scanner(System.in);
//3.提示用户输入1~4的数字
System.out.println("请输入1~4的数字:");
//4.接收用户输入的数字
int season = scanner.nextInt();
//5.输出季节
if(season == 1){
System.out.println("春天。。。。");
}else if(season == 2){
System.out.println("夏天.......");
}else if(season == 3){
System.out.println("秋天.......");
}else if(season == 4){
System.out.println("冬天.......");
}else{
System.out.println("你不听话,要输入1~4的数...");
}
- 请在控制台输出数据1-10
for(int i=0;i<10;i++){
System.out.println(i + 1);
}
- 请在控制台输出数据10-1
for (int i = 10; i > 0; i--) {
System.out.println(i);
}
- 求出1-10之间数据之和
int sum = 0;
for(int i=1;i<=10;i++){
sum +=i;
}
System.out.println(sum);
- 求出1-100之间偶数和
int sum = 0;
for(int i=1;i<=100;i++){
if (i%2 == 0) {//偶数才可以相加
sum += i;
}
}
System.out.println(sum);
- 求出1-100之间奇数和
int sum = 0;
for(int i=1;i<=100;i +=2){
if (i%2 != 0) {//奇数
sum += i;
}
}
System.out.println(sum);
- 水仙花数
/***
* 掌握:
* 1.如何求一个数的个位,十位,百位的数字
* 2.知道水仙花数的概念
* 3.计数器
*/
//在控制台输出100到999所有的”水仙花数”的个数
/*水仙花
所谓的水仙花数是指一个三位数,其各个位数的数字的立方和等于该数本身。
举例:153就是一个水仙花数。
153 = 1*1*1 + 5*5*5 + 3*3*3 = 1 + 125 + 27 = 153*/
//默认情况下有0个水仙花数
int count = 0;
for(int i=100;i<=999;i++){
//求100到999的水仙花
//1.求百位数字
int bw = i / 100;
//2.求十位数字
int sw = i % 100 / 10;
//3.求个位数字
int gw = i % 10;
//4.求3个数的立方和
int sum = bw * bw * bw + sw * sw * sw + gw * gw * gw;
//5.打印水仙花数
if(sum == i){
count ++;
System.out.println(i);
}
}
System.out.println("总共有" + count + "个水仙花数");
- 循环结构九九乘法表[for循环实现]
//1.循环9行
for(int i = 1; i <= 9; i++){
//2.每一行再循环列数(列数也是根据行数决定)
for(int j = 1; j <= i; j++){
//如果需要对齐输出内容,添加一个tab,添加一个\t字符
//System.out.print(i + "*" + j + "=" + (i*j) + " ");
System.out.print(i + "*" + j + "=" + (i*j) + '\t');
}
System.out.println();//换行
}
- 比较两个数据是否相等【通过方法的重载来实现】
System.out.println(isEquals(10, 10));
System.out.println(isEquals(3.14, 3.14));
System.out.println(isEquals(10,10.00));
}
public static boolean isEquals(int a,int b){
return a == b;
}
public static boolean isEquals(double a,double b){
return a == b;
}
public static boolean isEquals(int a,double b){
return a == b;
}
public static boolean isEquals(byte a,byte b){
return a == b;
}
- 倒直角三角形
public static void test2(){
int num = 5 ;
for(int i=num;i>0;i--){
//1.打印空格(0,1,2,3,4)
for(int j=0;j<num-i;j++){
System.out.print(" ");//两个空格
}
//2.打印*空格,为了美观
for(int k=1;k<=i;k++){
System.out.print("* ");
}
System.out.println();
}
}
- 上等腰三角形1,3,5,7,9(有点难)
public static void test3() {
int num = 5;//行数设置
//控制行数
for(int i=1;i<=num;i++){
//打印空格
for(int j=i;j<num;j++){
System.out.print(" ");
}
//打印*
for(int k=1;k<=2*i-1;k++){
System.out.print("*");
}
System.out.println();
}
}
- 公司年销售额求和 (考察二维数组的遍历)
某公司按照季度和月份统计的数据如下:单位(万元)
第一季度:22,66,45
第二季度:77,33,88
第三季度:25,45,65
第四季度:11,66,99
int[][] yearData ={
{22,66,45},
{77,33,88},
{25,45,65},
{11,66,99}
};//年度数据
//2.求和
int sum=0;
//遍历季度
for(int i=0;i<yearData.length;i++){
//遍历季度里的月数据
for (int j = 0; j < yearData[i].length; j++) {
sum +=yearData[i][j];//求和
}
}
System.out.println("年销售总额:"+sum);
三.面试题
- return和break以及continue的区别?
- return是结束方法,return后面的所有代码都不执行
- break是跳出循环 ,循环外面的代码还是会执行
- continue是终止本次循环继续下次循环
- break和continue只能用在循环结构语句中
- return,不仅可以用在循环结构中,也可以用在循环结构外
四.易错点
-
练习题4
-
一般不会在new int[5]写个数组个数,不允许动静结合
//int[] arr4 = new int[3]{12,11,10}; -
数组操作的两个常见小问题越界和空指针
//1.越界问题 /*** * ArrayIndexOutOfBoundsException:数组越界问题 * 取值时,下标的值超过了数组的最大索引 * 数组的最大索引:数组中的元素个数 - 1 */ int[] arr = {110,120,119}; System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); //System.out.println(arr[3]);//取第4个元素,这行代码会有数组越界的问题 //2.空指针NullPointerException,就是变量没有指向任何一个堆的内存空间 arr=null;//arr里存了一个地址,这里赋空了 System.out.println(arr[0]);
-
数组元素反转(就是把元素对调)
int[] arr = {120,119,110,528,520,99,23};
//{520,528,110,119,120};
//1.算下对调次数
int count = arr.length / 2;
//2.打印对调的索引
for(int i = 0; i < count; i++){
int left = i;//左边索引
int right = arr.length - i - 1;//右边索引
System.out.println("左边的索引:" + left + " 右边的索引:" + right);
//把左边的值赋值给临时变量
int tmp = arr[left];
//把右边的值赋值给左边
arr[left] = arr[right];
//把临时变量赋值给右边
arr[right] = tmp;
}
//3.遍历
for(int i = 0;i < arr.length; i++){
System.out.println(arr[i]);
}
- 练习题15