如何计算位于给定数组的两个元素之间的数组元素的数量

时间:2012-01-28 21:05:00

标签: java list iterator

我想编写一个方法,当提供一个int数组时,将执行以下操作。对于每对数组元素,它将组合它们并将它们放入内部类对象的列表中。然后它将比较数组中的每个元素,并检查它是否适合每对值之间。 (即我有一个数组0,2,4,它将使例如对(0,4)然后它将检查值2确实在0和4之间,因此计数器将增加)。我尝试了以下代码,但它返回0.如何解决它还是有更简单的方法来实现它?我主要关心的是返回值是否正确。谢谢

import java.util.*;
import java.util.Map;
import java.lang.*;

public class Prac1 {
    public int count(int[] A){
        int k = 0;
        class PTemp{        
            int first = -1;
            int second = -1;
            public PTemp(int first, int second){
                int f = first;
                int s = second;             
            }           
        }
        List<PTemp> r = new ArrayList<PTemp>();
        for (int i = 0; i < A.length; i++) {
              for (int j = i+1; j < A.length; j++) {
                  r.add(new PTemp(A[i], A[j]));
                  r.add(new PTemp(A[j], A[i]));
                  //System.out.println("["+A[i] +","+A[j]+"]");
                  //System.out.println("["+A[j] +","+A[i]+"]");
              }
            }
        Iterator<PTemp> ir = r.iterator();
        while (ir.hasNext()){
            PTemp p = ir.next();
            for (int i = 0; i < A.length; i++){
                if (((p.first < A[i]) && (A[i] < p.second)) || ((p.first > A[i]) && (A[i] > p.second))){
                    k = k + 1;
                }
            }       
        }               
        return k;
    }
    public static void main(String[] args){
        int[] A = {0, 2, 4};
        Prac1 pr = new Prac1();
        System.out.println(pr.count(A));
    }
}

3 个答案:

答案 0 :(得分:4)

除了Alex D提到的那个之外,还发现了第二个错误:

class PTemp{        
        int first = -1;
        int second = -1;
        public PTemp(int first, int second){
            int f = first;
            int s = second;             
        }           
    }

应该是:

class PTemp{        
        int first = -1;
        int second = -1;
        public PTemp(int first, int second){
            this.first = first;
            this.second = second;             
        }           
    }

现在已正确设置字段。

答案 1 :(得分:2)

我刚刚看到了这个错误。这样:

r.add(new PTemp(i, j));
r.add(new PTemp(j, i));

应该是:

r.add(new PTemp(A[i], A[j]));
r.add(new PTemp(A[j], A[i]));
编辑:看起来其他海报发现了另一个错误。我很高兴您的代码现在正在运行,但请注意,如果您在非常大的阵列上使用它,它将非常非常慢。我已经发布了一种方法,即使在大型阵列上也能快速实现,以解决您的其他相关问题。

答案 2 :(得分:2)

问题在于:

 class PTemp
 {        
    int first = -1;
    int second = -1;
    public PTemp(int first, int second)
    {
       int f = first; //error
       int s = second; //error      
    }           
 }

在我标记错误的行上,您将int fint s设置为firstsecond,问题在于您的类的属性{ {1}}被称为PTempfirst被称为secondf

更改为此并重试:

s