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 № 1Por 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;
}