如何在 java 中自动递增 ID

How to Auto increment an ID in java

我想在添加朋友时自动增加 ID。我以某种方式得到了 ID (1,2,3,3,3..)

的输出

我下面的 Freunde class 代码是

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class Freunde {
    
    private static int idCache = 1;

    private final int id;
    public String Name; //Datenfeld Name
    public String Vorname; //Datenfeld Vorname
    public String Geburtsdatum; //Datenfeld Geburtsdatum
    public String Telefon; //Datenfeld Telefon
    public String Handy; //Datenfeld Handy
    public String Email; //Datenfeld E-Mail
    public String Adresse; //Datenfeld Adresse
        
    @Override
    public String toString() {
        return "Freunde{" +
                + id +
                ", '" + Name + '\'' +
                ", '" + Vorname + '\'' +
                ", '" + Telefon + '\'' +
                ", '" + Geburtsdatum + '\'' +
                 ", '" + Handy + '\'' +
                ", '" + Email + '\'' +
                ", '" + Adresse + '\'' +
                '}';
    }

    
    public ArrayList<Object> Kontakt = new ArrayList<Object>();

    
    public ArrayList<Object> Kontakt() 
    {
        return Kontakt;
    }
    
    Iterator<Object> input = Kontakt.iterator();

    /**************** Starting of set methods ************************/
    

    public void setVorname(String Vorname) {
        this.Vorname=Vorname;
        }   
    public void setName(String Name) {
        this.Name=Name;
    }
    public void setGeburtsdatum(String Geburtsdatum) {
        this.Geburtsdatum=Geburtsdatum;
    }
    public void setTelefon(String Telefon) {
        this.Telefon=Telefon;
    }
    public void setHandy(String Handy) {
        this.Handy=Handy;
    }
    public void setEmail(String Email) {
        this.Email=Email;
    }
    public void setAdresse(String Adresse) {
        this.Adresse=Adresse;
    }
    
    public Freunde() {
        this.id = idCache;
        idCache++;
    }
    
    public void setKontakt (ArrayList<Object> Kontakt) {
        this.Kontakt=Kontakt;
        }

    /****************End of set methods************************/    
    
    /****************Starting of get methods************************/
    
    public String getName() {
        return Name;
    }
    public String getTelefon() {
        return Telefon;
    }
    public String getHandy() {
        return Handy;
    }
    public String getVorname() {
        return Vorname;
    }
    public String getEmail() {
        return Email;
    }
    public String getGeburtsdatum() {
        return Geburtsdatum;
    }
    public String getAdresse() {
        return Adresse;
    }
    public ArrayList<Object> getKontakt() {
        return Kontakt;
    }  
    

    
    /****************End of get methods************************/
    

    /****************add a friend method************************/
    public void anlegen() {   
    Kontakt.add(id);
    Kontakt.add(Vorname);
    Kontakt.add(Name);
    Kontakt.add(Geburtsdatum);
    Kontakt.add(Handy);
    Kontakt.add(Telefon);
    Kontakt.add(Email);
    Kontakt.add(Adresse);
    }   
    /****************remove a friend method************************/
    public void löschen(){
//  Kontakt.remove(Id);
    Kontakt.remove(Vorname);
    Kontakt.remove(Name);
    Kontakt.remove(Geburtsdatum);
    Kontakt.remove(Handy);
    Kontakt.remove(Telefon);
    Kontakt.remove(Email);
    Kontakt.remove(Adresse);
    }
    
    /****************change a friend method************************/    
    public void ändern()
    {
//  Kontakt.set(0, "Id");
    Kontakt.set(0, Vorname);
    Kontakt.set(1, Name);
    Kontakt.set(2, Geburtsdatum);
    Kontakt.set(3, Handy);
    Kontakt.set(4, Telefon);
    Kontakt.set(5, Email);
    Kontakt.set(6, Adresse);
    }   
    /****************End of array methods************************/

    /**************** Durchsuche alles nach Name 
     * @return *********************/

    public boolean suche(String Name) {
        for (int i = 0; i < Kontakt.size(); i++) {
            if (Kontakt.get(i).equals(Name)) {
                System.out.println("element found:"+ Kontakt.get(i).equals(Name));
            } 
            
    }
        return false;
    }
    
    
    public boolean contains(String bornlist) {
        return false;
        // TODO Auto-generated method stub
        }

    public static int size() {
        // TODO Auto-generated method stub
        return 0;
    }

    public int get(int i) {
        // TODO Auto-generated method stub
        return 0;
    }

    public void contains() {
        // TODO Auto-generated method stub
    }
    
     public void setKontakt(Integer Id, String vorname, String name, String geburtsdatum, String telefon, String handy, String email, String adresse)
        {
            setVorname(vorname);
            setName(name);
            setGeburtsdatum(geburtsdatum);
            setTelefon(telefon);
            setHandy(handy);
            setEmail(email);
            setAdresse(adresse);
        }//end constructor for friend


    public void setKontakt(String vorname2, String name2) {
        // TODO Auto-generated method stub
        
    }


    public static Iterator<String> iterator() {
        // TODO Auto-generated method stub
        return null;
    }

   
    }

