Java 从现有数组错误生成新数组

Java 从现有数组错误生成新数组,java,arrays,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)

我试图根据每个元素的值,在现有数组的基础上创建一个新数组。如果现有数组中的某个数字处于给定条件,则需要将该数字添加到新数组中,但新数组中的值均为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];
    }
}
double[]gpa={1.0,2.0,3.0,4.0,-1.0,5.0};
double[]newGpa=null;
对于(int i=0;i如果(gpa[i]>0&&gpa[i]您正在for循环内重新初始化数组变量newGpa

newGpa = new double[i+1];
这就是为什么会得到所有零。请正确使用ArrayList或调整数组大小(分配一个长度为i+1的临时数组,从newGpa复制值,然后将临时数组重新分配给newGpa)


让我们看看这一行:

        newGpa = new double[i + 1];
执行每个条件检查后(gpa[i]>0&&gpa[i]我建议:

 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];
    }
 }

new double[i+1]
创建一个初始化为全零的新数组…如果要调整数组大小,必须手动将旧值复制到新数组中,或者您应该使用这样的类自动执行此操作。的可能重复
        newGpa = new double[i + 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];
    }
 }
 newGpa = list.toArray(new String[list.size()]);