这是上课写的一个统计数组中每个元素出现个数的代码,我写出来了,但是特别笨重,想请大家帮我优化一下
import java.util.Scanner;
public class Test07 {训练6
public static void main(String[] args){
int arr[]=new int[]{-2,1,0,-5,4,23,2,1,4,1-5,-22,4,1,3,3,4,6,7,9,-2,999999,-999999};
int arr[]=new int[]{-2,1,11,3,4,1,8,0,1,4,9,1,4,1,3,3,4,6,7,9,-2};
panDuan(arr);
}
public static void panDuan(int[] arr){
int max=arr[0];
int min=arr[0];
for(int i=1;iarr.length;i++){
if(maxarr[i]){判断元素中最大的数值,用来作为计数数组的长度
max=arr[i];
}
if(minarr[i]){判断元素中最小的数值,用来作为负数计数数组的长度
min=arr[i];
}
}
if(max=0){
int num1[]=new int[max+1];用来计数的数组,角标从0开始,所以要+1
for(int i=0;iarr.length;i++){正数数组的
if(arr[i]0){小于0跳出本次循环
continue;
}
num1[arr[i]]+=1;那个数字出现那个数字的角标就+1
}
printArray(num1);
}
if (min0){
int a=min;
a=Math.abs(a);
int[] num2 =new int[Math.abs(min)];如果最小值小于0.那么取绝对值作为记录负数数组的长度
for(int i=0;iarr.length;i++){正数数组的
if(arr[i]=0){大于等于0跳出本次循环
continue;
}
num2[0-arr[i]-1]+=1;用负数取反-1的角标值来记录负数出现的次数
}
printArray1(num2);
}
}
public static void printArray1(int[] arr){打印负数数组
for(int i=0;iarr.length;i++){
if(arr[i]0){如果角标上的数字,大于0,说明至少出现过1次
System.out.println(hhhh);
System.out.println((0-i-1)+出现了+arr[i]+次);
}
}
}
public static void printArray(int[] arr){打印正数部分
for(int i=0;iarr.length;i++){
if(arr[i]0){如果角标上的数字,大于0,说明至少出现过1次
System.out.println(i+出现了+arr[i]+次);
}
}
}
}
|
|