我在数组列表中得到的输出为

朋友名单

Kontakt:Freunde{1, 'Müller', 'Thomas', '0100', '15/08/1992', '018649', 'thomas.mueller@gmx.de', 'Friee 7, 14455 Berg, Deutschland'},
Kontakt:Freunde{2, 'Müller', 'Andrea', '01700', '15/01/1998', '017849', 'andrea.mueller@gmx.de', 'Im Hafen 9, 18500 Rheinsberg, Deutschland'},

现在,如果我使用选项 2 添加朋友,则会添加一个朋友列表,但 ID 始终保持不变,即使我将 ID 递增为 idCache++

**[3, Anush, dmawd, dwalkndw, dwwkad, dwaklndaw, dwakdnaw, dawiiha, 3, mda, fsefjfk, awdjoaw, dawjamd, dawojda, dawmoaöd, dawödöaw]**

选择添加好友或删除好友的选项class如下所示。

import java.util.Iterator;
import java.util.ListIterator;
import java.util.Scanner;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.Constructor;
import java.util.Random;


public class Karteiprogramm {

//  private static Integer id;
    private static Scanner input;
    private static int selection;


    /**************** Start of Menu method ************************/

    public void menu() {

        System.out.println("\nNummer der Auswahl eingeben: ");
        System.out.println("[1] Alle Freunde anzeigen");
        System.out.println("[2] Freund anlegen");
        System.out.println("[3] Freund löschen");
        System.out.println("[4] Freund bearbeiten");
        System.out.println("[5] Freund suchen");
        System.out.println("[0] Programm beenden");
    }

    /**************** End of menu method ************************/

    /**************** Start of selection method ************************/

    /****************
     * Start of Mainprogram
     * 
     * @throws IOException
     ***************************/

