我没有在这个课程中发现任何错误,但Netbeans在该课程上不断显示红色符号.上课是
/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/
package ea;
/**
*
* @author riyad
*/
import java.util.Random;
import java.util.BitSet;
public class Individual
{
BitSet variable;
double x;
double fitness;
double sharedFitness;
final int SIZE;
Random generator = new Random();
public Individual(int SIZE)
{
this.variable = new BitSet(SIZE);
this.fitness = 0;
this.sharedFitness = 0;
this.SIZE = SIZE;
for(int i=0; i<SIZE; i++)
{
if(generator.nextBoolean())
{
variable.set(i);
}
else
{
variable.clear(i);
}
}
x = Double.parseDouble(variable.toString());
}
public Individual copy()
{
Individual ind = new Individual(SIZE);
this.variable = (BitSet) ind.variable.clone();
this.fitness = ind.fitness;
this.sharedFitness = ind.sharedFitness;
this.x = ind.x;
return ind;
}
public void evaluate()
{
fitness = x * Math.sin(Math.sqrt(x));
}
public boolean getBit(int i)
{
return variable.get(i);
}
public BitSet getBitSet()
{
return variable;
}
public void setBit(int i)
{
variable.set(i);
}
public void clearBit(int i)
{
variable.clear(i);
}
public double getFitness()
{
return fitness;
}
public double sharedFitness()
{
return sharedFitness;
}
public void setSharedFitness(double fitness)
{
this.sharedFitness = fitness;
}
public void setFitness(double fitness)
{
this.fitness = fitness;
}
}
Run Code Online (Sandbox Code Playgroud)
代码正在编译但却出现运行时错误.
Exception in thread "main" java.lang.VerifyError: (class: ea/Individual, method: <init> signature: (I)V) Constructor must call super() or this()
Run Code Online (Sandbox Code Playgroud)
在另一个类中,使用Individual类:
ArrayList<Individual> pop = new ArrayList<Individual>();
Run Code Online (Sandbox Code Playgroud)
这是个人类被实例化的地方:
Individual temp = new Individual(STRING_SIZE);
pop.add(temp);
Run Code Online (Sandbox Code Playgroud)
编辑
我没有手动重命名该文件.所有编码都是在Netbeans中完成的.唯一的问题是当我创建Individual的实例时.
EDIT2
我已将项目复制到另一个地方,一切正常.可能是Netbeans或JDK的错误
您应该javap使用.class文件并检查编译器是否在构造函数的开头附近生成了对super()的调用.
JVM验证程序要求任何构造函数(当然不是对象)调用(可能通过另一个构造函数间接)它是超类的构造函数.通常情况下,如果你不这样做,编译器会自动插入对超类构造函数的调用,但是在某些情况下可能会混淆不执行此操作(尽管提供的代码看起来并不复杂).
(而且,是的,你已经this和ind大多数地方交换了copy.)
| 归档时间: |
|
| 查看次数: |
5258 次 |
| 最近记录: |