我想编写一个方法,当提供一个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));
}
}
答案 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 f
和int s
设置为first
和second
,问题在于您的类的属性{ {1}}被称为PTemp
而first
被称为second
和f
。
更改为此并重试:
s