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数组赋值机制(!!!)
值传递(值拷贝)和引用传递(地址拷贝)的区别:
-
基本数据类型赋值,这个值就是具体的数据,而且相互不影响
int n1 = 2; int n2 = n1;
-
数组在默认情况下是引用传递(地址传递),赋的值是地址
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数组扩容
要求:实现动态的给数组添加元素的效果,实现对数组扩容
-
原始数组使用静态分配int [ ] arr = {1,2,3}
-
增加的元素4,直接放在数组的最后arr = { 1,2,3,4 }
-
用户可以通过如下方法来决定是否继续添加,添加成功,是否继续?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);//!!! } }