---------数组是一种数据类型,是引用类型
- 使用方法1-动态初始化
数组的定义
数据类型 数组名[]=new 数据类型[大小]
数组引用(使用/访问/获取数组元素)
数组名[下标/索引/index]比如:你要使用a数组的第3个数 a[2],数组的下标从0开始
快速入门案例:循环输入5个成绩,保存到double数组,并输出
import java.util.Scanner;
public class array02{
public static void main(String[] args){
double scores[] = new double[5];//创建一个double数组,大小为5
Scanner myScanner = new Scanner(System.in);//循环输入,scores.length表示数组的大小/长度
for( int i =0;i<scores.length;i++){
System.out.println("请输入第" + (i+1) + "个元素的值");
scores[i]=myScanner.nextDouble();//从键盘得到的东西放进scores[i]里面去
}
System.out.println("==数组的元素/值的情况如下:===");
for( int i =0;i<scores.length;i++){
System.out.println("第" + (i+1) + "个元素的值=" + scores[i]);
}
}
}
- 使用方法2-动态初始化
先声明数组
语法:数据类型 数组名[];也可以 数据类型[] 数组名;
int a[];或者int [] a;
创建数组
语法:数组名=new 数据类型[大小];
a=new int[10];
import java.util.Scanner;
public class array02{
public static void main(String[] args){
char[] chars = new char[26];//定义一个数组
for(int i=0;i<chars.length;i++) {//循环26次
chars[i]=(char)('A'+i);//'A'+i是int,需要强制转换
}
System.out.println("===chars数组===");
for( int i = 0; i< chars.length;i++){
System.out.print(chars[i] + " ");
}
}
}
import java.util.Scanner;
public class array02{
public static void main(String[] args){
int[] arr = {4,-1,9,10,23};
int max = arr[0];
int maxIndex = 0;//用来存储最大值的下标
for(int i = 1;i<arr.length;i++){
if(max<arr[i]){
max = arr[i];
maxIndex=i;
}
}
System.out.println("max=" + max + " maxIndex" + maxIndex);
}
}
import java.util.Scanner;
public class array02{
public static void main(String[] args){
int[] arr = {4,-1,9,10,23};
int sum = 0;
int aver;
for(int i = 0;i<arr.length;i++){
sum +=arr[i];
}
aver = sum / arr.length;
System.out.println("sum=" + sum + " aver=" + aver);
}
}
值拷贝和值传递和引用传递的区别
//数组赋值机制
public class arrayassign{
public static void main(String[] args){//编写一个main方法
//把arr1赋给arr2,数组在一般情况下是引用地址,
//赋的值是地址,赋值方式为应用赋值
//是一个地址,arr2变化会影响到arr1
int[] arr1 = {1,2,3};
int[] arr2 = arr1;
arr2[0] = 10;
System.out.println("====arr1的元素====");
for(int i = 0;i < arr1.length; i++){
System.out.println(arr1[i]);//10,2,3
}
System.out.println("====arr2的元素====");
for(int i = 0;i < arr2.length; i++){
System.out.println(arr2[i]);//10,2,3
}
}
}
//数组拷贝
public class arraycopy{
public static void main(String[] args){//编写一个main方法
int[] arr1 = {10,20,30};
int[] arr2 = new int[arr1.length];//创建new一个新的数组arr2,开辟新的数据空间
for(int i= 0;i < arr1.length;i++){//遍历arr1,将每个元素拷贝到arr2对应的元素位置
arr2[i] = arr1[i];
}
arr2[0] = 100;//修改arr2[0]的值
System.out.println("====arr1的元素====");
for(int i = 0; i < arr1.length;i++){
System.out.println(arr1[i]);//输出arr1
}
System.out.println("====arr2的元素====");
for(int i = 0; i < arr2.length;i++){
System.out.println(arr2[i]);//输出修改后的arr2
}
}
}
使数组中的数字前后对调
//方法1:
public class arrayReverse02{
public static void main(String[] args){//编写一个main方法
int[] arr = {11,22,33,44,55,66};//定义数组
int temp = 0;
int len = arr.length;
for(int i = 0 ;i<len / 2; i++){
temp = arr[len-1-i];
arr[len-1-i] = arr[i];
arr[i] = temp;
}
for(int i = 0 ;i<len; i++){
System.out.println(arr[i] + "\t");
}
}
}
//方法2
public class arrayReverse02{
public static void main(String[] args){//编写一个main方法
int[] arr = {11,22,33,44,55,66};//定义数组
//1.创建一个新的数组arr2,大小为arr.length
//2.逆序遍历arr,将每个元素拷贝到arr2的元素中(顺序拷贝)
//3.建议增加一个循环变量 j-> 0 -> 5
int[] arr2 = new int[arr.length];
//逆序遍历arr
for(int i = arr.length-1,j = 0 ;i>=0; i--,j++){
arr2[j] = arr[i];
}
//4.当for循环结束,arr2就是一个逆序的数组
//5.让arr指向arr2数据空间,此时arr原来的数据就没有变量引用
//会被当做辣鸡销毁
arr = arr2;
System.out.println("====arr的元素情况====");
//6.输出arr
for(int i = 0;i< arr.length;i++){
System.out.println(arr[i] + "\t");
}
}
}
给数组扩容
public class ArrayAdd{
public static void main(String[] args){//编写一个main方法
int[] arr = {1,2,3};//定义初始数组,下标0-2
int[] arrNew = new int[arr.length+1];//定义一个新的数组,且长度是arr.length+1,即4
for(int i = 0;i< arr.length; i++){//遍历arr数组,依次将arr的元素拷贝到arrNew数组
arrNew[i] = arr[i];
}
arrNew[arrNew.length-1] = 4;//将第4个元素赋值为4
arr = arrNew;//让arr指向arrNew,那么原来的数组就被销毁了
System.out.println("====arr扩容之后元素情况====");
for(int i = 0;i<arr.length; i++){
System.out.print(arr[i] + "\t");//输出拷贝后的arr数组
}
}
}
//询问用户是否还需要添加元素
import java.util.Scanner;//引一个包
public class ArrayAdd02{
public static void main(String[] args){//编写一个main方法
Scanner myScanner = new Scanner(System.in);//new一个接收器
int[] arr = {1,2,3};//定义初始数组,下标0-2
do{
int[] arrNew = new int[arr.length+1];//定义一个新的数组,且长度是arr.length+1,即4
for(int i = 0;i< arr.length; i++){//遍历arr数组,依次将arr的元素拷贝到arrNew数组
arrNew[i] = arr[i];//将arr的元素拷贝到arrNew里去
}
System.out.println("请输入你要添加的元素");
int addNum = myScanner.nextInt();
arrNew[arrNew.length-1] = addNum;//把addNum赋给arrNew最后一个元素
arr = arrNew;//让arr指向arrNew,那么原来的数组就被销毁了
System.out.println("====arr扩容之后元素情况====");
for(int i = 0;i<arr.length; i++){
System.out.print(arr[i] + "\t");//输出拷贝后的arr数组
}
System.out.println("是否继续添加 y/n");//问用户是否要继续添加
char key = myScanner.next().charAt(0);//定义一个字符类型的key来接收键盘输入的字符
if(key == 'n'){//如果输入n,那就退出
break;
}
}while(true);
System.out.println("你退出了程序");
}
}
import java.util.Scanner;//引一个包
public class ArrayReduce{
public static void main(String[] args){//编写一个main方法
Scanner myScanner = new Scanner(System.in);//new一个接收器
int[] arr = {1,2,3,4,5};//定义初始数组,下标0-2
do{
int[] arrNew = new int[arr.length-1];//定义一个新的数组,且长度是arr.length-1
for(int i = 0;i< arr.length-1; i++){//遍历arr数组
arrNew[i] = arr[i];//将arr的(arr.length-1)个元素拷贝到arrNew里去
}
arr = arrNew;//让arr指向arrNew,那么原来的数组就被销毁了
System.out.println("====arr缩容之后元素情况====");
for(int i = 0;i<arr.length-1; i++){
System.out.print(arr[i] + "\t");//输出减少后的arr数组
}
if(arr.length>1)
{
System.out.println('\n'+"是否继续减少 y/n");//问用户是否要继续添加
char key = myScanner.next().charAt(0);//定义一个字符类型的key来接收键盘输入的字符
if(key == 'n'){//如果输入n,那就退出
break;
}
}
else if(arr.length==1){
System.out.println("不能再缩减了!!");
}
}while(true);
System.out.println("你退出了程序");
}
}
以上代码是我自己写的,如果有错误希望可以帮忙纠正。