2017-12-12 20 views
2

과제가 만료되어 계속 진행하는 방법을 알지 못합니다.사용자가 Java의 ArrayList에서 객체를 검색 및 삭제할 수 있도록 허용

필자는 몇 가지 문제가 있지만, 지금 내가 집중하고있는 문제는 사용자가 내 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 번 출구

This is what happens when I try to delete a dog from the ArrayList

왜 프로그램에서 사용자가 개를 검색하게하지 않고 대신 다른 개를 삭제할 것인지 묻는 메시지로 바로 이동합니까?

+2

코드를 올바르게 들여 쓰고 들여 쓰기하는 데 10 초를 소비하십시오. – OptimusCrime

+1

죄송합니다. 나는이 시간을 올바르게 할 수 있도록 최선을 다했다. 나는 거짓말을하지 않을 것이고, 나는이 모든 것에 아주 새로운 것입니다! –

답변

5

Dog 클래스의 equalshashcode 메소드를 재정의하지 않았습니다. #ArrayList<Dog>.indexOf(String)으로 전화하여 -1을 항상 반환합니다. JavaDocsindexOf의 작동 방식을 참조하십시오. 당신은 여기 Iterator이 필요한 이유는 반복하는 동안 항목을 제거하기 위해 강화 된 루프를 사용할 수 없기 때문에 당신이 당신의 dogList을 반복하고

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

이유 같은 String 뭔가/검색을 비교할 수 문제를 해결하려면 .