带妹学Java第二天(至二维数组)

一.重点总结

1.if…else与三元运算符比较

  1. 三元运算符实现的,if…else一定可以实现
  2. 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

  1. switch:中文意思【开关; 转换,转换器】
  2. expression:中文意思 【表达】
  3. switch(expression){
    case value :
    //语句
    break; //可选
    case value :
    //语句
    break; //可选
    //你可以有任意数量的case语句
    default : //可选
    //语句
    }
  4. 案例:根据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

  1. break和continue只能放在循环里面
    // 演示在main里写break/continue的错误
  2. break是跳出循环,for循环体后面的代码不执行,for循环后面的代码还是会执行
  3. continue是继续下一个循环,当前循环体的下面代码不执行
  4. 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
* [[ :表示二维数组
*/

二.练习题

  1. 判断一个数是奇数还是偶数,并输出是奇数还是偶数
int a = 10;
		
//判断能否被2整除
if(a % 2 == 0){
	System.out.println("a是偶数");
}else{
	System.out.println("a是奇数");
}
  1. 根据分数来判断"优良中差"
/***
		 * 总分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("成绩为差,那你就复读吧!");
		}*/
  1. 使用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;//不一定要
		}
  1. 判断下面程序的结果(易错点)
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);
  1. 根据用户输入的整数来判断一年四季(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. 请在控制台输出数据1-10
for(int i=0;i<10;i++){
			System.out.println(i + 1);
		}
  1. 请在控制台输出数据10-1
for (int i = 10; i > 0; i--) {
			System.out.println(i);
		}
  1. 求出1-10之间数据之和
int sum = 0;
		for(int i=1;i<=10;i++){
			sum +=i;
		}
		System.out.println(sum);
  1. 求出1-100之间偶数和
int sum = 0;
		for(int i=1;i<=100;i++){
			if (i%2 == 0) {//偶数才可以相加
				sum += i;
			}
		}
		System.out.println(sum);
  1. 求出1-100之间奇数和
int sum = 0;
		for(int i=1;i<=100;i +=2){
			if (i%2 != 0) {//奇数
				sum += i;
			}
		}
		System.out.println(sum);
  1. 水仙花数
/***
 * 掌握:
 * 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 + "个水仙花数");
		
  1. 循环结构九九乘法表[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();//换行
			
		}
  1. 比较两个数据是否相等【通过方法的重载来实现】
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;
			}	
  1. 倒直角三角形
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. 上等腰三角形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();
		}
	
	}
  1. 公司年销售额求和 (考察二维数组的遍历)
    某公司按照季度和月份统计的数据如下:单位(万元)
    第一季度: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);

三.面试题

  1. return和break以及continue的区别?
  • return是结束方法,return后面的所有代码都不执行
  • break是跳出循环 ,循环外面的代码还是会执行
  • continue是终止本次循环继续下次循环
  • break和continue只能用在循环结构语句中
  • return,不仅可以用在循环结构中,也可以用在循环结构外

四.易错点

  1. 练习题4

  2. 一般不会在new int[5]写个数组个数,不允许动静结合
    //int[] arr4 = new int[3]{12,11,10};

  3. 数组操作的两个常见小问题越界和空指针

     //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]);
    
  4. 数组元素反转(就是把元素对调)

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]);
		}
  1. 练习题15
发布了24 篇原创文章 · 获赞 4 · 访问量 625

猜你喜欢

转载自blog.csdn.net/qq_43488797/article/details/103672103