编写测试代码,观看代码下的两幅图,发现不同之处:
public static void main(String[] args) {
Map<Integer, Integer> map=new HashMap<>();
Integer[] array= {63,2,3,95,25,1,6,5,6,6,8,8,8,9};
Arrays.sort(array);
for(int i=0;i<array.length;i++) {
System.out.print(array[i]+" ");
}
System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!");
map.put(array[0], 1);
for(int i=1;i<array.length;i++) {
if(array[i-1]==array[i]) {
map.put(array[i-1], map.get(array[i-1])+1);
}else {
map.put(array[i], 1);
}
}
System.out.println(map);
}
发现一个问题那就是在出现 个位和十位数相同时,map集合中没有按规律排序,------------我还没弄明白,我先把代码写好之后我去查查资料。
以下代码有一些错误需要纠正,无法得出正确答案,只能提供一些思路
1 public class Demo_01 { 2 3 static Integer[] array= {2,1,1,3}; 4 5 //运用map集合统计数组中每个数出现的次数 6 public static Map<Integer, Integer> getMap(Integer[] array){ 7 Map<Integer, Integer> map=new HashMap<>(); 8 Arrays.sort(array); 9 map.put(array[0], 1); 10 for(int i=1;i<array.length;i++) { 11 if(array[i-1]==array[i]) { //判断左右是否相等,若相等则对应值的次数加一 12 map.put(array[i-1], map.get(array[i-1])+1); 13 }else { //否则将不同的数输入map集合中 14 map.put(array[i], 1); 15 } 16 } 17 return map; 18 } 19 20 //将不同的数存储在一个数组中 并且 按从小到大的顺序。 21 public static Object[] getArrays(Integer[] array) { 22 List<Integer> list=new ArrayList<>(); 23 Arrays.sort(array); 24 list.add(array[0]); 25 for(int i=1;i<array.length;i++) { 26 if(array[i-1]==array[i]) { //判断左右是否相等,若相等则对应值的次数加一 27 }else { 28 list.add(array[i]); 29 } 30 } 31 Object[] A=list.toArray(); 32 return A; 33 } 34 //求两数之间的排列的次数 35 public static int getNum(int i,int j) { //i的数值小于j 36 Map<Integer, Integer> map=getMap(array); 37 Object[] A=getArrays(array); 38 39 int num=1; 40 for(int k=i;k<=j;k++) { 41 num=num*map.get(A[k]); 42 // System.out.println("num1="+num); 43 } 44 // System.out.println("i="+i+" j="+j); 45 // System.out.println(num); 46 // System.out.println(2^(j-i)*num/2); 47 num=(int) ((j-i-1)==0?num:Math.pow(2, j-i-1)); 48 System.out.println("tula"+num+"nima"); 49 return num; 50 } 51 52 53 //得出最终值 54 public static int getSum() { 55 int sum=0; 56 Object[] A=getArrays(array); 57 for(int j=1;j<A.length;j++) { 58 for(int i=0;i<j;i++) { //i的数值小于j 59 60 sum=sum+getNum(i, j)*((int)A[j]-(int)A[i]); 61 //System.out.println("A[i]="+A[i]+" i="+i+" A[j]="+A[j]+" j="+j+" getNum="+getNum(i, j)); 62 } 63 } 64 65 return sum; 66 67 } 68 69 // public static Integer[] testname(Integer[] array) { 70 //// int[] A= {5,6,2,3,1,9,8,4}; 71 //// Arrays.sort(A); 72 // Arrays.sort(array); 73 // for(int i=0;i<array.length;i++) { 74 // System.out.println(array[i]); 75 // } 76 // return array; 77 // } 78 // 79 80 81 82 83 public static void main(String[] args) { 84 85 86 System.out.println(getSum()); 87 88 89 90 91 // 92 // 93 // Map<Integer, Integer> map=new HashMap<>(); 94 // List<Integer> list=new ArrayList<>(); 95 // Integer[] array= {66,2,3,99,25,1,6,5,6,6,8,8,8,9}; 96 // Arrays.sort(array); //将数组中的数由小到大进行排序 97 // 98 // for(int i=0;i<array.length;i++) { 99 // System.out.print(array[i]+" "); 100 // } 101 // System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!");//打桩检测数据是否排序 102 // 103 // list.add(array[0]); 104 // map.put(array[0], 1); //将第一个数输入map集合中 105 // 106 // for(int i=1;i<array.length;i++) { 107 // if(array[i-1]==array[i]) { //判断左右是否相等,若相等则对应值的次数加一 108 // map.put(array[i-1], map.get(array[i-1])+1); 109 // }else { //否则将不同的数输入map集合中 110 // map.put(array[i], 1); 111 // list.add(array[i]); //将数组中不同的数放在list集合中。 112 // } 113 // } 114 // System.out.println(list); //打桩,检测list中的数据 115 // System.out.println(map); //打桩,检测map中的数据 116 // 117 // Object[] A=list.toArray(); //将集合转成数组 118 // System.out.println(A[5]); //检测 119 // 120 // //准备工作完成。 121 // 122 // 123 // int sum=0; //宽度之和。 124 // 125 // for(int i=1;i<A.length;i++) { 126 // for(int j=0;j<i;j++) { 127 // 128 // } 129 // } 130 // 131 // 132 // 133 } 134 135 }