有人可以解释一下为什么我的for循环出现了关于需要一个int但是找到一个double的错误?我需要我的数组是双,为什么我的方法不起作用?
public class RingBuffer
{
private double[] EmptyBuffer;
private int size;
private int capacity;
public RingBuffer(int capacity){
EmptyBuffer = new double[capacity];
}
public int size(){
int counter = 0;
for(int i: EmptyBuffer){
if(EmptyBuffer[i] != null)
counter++;
}
return counter;
}
答案 0 :(得分:5)
for(double i: EmptyBuffer){
数组是双精度数,因此对象需要是双精度数。如果你想要的话,可以将double转换为int
答案 1 :(得分:3)
增强的for循环的语义......
for (int i : EmptyBuffer) { ... }
是这样的:“对于我的双打数组中的每个整数元素......”
正如你所看到的,这完全没有意义。您的数组是一个双精度数组,因此您无法遍历它包含的每个整数元素。
此外,您的代码段中还有以下语法:
if(EmptyBuffer[i] != null)
由于EmptyBuffer是一个双精度数组,因此它是一个基本类型的数组,即 - 不是引用类型。因为原始类型不是引用类型,所以它们可能不为null,因此测试数组元素为null是没有意义的。
答案 2 :(得分:3)
您正在错误地使用foreach循环,请尝试以下操作:
public class RingBuffer
{
private double[] EmptyBuffer;
private int size;
private int capacity;
public RingBuffer(int capacity){
EmptyBuffer = new double[capacity];
}
public int size(){
int counter = 0;
for(double element : EmptyBuffer){
if(element != 0) // Testing for null makes no sense! Test for non-zero?
counter++;
}
return counter;
}
此外,测试double是否为null是没有意义的。也许你应该测试它是否为非零。