当前位置: 首页 > 知识库问答 >
问题:

无法在数组类型 int[] 上调用我的方法

尹冠宇
2023-03-14

我目前正在学习如何使用遗传算法。然而,我在使用我的方法compareTo()时遇到了困难。这种方法应该比较两个人之间的适应值。我一直试图调用我的getFitness()

无法对数组类型int[]调用getFitness()

我不确定这个错误是从哪里来的。附件将是提到的方法和构造函数,我将概述这个错误发生在哪里。谢谢你。

public class Individual implements Comparable<Individual> {
  Random rand=new Random(); //Initialize random object
  private int size; //Represents N queens
  private int[] individual; //Represents the array of possible solutions

  public Individual(int[] permutation) {
    individual=permutation;
    size=individual.length;
  }

  public Individual(int size) {
    this.size=size;
    individual=Util.getPermutation(size); //Constructs an individual object that is an array of ints
  }

  public int getFitness() {
    //How many queens are attacking each other on the diagonal
    // 0 Represents the best fitness, this is the solution

    //Number of possible differences in permutation is found through factorial addition
    int newSize=0;
    for (int i=0; i<=size; i++){
      newSize+=i;
    }
    int fitness=0;
    int [] xDifference=new int[newSize]; //Array that stores distance between Columns
    int [] yDifference=new int[newSize]; //Array that stores distance between rows

    //Calculates the distance between columns and stores them
    for (int i=0; i<size; i++){
      for (int j=i+1; j<size; j++)
        xDifference[i]=j-i;
    }

    //Calculates distance between rows and stores them
    for (int i=0;i<size;i++){
      for (int j=i+1; j<size; j++)
          yDifference[i]=Math.abs(individual[j]-individual[i]);
    }

    //Compares xDifference and yDifference elements, if they are equal that means Queens are attacking
    for (int i=0; i<size; i++){
      if (xDifference[i]==yDifference[i]){
        fitness++;
      }
    }

    return fitness;
  }

  public int compareTo(Individual other) {
    int compare;

    if (individual.getFitness()<other.getFitness()){ //ERROR OCCURS HERE
      compare=-1;
    }else if (individual.getFitness()>other.getFitness()){// ERROR HERE
      compare=1;
    }else {
      compare=0;
    }

    return compare;
  }
}

共有2个答案

萧萧迟
2023-03-14

在compareTo方法中,您正在访问字段个体,它是一个数组,而不是个体

南宫星波
2023-03-14

问题是您正在调用individual.getFitness()individual实际上是一个int[]individualobject。相反,您需要使用

if (this.getFitness()<other.getFitness()){ 
     compare=-1;
}

你也可以省略这一点,但我个人发现它使代码更容易阅读。

 类似资料:
  • 我有这样一个班级: 我想将数组迭代分解为一个单独的方法,以便在整个程序中重复使用或重新调用它,如下所示: 然后我想在我的公共方法中调用它,例如: 我在这里尝试了解决方案:无法通过添加但它仍然不工作。我有所有可用变量的setter和getter。我相信有一个简单的解决办法,但请让我知道,如果有办法绕过它。 谢谢你

  • 我一直在尝试移植一段JavaScript代码,现在,我唯一尚未开始工作的部分出现了此错误:无法在原始类型int上调用padLz(int)。原始JavaScript代码在下面,同样是我的移植版本,我还无法工作的部分还突出显示。 错误: 无法在基元类型 int 上调用 padLz(int) 原件 移植版本 string grid ref = let pair ' ' e . padlz(digits/

  • 我最近做了一个程序在处理Java加载图像和模糊它,但现在我把这个函数作为一个方法到一个类,得到了这个错误: 无法在原始类型int上调用blurImage(int,int,int) 我的班级: 我的代码调用它: 错误就在这条线上 i、 blurImage(blurDecrement,blurDecrement,round(maxBlur)); 我已经在互联网上搜索了这个问题,但没有得到我想要的东西。

  • 为什么我不能在数组类型上调用? ENUM:

  • 不知道如何让不出错。 非常迷茫。已尝试更改多行代码。 我希望它能够与< code > compare to(new number)没有问题。 错误消息:“无法对基本类型int调用< code>compareTo(int)

  • 想改进这个问题吗 通过编辑此帖子,添加详细信息并澄清问题。 我对下面的if语句块有问题: