我试图根据每个元素的值从现有数组中创建一个新数组。如果现有数组中的数字处于给定条件,则需要将该数字添加到新数组中,但新数组中的值均为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];
}
}
答案 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.