/ / Por que meu sistema de número de série está repetindo o número 001? - java, for-loop, serialização, lista vinculada

Por que meu sistema de número de série está repetindo o número 001? - java, for-loop, serialização, lista vinculada

Eu estou tentando atribuir um ID exclusivo para minha lista de contatos em Java. Ele funciona bem, exceto para o primeiro número. Ele sempre repete ID001 duas vezes antes de passar para ID002.

private static String getSN() {
String SN = "ID001";
for (int i = 0; i < AddressBook.size(); i++) {
if(AddressBook.size()<10){
if (AddressBook.get(i).substring(0, 4).contains("ID00"+i));
int snString = i+1;

SN = "ID00"+Integer.toString(snString);

if(SN.equals("ID0010")){
SN = ("ID010");
}
}
else{
if(AddressBook.size()<100){
if (AddressBook.get(i).substring(0, 5).equals("ID0"+i));
int snString = i+1;
SN = "ID0"+Integer.toString(snString);

if(SN.equals("ID00100")){
SN = ("ID0100");
}
}

}

}
return SN;

}

Respostas:

1 para resposta № 1

Por que meu sistema de número de série está repetindo o número 001?

Porque SN é uma variável local. Uma variável local em um método estático ainda é uma variável local e desaparece sempre que uma chamada para o método é retornada.

Você provavelmente deveria estar usando um static campo ... declarado na classe anexa.


0 para resposta № 2

Eu descobri uma maneira muito mais simples de fazer as coisas. Em vez de usar um loop, toda vez que eu adicionar uma nova pessoa à minha lista de contatos, anuncio um número de série.

private static void setSN() {
if (AddressBook.size() < 10) {

for (int i = 0; i < AddressBook.size(); i++) {

String tempString = AddressBook.get(i);

if (tempString.contains("ID00" + Integer.toString(AddressBook.size() + 1))) {
SN = "ID00" + Integer.toString(AddressBook.size() + 2);
}
else{
SN = "ID00" + Integer.toString(AddressBook.size() + 1);
}

}
}

else {
if (AddressBook.size() < 100) {
for (int i = 0; i < AddressBook.size(); i++) {

String tempString = AddressBook.get(i);

if (tempString.contains("ID0" + Integer.toString(AddressBook.size() + 1))) {
SN = "ID0" + Integer.toString(AddressBook.size() + 2);

}
else{
SN = "ID0" + Integer.toString(AddressBook.size() + 1);
}


}
}

}
}

0 para resposta № 3

Tente isto:
1. Modificar AddressBook.get(i).substring(0, 4).contains("ID00"+i) de
AddressBook.get(i).substring(0, 5).contains("ID00"+(i+1))
2. Modifique int snString = i+1; de
int snString = i+2;
3. Isso ocorre porque o índice da lista começa em 0.

private static String getSN() {
String SN = "ID001";
for (int i = 0; i < AddressBook.size(); i++) {
if(AddressBook.size()<10){
if (AddressBook.get(i).substring(0, 5).contains("ID00"+(i+1))){
int snString = i+2;
SN = "ID00"+Integer.toString(snString);
}
if(SN.equals("ID0010")){
SN = ("ID010");
}
} else {
if(AddressBook.size()<100){
if (AddressBook.get(i).substring(0, 5).equals("ID0"+(i+1))) {
int snString = i+2;
SN = "ID0"+Integer.toString(snString);
}
if(SN.equals("ID00100")){
SN = ("ID0100");
}
}
}
}
return SN;
}