Java 用现有数组的元素填充数组

Java 用现有数组的元素填充数组,java,arrays,Java,Arrays,我应该从高于某个最小值的“总体”数组中获取所有总体,并以数组的形式返回它们。我可以为我的新数组获得正确数量的元素,并正确分配最后一个值,但其余值返回为零 class Canada { private String[] provinces; private int[] populations; private int[] array; private int i; public static final in

我应该从高于某个最小值的“总体”数组中获取所有总体,并以数组的形式返回它们。我可以为我的新数组获得正确数量的元素,并正确分配最后一个值,但其余值返回为零

  class Canada {
        private String[] provinces; 
        private int[] populations; 
        private int[] array;
        private int i;

        public static final int NO_SUCH_PROVINCE = -1;
        public static final int O = 0; 
        public static final int Q = 1;
        public static final int BC = 2;
        public static final int A = 3;
        public static final int M = 4;
        public static final int S = 5;
        public static final int NS = 6;
        public static final int NB = 7;
        public static final int NL = 8;
        public static final int PE = 9;
        public static final int NT = 10;
        public static final int Y = 11;
        public static final int N = 12;

    public Canada() { 
        provinces = new String[13];
        provinces[O] = "Ontario";
        provinces[Q] = "Quebec";
        provinces[BC] = "British Columbia";
        provinces[A] = "Alberta";
        provinces[M] = "Manitoba";
        provinces[S] = "Saskatchewan";
        provinces[NS] = "Nova Scotia";
        provinces[NB]= "New Brunswick";
        provinces[NL] = "Newfoundland and Labrador";
        provinces[PE] = "Prince Edward Island";
        provinces[NT] = "Northwest Territories";
        provinces[Y] = "Yukon";
        provinces[N] = "Nunavut"; 

        populations = new int[13]; 
        populations[O] = 12851821;
        populations[Q] = 7903001;
        populations[BC] = 4400057;
        populations[A] = 3645257; 
        populations[M] = 1208268;
        populations[S] = 1033381;
        populations[NS] = 921727;
        populations[NB] = 751171;
        populations[NL] = 514536;
        populations[PE] = 142204;
        populations[NT] = 141462;
        populations[Y] = 33897;
        populations[N] = 31906;            
    }

    public int[] getPopulatiosnAboveMin(int min) {                          
        int i = 0;

        while(i < populations.length) {
            if(populations[i] > min){
                array = new int[i + 1];
              array[i] = populations[i];
            }
            i++;
        }    
        return(array);
    }    
  }
class加拿大{
私营部门在[]个省;
私人人口;
私有int[]数组;
私人互联网i;
公共静态最终整数无此省=-1;
公共静态最终INTO=0;
公共静态最终int Q=1;
公共静态最终int BC=2;
公共静态最终INTA=3;
公共静态最终整数M=4;
公共静态最终整数S=5;
公共静态最终整数NS=6;
公共静态最终int NB=7;
公共静态最终整数NL=8;
公共静态最终int PE=9;
公共静态最终整数NT=10;
公共静态最终整数Y=11;
公共静态最终整数N=12;
加拿大公共图书馆({
省份=新字符串[13];
各省[O]=“安大略省”;
省[Q]=“魁北克”;
省[BC]=“不列颠哥伦比亚省”;
省[A]=“阿尔伯塔省”;
各省[M]=“马尼托巴省”;
各省[南]=“萨斯喀彻温省”;
各省[NS]=“新斯科舍省”;
各省[注]=“新不伦瑞克省”;
各省[NL]=“纽芬兰和拉布拉多”;
各省[PE]=“爱德华王子岛”;
省[新界]=“西北地区”;
省份[Y]=“育空”;
省[N]=“努纳武特”;
人口=新整数[13];
种群[O]=12851821;
种群[Q]=7903001;
人口[BC]=4400057;
人口[A]=3645257;
种群[M]=1208268;
人口=1033381;
种群[NS]=921727;
种群[NB]=751171;
人口[NL]=514536;
种群[PE]=142204;
种群[NT]=141462;
人口[Y]=33897;
种群[N]=31906;
}
public int[]getPopulatiosnAboveMin(int min){
int i=0;
而(imin){
数组=新整数[i+1];
数组[i]=总体[i];
}
i++;
}    
返回(数组);
}    
}

每次循环通过
总体长度时,您都在重新创建数组。这就是为什么它最终只有一个值

使用
为每个
循环尝试此代码(这有点混乱,但应该可以完成任务):


此外,正如评论中提到的,考虑创建一个类来表示您的省份(和领土;),或者查看使用地图,例如。

您应该使用一个映射和一个类。每次通过while循环分配一个新数组,只填充它的最后一个成员,这看起来不太正确……非常感谢,这非常有帮助!我能确切地问一下“:”在循环中做了什么吗?这种循环称为循环。它与常规for循环稍有不同,可以用于迭代集合和数组。它类似于:for(键入Var Name:Array/Collection进行循环)。在每个循环中,类型为type的Var Name将是正在循环的数组或集合中的下一个值。很高兴我能提供帮助,别忘了标记一个已接受的答案,以便有相同问题的人更容易找到答案。:)
   public int[] getPopulatiosnAboveMin(int min) {  

          int nextIndex = 0;
          int[] firstArray = new int[populations.length];

          //Copy values larger then min to firstArray
          for(int pop : populations) {
              if(pop > min) {
                  firstArray[nextIndex++] = pop;
              }
          }

          //Trim extra 0 values:

          //Count number of non 0 values:
          int non0Count = 0;
          for (int i : firstArray) {
              if (i != 0) {
                  non0Count++;
              }
          }

          array = new int[non0Count];   //Initialize array with count of valid, non-0 values.

          //Copy values from firstArray to array:
          int index = 0;
          for (int i : firstArray) {
              if (i != 0) {
                  array[index++] = i;
              }
          }

          return array;
        }