我有这个类,每次调用构造函数时都应该增加id
public class Candidato {
private String nome;
private String cognome;
private final int id; // id that tracks number of objects
private static int counter=0; //counter that increments the id
private static int counterd=0;
private static int counters=0;
private static int counterp=0;
private double voti;
private int doc;
private int stud;
private int pta;
public Candidato(String n,String c){
this.id=counter++; //everytime i call the constructor increment me
this.nome=n;
this.cognome=c;
System.out.println(counter+"- -"); // here
}
public int getNumero(){
//System.out.println(id+"--id--");
return id+1;
}
}
所以我的怀疑在这里出现:假设我有一个叫做Candidato构造函数的选举,每次创建新的选举实例时我如何跟踪Candidato id?
就像在testNumeriCandiati()的这个例子中一样,我得到一些奇怪的数字,因为它们不是预期的数字,因此每当我创建一个Election类时,我想将Candidato id设置回0
public class TestR2_Candidati extends TestCase {
public void testCandidato(){
Elezione sistema = new Elezione();
Candidato c = sistema.nuovoCandidato("Marco", "Gilli");
assertNotNull("metodo nuovoCandidato() non implemenato",c);
assertEquals("Marco",c.getNome());
assertEquals("Gilli",c.getCognome());
assertEquals(1,c.getNumero());
}
public void testGetCandidato(){
Elezione sistema = new Elezione();
Candidato c = sistema.nuovoCandidato("Marco", "Gilli");
Candidato cc = sistema.getCandidato(1);
assertNotNull("metodo getCandidato() non implemenato",cc);
assertSame("Non viene restituito lo stesso candidato",c,cc);
}
public void testNumeriCandiati(){
Elezione sistema = new Elezione();
Candidato c1 = sistema.nuovoCandidato("Marco", "Gilli");
Candidato c2 = sistema.nuovoCandidato("Francesco", "Profumo");
Candidato c3 = sistema.nuovoCandidato("Rodolfo", "Zich");
assertEquals("Non corrisponde il numero",1,c1.getNumero());
assertEquals("Non corrisponde il numero",2,c2.getNumero());
assertEquals("Non corrisponde il numero",3,c3.getNumero());
}
}
答案 0 :(得分:2)
让Elections类创建Candidato对象,并使每个Elections实例跟踪创建的Candidato对象的数量。
答案 1 :(得分:2)
如果您希望候选ID对于特定选举中的每个候选人是唯一的,则a)它必须是全局唯一的(并且不会从每次选举的零重启)。
或者b)如果您需要为每次选举从零开始重新开始,那么您需要采用不同的方法:
由于您在候选人类中将ID作为静态字段,因此无论选举如何,都会在所有候选人之间共享。
如何将ID计数器移动到Election并使其成为实例,而不是类,变量?
答案 2 :(得分:2)
您的计数器存储为Candidato
的静态变量,因此其值不依赖于Elezione
实例的创建。如果您需要此功能,则需要将Candidato
的计数器设置为Elezione
:
class Elezione {
private candidatoCounter = 0;
................
Candidato createCandidato() {
return new Candidato(candidatoCounter++);
}
}
class Candidato {
private int id;
Candidato(int id) {
this.id = id;
}
}
答案 3 :(得分:1)
Candidato的静态计数器。分配真实身份时使用它。
public class Candidato {
private static int count=0;
private int id;
public Candidato () {
this.id =++count;
}
}
然后当您在Elezione类中创建Candidato的新实例时,新创建的Candidato实例的id将获得递增的id(静态,因此,它将与Candidato的所有实例共享)