    public static void main(String[] args) throws IOException {

        /**************** Freunde Beispiele ************************/

        // Objekt der Klasse Freund anlegen
        // Karteikarte Freund f1;
        for (int i = 0; i <= 10; i++) {
        Freunde f1 = new Freunde();

        f1.setVorname("Thomas");
        f1.setName("Müller");
        f1.setGeburtsdatum("15/01/1992");
        f1.setTelefon("01726494800");
        f1.setHandy("01879845649");
        f1.setEmail("thomas.mueller@gmx.de");
        f1.setAdresse("Friedenstraße 7, 14455 Berg, Deutschland");

        // Karteikarte Freund f2;
        Freunde f2 = new Freunde();
        f2.setVorname("Andrea");
        f2.setName("Müller");
        f2.setGeburtsdatum("15/01/1998");
        f2.setTelefon("0177595200");
        f2.setHandy("01764591849");
        f2.setEmail("andrea.mueller@gmx.de");
        f2.setAdresse("Im Hafen 9, 18500 Rheinsberg, Deutschland");

        /**************** Ende Freunde Beispiele ************************/

        Freunde bornList = new Freunde(); // Kartei für neuen Freund

        // Freunde removeList = new Freunde ();

        Scanner input = new Scanner(System.in); // Scanner für Tastatureingabe

        Karteiprogramm Start = new Karteiprogramm(); // neues Objekt vom Typ Karteiprogramm
        Start.menü(); // Aufruf der Methode menü()

        Kartei Eingabe = new Kartei();

        int selection = input.nextInt(); // Scanner für Tastatureingabe für Integer

        /* Kartei[] data = new Kartei [1]; */
        
        while (selection != 0) {
            int nummer = 0;

            if (selection == 1) {
                for (int j = 0; j < 1; j++) {
                    System.out.println("Liste der Freunde");
                    /* Eingabe.addLists(); */
                    System.out.println("Kontakt:" + f1 + ",");
                    System.out.println("Kontakt:" + f2 + ",");
                    for (int i1 = 0; i1 < 1; i1++) {
                        System.out.println(bornList.Kontakt);
                    }
                    // System.out.println (bornList.Kontakt);
                    System.out.println("Taste drücken, um zum Menu zurückzukehren");
                    System.in.read();
                    Start.menü();
                    selection = input.nextInt();
                }

                Integer id = null;
                //              int id = f1.getId();
                if (selection == 2) { // Anlegen
                    System.out.println("Kontaktdaten");
                    System.out.println("---------------------");
                    System.out.printf("Vorname: ");
                    input = new Scanner(System.in);
                    String vorname = input.next();
                    System.out.printf("Nachname: ");
                    String name = input.next();
                    System.out.printf("Geburtstag: ");
                    String geburtsdatum = input.next();
                    System.out.printf("Festnetz: ");
                    String telefon = input.next();
                    System.out.printf("Handy: ");
                    String handy = input.next();
                    System.out.printf("Email: ");
                    String email = input.next();
                    System.out.printf("Adresse: ");
                    String adresse = input.next();

                    bornList.setKontakt(id, vorname, name, geburtsdatum, telefon, handy, email, adresse); // sets the values
                                                                                                        // for friend
                    bornList.anlegen(); // adds the friend to the array list
                    System.out.println("Taste drücken, um zum Menu zurückzukehren");
                    System.in.read();
                    Start.menü();
                    selection = input.nextInt();

                }

                if (selection == 3) { // Löschen
                    System.out.println("Welcher Freund soll gelöscht werden?");
                    System.out.println("---------------------");
                    System.out.printf("Vorname: ");
                    input = new Scanner(System.in);
                    String Vorname = input.next();
                    System.out.printf("Nachname: ");
                    String Name = input.next();
                    bornList.setKontakt(Vorname, Name); // sets up the friend to remove
                    bornList.löschen(); // removes the friend from the array list
                    System.out.println("Taste drücken, um zum Menu zurückzukehren");
                    System.in.read();
                    Start.menü();
                    selection = input.nextInt();
                }

                if (selection == 4) { // Ändern
                    System.out.println("Welcher Freund soll geändert werden?");
                    System.out.println("---------------------");
                    System.out.printf("Vorname: ");
                    input = new Scanner(System.in);
                    String vorname = input.next();
                    System.out.printf("Nachname: ");
                    String name = input.next();
                    bornList.setKontakt(vorname, name); // sets the values for friend*/

                    System.out.println("---------------------");
                    System.out.printf("Vorname: ");
                    input = new Scanner(System.in);
                    String vorname2 = input.next();
                    System.out.printf("Nachname: ");
                    String name2 = input.next();
                    System.out.printf("Geburtstag: ");
                    String geburtsdatum = input.next();
                    System.out.printf("Festnetz: ");
                    String telefon = input.next();
                    System.out.printf("Handy: ");
                    String handy = input.next();
                    System.out.printf("Email: ");
                    String email = input.next();
                    System.out.printf("Adresse: ");
                    String adresse = input.next();
                    
                    
                    bornList.setKontakt(id,vorname2, name2, geburtsdatum, telefon,handy, email, adresse);
                    bornList.ändern(); // adds the friend to the array list
                    
                    System.out.println("Taste drücken, um zum Menu zurückzukehren");
                    System.in.read();
                    Start.menü();
                    selection = input.nextInt();
                }

                if (selection == 5) { // suchen
                    System.out.println("Welcher Name wird gesucht?");
                    System.out.println("---------------------");
                    System.out.printf("Vorname: ");
                    input = new Scanner(System.in);
                    String Name = input.next();

                    if(bornList.suche(Name)) {
                        System.out.println("Name found");

                    }
                    for (int k = 0; k < 1; k++) {
                        System.out.println(bornList.Kontakt);
                    }

                    System.out.println("Taste drücken, um zum Menu zurückzukehren");
                    System.in.read();
                    Start.menü();
                    selection = input.nextInt();
                }
            }
        }
    }
    }
}

public void setKontakt(...)/*add a friend method**/有关吗?请帮忙。

每次使用 new Freunde() 都会获得新的 ID。 在你的主程序中,你有

