从现有的数组错误中创建一个新数组

时间:2014-09-16 03:42:34

标签: java arrays

我试图根据每个元素的值从现有数组中创建一个新数组。如果现有数组中的数字处于给定条件,则需要将该数字添加到新数组中,但新数组中的值均为0。

此代码有什么问题?

double[] gpa = {1.0, 2.0, 3.0, 4.0, -1.0, 5.0};
double[] newGpa = null;
for (int i = 0; i < gpa.length; i++) {
    if (gpa[i] > 0 && gpa[i] <= 4.0) {
        newGpa = new double[i + 1];
        newGpa[i] = gpa[i];
    }
}

3 个答案:

答案 0 :(得分:1)

我可能会建议:

 double[] gpa = {1.0, 2.0, 3.0, 4.0, -1.0, 5.0};
 //create a new array with one index less 
 double[] newGpa = new double[gpa.length - 1];
 for (int i = 0; i < gpa.length; i++) {
    if (gpa[i] > 0 && gpa[i] <= 4.0) {
       newGpa[i] = gpa[i];
    }
 }

但是使用动态数据结构和ArrayList更聪明,然后在使用下面的方法处理它之后将其转换为数组。

 newGpa = list.toArray(new String[list.size()]);

答案 1 :(得分:0)

您正在for循环中重新初始化数组变量newGpa。

newGpa = new double[i+1];

这就是为什么你得到全零。正确使用ArrayList或调整大小数组(分配一个长度为i + 1的临时数组,从newGpa复制值,然后将temp数组重新分配给newGpa)

double[] gpa= {1.0,2.0,3.0,4.0,-1.0,5.0};
ArrayList<Double> newGpa= new ArrayList<Double>();

for(int i =0; i<gpa.length; i++){
 if (gpa[i] > 0 && gpa[i] <= 4.0){
    newGpa.add(gpa[i]);        
 }
}

然后你可以从ArrayList中获取数组。

Double[] result = newGpa.toArray(new Double[0]);

答案 2 :(得分:0)

让我们来看看这一行:

        newGpa = new double[i + 1];

执行每次条件检查后(gpa [i]&gt; 0&amp;&amp; gpa [i]&lt; = 4.0),有一个全新数组创建了 newGpa ,然后 newGpa 的所有元素都等于0.