Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么我的序列号系统重复001号?_Java_For Loop_Serialization_Linked List - Fatal编程技术网

Java 为什么我的序列号系统重复001号?

Java 为什么我的序列号系统重复001号?,java,for-loop,serialization,linked-list,Java,For Loop,Serialization,Linked List,我试图用Java为我的联系人列表分配一个唯一的ID。除了第一个数字外,它工作正常。在转到ID002之前,它总是重复ID001两次。知道为什么吗 private static String getSN() { String SN = "ID001"; for (int i = 0; i < AddressBook.size(); i++) { if(AddressBook.size()<10){ if (AddressBook.get(i

我试图用Java为我的联系人列表分配一个唯一的ID。除了第一个数字外,它工作正常。在转到ID002之前,它总是重复ID001两次。知道为什么吗

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;

}
私有静态字符串getSN(){
字符串SN=“ID001”;
对于(int i=0;i
因为
SN
是一个局部变量。静态方法中的局部变量仍然是一个局部变量,并且每次调用该方法时它都会消失


您可能应该使用一个
静态
字段…在封闭类中声明。

我想出了一个更简单的方法来做事情。与使用循环不同,每次我在联系人列表中添加一个新联系人时,我都会添加一个序列号

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);
            }


        }
        }

    }
}
private static void setSN(){
if(AddressBook.size()<10){
对于(int i=0;i
试试这个:
1.通过
AddressBook.get(i).子字符串(0,5).包含(“ID00”+(i+1))

2.修改
int snString=i+1;
by
int snString=i+2;

3.这是因为列表的索引从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;
}
私有静态字符串getSN(){
字符串SN=“ID001”;
对于(int i=0;iif(AddressBook.size()那么为什么它会在第一个数字之后工作呢?我尝试在方法之外声明变量,但它仍然会做同样的事情。现在我更仔细地观察,声明
SN
的地方的代码有很多错误。我建议您重新开始,并将
SN
设置为整数。当您需要新的标识时首先,递增整数,然后根据格式规则将整数转换为字符串。