簡體   English   中英

允許用戶在Java中搜索和刪除ArrayList中的對象

[英]Allowing user to search and delete object in ArrayList in Java

我有一個應交的作業,現在到了我不知道如何繼續的地步。

我有一些問題,但是我現在關注的問題是如何讓用戶刪除ArrayList中的對象。

這就是我的代碼。 這是我的主要:

import java.util.Scanner;
import java.util.ArrayList;


public class Kennel {
    Scanner scan = new Scanner(System.in);
    ArrayList<Dog> dogList = new ArrayList<Dog>();

public static void main(String[] args) {
    Kennel kenneln = new Kennel();
    kenneln.whenStart();
}

public void mainMenu() {
    System.out.println("Välj åtgärd: \n" + "[1] Registrera hund \n" + "[2] 
    Öka 
    ålder \n" + "[3] Lista svanslängd \n" + "[4] Ta bort hund \n" + "[5] 
    Avsluta \n" + "Gör ett val: ");
}

public void menuAlt() {
    System.out.println();
    int menuAlt = scan.nextInt();

    switch (menuAlt) {
    case 1:
        registerDog();
        break;
    case 2: 
        increaseAge();
        break;
    case 3:
        listTailLenght();
        break;
    case 4:
        deleteDog();
        break;
    case 5:
        programExit();
        break;
    default:
        System.out.println("Välj en siffra mellan 1 - 5");
        whenStart();
}

}
public void registerDog() {
    System.out.println("Namn: ");
    scan.nextLine();
    String name = scan.nextLine();

    System.out.print("Ras: ");
    String race = scan.nextLine();

    System.out.print("Ålder: ");
    int age = scan.nextInt();

    System.out.print("Vikt: ");
    int weight = scan.nextInt();

    Dog doggy = new Dog(name, race, age, weight);
    dogList.add(doggy);
    System.out.println(name + " är nu registrerad!");
    }

public void increaseAge() {
    System.out.println("Vilken hund har fyllt år? \n" + "Ange namn: ");
    int age = scan.nextInt();
}


public void listTailLenght() {
    System.out.print("Ange minsta svanslängd: ");
    double tailLenght = scan.nextDouble();
    System.out.println("Hundar med svanslängd längre än " + tailLenght + ":  
    ");

    for (int i = 0; i < dogList.size(); i++) {
        if (dogList.get(i).getTailLenght() >= tailLenght) {

            System.out.println(dogList.get(i).toString());
    }
  } 
}
public void deleteDog() {
    boolean search=true;
    while(search) {
      System.out.print("Mata in namn på hund som ska tas bort: ");
      String searchFor = scan.nextLine();
      int ind = dogList.indexOf(searchFor);
      if (ind == -1) {
        System.out.println("Hund med det namnet fanns ej i registret");
      } else {
        dogList.remove(ind);
        System.out.print("Hunden med det angivna namnet är borttagen ");
      }
      System.out.print("Fortsätt radera? J/N ?");
      String ans = scan.nextLine();
      if (!ans.equalsIgnoreCase("J"))
        search = false;
}



/*  
System.out.println("Mata in namn på hund som ska tas bort: ");
String delete = scan.nextLine();

        System.out.println("Hunden med det angivna namnet är borttagen"); }
    else
        System.out.println("Hund med det namnet fanns ej i registret");
}
*/
}

public void programExit() {
    System.out.println("Välkommen åter!");
    System.exit(0);
}

public void whenStart() {

    while (true) {
        mainMenu();
        menuAlt();
    }
  }
}

這是我的狗類:

public class Dog {

    private String name;
    private String race;
    private int age;
    private double weight;
    private double tailLenght;

    public Dog(String name, String race, int age, double weight) {
        this.name = name;
        this.race = race;
        this.age = age;
        this.weight = weight;
        if (race.equalsIgnoreCase("Tax")) if             ´ 
        (race.equalsIgnoreCase("Dachshund")) {
            this.tailLenght = 3.7;
        } else { 
            this.tailLenght = (age * weight) / 10;
    }

    }

    public String toString() {
        return name + " " + race + " " + age + "år " + weight + " kg " + " svans=" + tailLenght;

}


    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public String getRace() {
        return race;
    }
    public void setRace(String race) {
        this.race = race;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    public double getWeight() {
        return weight;
    }
    public void setWeight(double weight) {
        this.weight = weight;
    }
    public double getTailLenght() {
        return tailLenght;
    }
    public void setTailLenght(double tailLenght) {
        this.tailLenght = tailLenght;
    }


}

該程序有5個選項或命令1.注冊狗2.增加年齡3.按尾巴長度排序4.刪除狗5.退出

這是我嘗試從ArrayList刪除狗時發生的情況

該程序為什么不讓用戶搜索一只狗,而是直接詢問他們是否要刪除另一只狗?

您沒有覆蓋Dog類的equalshashcode方法。 您將始終通過調用#ArrayList<Dog>.indexOf(String)返回-1。 查看JavaDocs indexOf的工作方式。 要解決您的問題,您可以遍歷dogList並比較/搜索String ,例如

public void deleteDog() {
    ...
    Iterator<Dog> it = dogList.iterator();
    while(it.hasNext()){
        Dog dog = it.next();
        if(dog.getName().equals(searchFor)){
            it.remove();
            break;
        }
    }
    ...
    }

之所以需要Iterator ,是因為不能在循環時使用增強的循環來刪除項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM