韩顺平零基础学JAVA160-170集学习笔记

JAVA20231207

161162数组应用案例

第一题:

public class ArrExercise{
	public static void main(String[] args){
		//需求分析:
		//创建一个char类型的26个元素的数组,分别放置
		//'A'-'Z'使用for循环访问所有元素并打印出来
		//提示:char类型数据运算'A'+2->'C'
		//思路分析:
		//new一个26个大小的char数组
		//char []arr = new char[26]
		//使用for循环遍历赋值并打印
		//
		//代码实现:
		char []arr = new char [26];
		for(int i = 0;i <26; i++){
			arr[i] = (char)('A' + i);
			System.out.print(arr[i] + "\t");
		}
	}
}

第二题:

public class ArrExercise01{
	public static void main(String[] args){
		//需求分析:
		//请求出一个数组int[]的最大值{4,-1,9,10,23}
		//并得到对应的下标
		//
		//思路分析:
		//1.new 数组int []arr = {4,-1,9,10,23}
		//2.使用for循环遍历 if语句比大小  int max接收最大值
		//3.int index 获取最大值的下标值、
		//
		//代码实现:
		int []arr ={4,-1,9,10,23,23,45,1,4,8};
		int max = arr[0];
		int index = 0;
		for(int i = 0;i <arr.length;i++){
			if(max <= arr[i] ){
                max = arr[i];
				index = i;
			}
		}
		System.out.println("数组中的最大值为:" + max + "\t其对应的下标为" + index);
	}
}

第三题:

import java.util.Scanner;
public class ArrExercise02{
	public static void main(String[] args){
		//需求分析:
		//请求出一个数组的和和平均值(养鸡场)
		//
		//思路分析:
		//new 一个养鸡场鸡重量的数组  for循环遍历数组键盘赋值(Scanner)
		//for循环遍历求和 和平均值
		//
		//代码实现:
		Scanner myScanner = new Scanner(System.in);
		double []arr = new double[5];
		double sum = 0;
		for(int i = 0;i <arr.length ;i++){
			System.out.print("请输入第" + (i+1) + "只鸡的重量:");
			arr[i] = myScanner.nextDouble();
			System.out.println();
			sum += arr[i];
		}
		System.out.println("养鸡场中鸡的总重量为:"+ sum + "\t平均重量为:" + sum/arr.length);
	}
}

163164数组赋值机制(!!!)

值传递(值拷贝)和引用传递(地址拷贝)的区别:

  1. 基本数据类型赋值,这个值就是具体的数据,而且相互不影响

    int n1 = 2; int n2 = n1;

  2. 数组在默认情况下是引用传递(地址传递),赋的值是地址
    请添加图片描述

    请添加图片描述

new空间是在堆中生成

165数组拷贝

将int[ ] arr = {10,20,30};拷贝到arr2数组,要求数据空间是独立的(两个数组指向不同的地址)

public class ArrCopy{
	public static void main(String[] args){
		//需求分析:
		//将int [] arr1 = {10,20,30};拷贝到arr2数组,
		//要求数据空间是独立的(两个数组指向不同的地址)
		//
		//代码实现:
		int []arr1 = {10,20,30};
		int []arr2 = new int[arr1.length];//new一个空间之后arr2指向一个新的地址   拷贝只需把值拷贝过去
		//使用for遍历赋值
		for(int i = 0;i < arr1.length;i++){
			arr2[i] = arr1[i];
			System.out.println("拷贝后arr2的第" +(i+1) +"个值:" + arr2[i]);
		}

	}
}

166167数组反转

要求:把数组的元素内容反转

arr{11,22,33,44,55,66} - >{66,55,44,33,22,11}

逆序解决:

public class ArrReverse01{
	public static void main(String[] args){
		int []arr1 = {11,22,33,44,55,66};
		int []arr2 = new int[arr1.length];
		for(int i = 0;i < arr1.length;i++){
			arr2[i] = arr1[arr1.length-1-i]; 
			System.out.print(arr2[i] + "\t");
		}
		arr1 = arr2;//将arr1的地址指向arr2的地址	arr1原本的地址空间会被当垃圾回收
	}
}

冒泡排序解决:

public class ArrReverse{
	public static void main(String[] args){
		//需求分析:
		//把数组的元素内容反转
		//arr{11,22,33,44,55,66} - >{66,55,44,33,22,11}
		//
		//思路分析:
		//new arr数组
		//for1遍历进行比较   后比前大数值交换
		//for2遍历输出反转后的数组
		//代码实现:
		int []arr = {11,22,33,44,55,66};
		for(int k = 0;k < arr.length; ++k){
		for(int i = 0;i < arr.length-1;++i){//arr.length-1!!!   不减1会导致数组越界
			if(arr[i] <= arr[i+1]){
				int temp = arr[i];
				arr[i] = arr[i+1];
				arr[i+1] = temp;//交换
			}
		} 
	}//思路:先有内层for循环后想到外层for循环
		System.out.print("反转后的数组为:");
		for(int j = 0;j < arr.length;++j){//遍历输出反转后的arr数组
			System.out.print(arr[j] + "\t");
		}
	}
}

168169170数组扩容

要求:实现动态的给数组添加元素的效果,实现对数组扩容

  1. 原始数组使用静态分配int [ ] arr = {1,2,3}

  2. 增加的元素4,直接放在数组的最后arr = { 1,2,3,4 }

  3. 用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?y/n

    import java.util.Scanner;
    public class ArrAdd{
    	public static void main(String[] args){
    		//需求分析:
    		//实现动态的给数组添加元素效果,实现对数组扩容
    		//原始数组使用静态分配 int [ ] arr = {1,2,3}
    		//增加的元素4,直接放在数组的最后arr = {1,2,3,4}
    		//用户可以通过如下方法来决定是否继续添加,添加成功,是否继续? y/n
    		//思路分析:
    		//静态分配 int [ ]arr
    		//new一个新的数组 数组大小比arr大1
    		//将arr的值通过for赋给arrnew   再单独把要添加的值赋给arrnew
    		//让arr的地址空间指向arrnew  for遍历输出arr
    		//导入Scanner类让其决定添加的数值(!!!)
    		//使用do-whlie循环 + break 实现继续添加(!!!)
    		//代码实现:
    		Scanner myScanner = new Scanner(System.in);
    		int [ ]arr = {1,2,3};
    		do{
    		int [ ]arrnew = new int[arr.length + 1];
    		for(int i = 0;i < arr.length;i++){
    			arrnew[i] = arr[i];
    		}
    		System.out.print("请输入要添加的值:");
    		int input = myScanner.nextInt();
    		arrnew[arrnew.length-1] = input;
    		arr = arrnew;
    		System.out.print("输出扩容后的arr的值:");
    		for(int j = 0;j < arr.length;++j){
    			System.out.print(arr[j] + "\t");
    		}
    		System.out.println();
    		System.out.print("请决定是否要继续添加(y/n):");
    		char temp = myScanner.next().charAt(0);
    		if(temp == 'n'){//!!!
    			break;
    		}
    	}while(true);//!!!
    	}
    }
    

    数组缩减

    import java.util.Scanner;
    public class ArrReduce{
    	public static void main(String[] args){
    		Scanner myScanner = new Scanner(System.in);
    		int [ ]arr = {1,2,3};
    		do{
    		int [ ]arrnew = new int[arr.length - 1];
    		for(int i = 0;i < arrnew.length;i++){
    			arrnew[i] = arr[i];
    		}
    		arr = arrnew;
    		System.out.print("输出缩减后的arr的值:");
    		for(int j = 0;j < arr.length;++j){
    			System.out.print(arr[j] + "\t");
    		}
    		System.out.println();
    		System.out.print("数组中至少有一个元素值,请决定是否要继续缩减(y/n):");
    		char temp = myScanner.next().charAt(0);
    		if(temp == 'n' || arr.length == 1){//!!!
    			break;
    		}
    	}while(true);//!!!
    	}
    }
    
    
    
    
  • 22
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值