Freunde f1 = new Freunde();
...
Freunde f2 = new Freunde();
...
Freunde bornList = new Freunde();

这就是您获得 [1,2,3,3,3,...] 的原因 在我看来你应该有这样的东西: 而不是 Freunde bornList = new Freunde(); 应该是 List<Freunde> bornList = new ArrayList<>(); 和 反而 bornList.setKontakt(id, vorname, name, geburtsdatum, telefon, handy, email, adresse); 应该是

Freunde born = new Freunde();
born.setKontakt(id, vorname, name, geburtsdatum, telefon, handy, email, adresse);
bornList.add(born);

显示和删除应该通过这样的事情来完成: Freunde freunde = bornList.stream().filter(freunde -> freunde .getId()== searchId).findAny().orElse(null); 现在通过 bornList.delete(freunde);

显示 freunde 或删除 freunde

一些约定:class一般是单数 Freunde = Friends,但你只有一个朋友。列表是复数形式 Kontakt = contact。然后是一个非德国特色: 字段和方法名称以小写字母开头。

public class Freund {

private final int id;
private String name; //Datenfeld Name
...
private final List<Freund> kontakte = new ArrayList<>();


public List<Freund> kontakte() { // Do you need this?
    return kontakte;
}

 public void addKontakt(Freund kontakt) {
     kontakte.add(kontakt);
 }

 public Freund getKontaktById(int id) {
     return kontakte.stream().anyMatch(k -> k.id == id).orElse(null);
 }

 public Freund getKontaktByNamen(String vorname, String name) {
     return kontakte.stream()
             .anyMatch(k -> k.vorname.equals(vorname) && k.name.equals(name))
             .orElse(null);
 }

应该只对 new 使用具体的 class ArrayList。在其他地方使用更通用的界面是值得的 List。这样的方法更强大,以后可以改实现。

我使用AtomicInteger 作为自增ID,比较安全。 Freunde 对象可以有自己的 freundes (kontakts) 列表。

import java.util.concurrent.atomic.AtomicInteger;
import java.util.ArrayList;


public class Freunde {
    
    private static final AtomicInteger _ID = new AtomicInteger(0);
    
    private final int id;
    private String name; 
    private String vorname; 
    private String geburtsdatum;
    private String telefon;
    private String handy;
    private String email;
    private String adresse;
    // Friends of THIS friend
    private ArrayList<Freunde> kontakts = new ArrayList<Freunde>();
    
    
    public Freunde(String name, String vorname, String geburtsdatum, String telefon, String handy, String email, String adresse){
        this.id = _ID.incrementAndGet(); 
        this.name = name; 
        this.vorname = vorname;
        this.geburtsdatum = geburtsdatum;
        this.telefon = telefon;
        this.handy = handy;
        this.email = email;
        this.adresse = adresse;
    }
    
    
    public addFriend(Freunde f){
            kontakts.add(f);
    }


    // Add your get/set methods here
    
    
    public String toString() {
        return "Freunde{" +
                + id +
                ", '" + name + '\'' +
                ", '" + vorname + '\'' +
                ", '" + telefon + '\'' +
                ", '" + geburtsdatum + '\'' +
                 ", '" + handy + '\'' +
                ", '" + email + '\'' +
                ", '" + adresse + '\'' +
                '}';
    }




     public static void main(String []args){
        ArrayList<Freunde> kontakts = new ArrayList<Freunde>();
        
        for(int i=0;i<9;i++){
           Freunde f = new Freunde("Thomas", "Müller", "15/01/1992", "01726494800", "01879845649", "thomas.mueller@gmx.de", "Friedenstraße 7, 14455 Berg, Deutschland");
           
           kontakts.add(f);
        }
       
       
       System.out.println(kontakts);
       
     }
}

使用 Freunde 对象,您可以使用 remove 方法将它们从 kontackts ArrayList 中删除。如果您想根据 ID 删除它们,您可以像这样扩展 ArrayList:

public class Kontakts extends ArrayList<Freunde>{
    
    
    public void removeFriend(int friendId){
        
        Iterator<Freunde> iter = this.iterator();
        
        while (iter.hasNext()) {
            Freunde f = iter.next();
            if (f.getId() == friendId){
                this.remove(f);
                break;
            }
        }
        
    }
    
}

如果您打算经常通过 ID 查找朋友,您可以使用 HashMap 而不是 ArrayList。