1

有人可以解释为什么我的 for 循环在需要一个 int 但找到一个双精度时出现错误吗?我需要我的数组是双精度的,为什么我的方法不起作用?

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

3 回答 3

5
 for(double i: EmptyBuffer){

该数组是双精度数,因此对象必须是双精度数。如果这就是你想要的,你可以将双精度转换为 int

于 2013-05-03T21:00:32.967 回答
3

增强的 for 循环的语义...

for (int i : EmptyBuffer) { ... }

是这样的:“对于我的双精度数组中的每个整数元素 i ...”

如您所见,这根本没有意义。您的数组是一个双精度数组,因此您不能遍历它包含的每个整数元素。

此外,您的代码片段中有以下语法:

if(EmptyBuffer[i] != null)

由于 EmptyBuffer 是一个双精度数组,它是一个原始类型的数组,即 - 不是 - 引用类型。因为原始类型不是引用类型,所以它们可能不是 null,因此测试数组元素是否为 null 是没有意义的。

于 2013-05-03T21:02:01.643 回答
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 没有任何意义。也许您应该测试它是否为非零。

于 2013-05-03T21:05:16.327 回答