数组的定义和初始化
在java中数组的定义和C语言中数组的定义有很大的不同,例如在c语言中我们如果要定义一个包含5个元素的整形数组我们可以这样定义:int num[5];然而这种定义方法在Java中是不行的,那么在java中要如何来定义数组呢.在java中我们这样定义数组:
int[] nums=new int[5];
这条语句要分成两部分来理解,等号左边是定义了一个名为”nums”的整形数组,接着右边是给这个输出新分配5个int型的内存空间.在java中”int[ ] nums”也可以写成”int nums[]”,我们为了和c语言区分,建议写为”int[ ] nums”这种形式,和c语言相同的是,数组的大小一经创建就不能随意的改变它的大小(只能重新开辟内存空间).另外值得注意的是在java中不论是”int[5] nums”还是”int nums[5]”再或者”int nums[5]={1,2,3,4,5}”这3种方法都是错误的,只能用”int nums[]={1,2,3,4,5}”这种形式,所有在等号(赋值符号左边给定数组大小的方法都是错误的!)
for–为数组而生
用for循环实像数组数据的录入
int[] nums=new int[8];
Scanner input=new Scanner(System.in);
for (int i = 0; i < nums.length; i++) {
System.out.printf("请输入第%d个元素的值:");
nums[i]=input.nextInt();
}
用for循环实现数组数据的打印
//接上例
for (int i : nums) {
System.out.print(i+",");
}
用for循环实现数组元素的查找
int num=0;//接收用户输入的查找对象
int index=-1;//查找到的下标
System.out.println("请输入要查找的元素值:");
for (int i = 0; i < nums.length; i++) {
if(nums[i]==num){
index=i;
break;
}
}
if(index==-1){
System.out.println("没有查找到对应元素!");
}else{
System.out.printf("数组nums中值为%d的元素的下标为%d",num,index);
}
用for循环进行数组的排序
//排序冒,泡排序法
for (int i = 0; i < nums.length-1; i++) {
for (int j = 0; j < nums.length-1-i; j++) {
if(nums[j]>nums[j+1]){
int temp=nums[j];
nums[j]=nums[j+1];
nums[j+1]=temp;
}
}
}
//排序法2,穷举法
for (int i = 0; i < nums.length-1; i++) {
for (int j =i+1 ; j < nums.length; j++) {
if(nums[i]>nums[j]){
int temp=nums[i];
nums[i]=nums[j];
nums[j]=temp;
}
}
}
用for循环进行数组的增删元素(综合应用)
Scanner input=new Scanner(System.in);
int[] powerArray=new int[999];//攻击力数组
int powerCount=0;//元素个数
String answer="Y";//是否继续的接收
int powerOut=0;//接收要删除的值
int powerIn=0;//接收要插入的值
//录入
do{
System.out.printf("请输入第%d个英雄的战力值:",powerCount+1);
powerArray[powerCount]=input.nextInt();
powerCount++;
//打印这个数组
for (int i = 0; i < powerCount; i++) {
System.out.printf("%d,",powerArray[i]);
}
System.out.println();
System.out.print("是否继续(Y/N):");
answer=input.next();
}while("y".equalsIgnoreCase(answer));
//排序
for (int i = 0; i < powerCount-1; i++) {
for (int j = 0; j < powerCount-1-i; j++) {
if(powerArray[j]>powerArray[j+1]){
int temp=powerArray[j];
powerArray[j]=powerArray[j+1];
powerArray[j+1]=powerArray[j];
}
}
}
//删除
do{
System.out.printf("请输入要删除的元素");
powerOut=input.nextInt();
int powerDelete=-1;
for (int i = 0; i < powerCount; i++) {
if(powerArray[i]==powerOut){
powerDelete=i;
break;//要break是删除找到的第一个元素,不要的话就是最后一个元素
}
}
if(powerDelete!=-1){
for (int i = powerDelete; i < powerCount; i++) {
powerArray[i]=powerArray[i+1];
}
powerArray[powerCount]=0;//清除最后一个
powerCount--;
System.out.println("该元素已经删除");
}else{
System.out.println("没有找到这个元素.");
}
//打印这个数组
for (int i = 0; i < powerCount; i++) {
System.out.printf("%d,",powerArray[i]);
}
System.out.println();
System.out.print("是否继续(Y/N):");
answer=input.next();
}while("y".equalsIgnoreCase(answer));
//插入
do{
System.out.print("请输入要插入的战力:");
powerIn=input.nextInt();
int powerAll=-1;
for (int i = 0; i < powerCount; i++) {
if(powerArray[i]>powerIn){
powerAll=i;
break;
}
}
if(powerAll!=-1){
int temp=powerIn;
for (int i = powerAll; i < powerCount+1; i++) {
powerIn=powerArray[i];
powerArray[i]=temp;
temp=powerIn;
}
powerCount++;
}else{
powerArray[powerCount]=powerIn;
powerCount++;
}
//打印这个数组
for (int i = 0; i < powerCount; i++) {
System.out.printf("%d,",powerArray[i]);
}
System.out.println();
System.out.print("是否继续(Y/N):");
answer=input.next();
}while("y".equalsIgnoreCase(answer));
System.gc();//清空垃圾回收器
这里的数组元素的删除和插入只是在足够大的数组空间内的数组元素的修改,并通过一个int 型的变量来记录有效数据的个数(有效个数小于数组长度),并非真正的改变数组的大小.