将输入数字与数组中的值进行比较

问题描述:

我制作了一个程序来管理dogpound(狗窝,瑞典语)。
我给它添加一条狗的可能性,列出每条尾巴长度等于或大于给定长度的狗,移除狗或停止该程序。
我有问题,当我必须列出所有的狗寻找他们的尾巴长度。
我的程序中的方法被称为listaHundarna(),我要求搜索最小尾部长度。 if语句给我一个我无法解决的错误。
将输入数字与数组中的值进行比较

有人可以帮我吗?

第一类是狗(Hund),第二类是狗类(Kennel)。

洪特:

public class Hund { 

    private String HundNamn; 
    private String HundRas; 
    private int HundÅlder; 
    private double HundVikt; 
    private double HundSvansLängd; 
    private String tax = "tax"; 

    Hund(String namn, String ras, int ålder, double vikt, double svans){ //Skapa hundmetod som tar emot datan från super/main-klassen (Kennel.java); 
    HundNamn = namn; 
    HundRas = ras; 
    HundÅlder = ålder; 
    HundVikt = vikt; 
    HundSvansLängd = svans; 
    } 


    public String toString() { 
     return HundNamn+" "+HundRas+" "+HundÅlder+" years old "+HundVikt+" kg "+"tail lenght= "+HundSvansLängd; 
     } 

    public String getNamn() { 
     return HundNamn; 
     } 


} 

养犬:

public class Kennel { 

static ArrayList<Hund> HundLista= new ArrayList<Hund>(); 
private static Scanner tangentbord = new Scanner(System.in); 

    private static int val(String tal) { 
     System.out.print(tal); 
     return tangentbord.nextInt(); 
    } 


    private static void kör() { 
     for (;;) { 
      Meny(); 
      switch (välja()) { 
      case 1: 
       läggTillHund(); 
       break; 
      case 2: 
       listaHundarna(); 
       break; 
      case 3: 
       taBortHund(); 
       break; 
      case 4: 
       avsluta(); 
       return; 
      } 
     } 
    } 

    private static void Meny() { 
     System.out.println("Tryck 1 för att lägga till en hund"); 
     System.out.println("Tryck 2 för att lista hundarna"); 
     System.out.println("Tryck 3 för att ta bort en hund"); 
     System.out.println("Tryck 4 för att avsluta programmet"); 
    } 

    private static int välja() { 
     return val("> "); 
    } 

    public static void läggTillHund(){ 
     Scanner sc=new Scanner (System.in); 
     System.out.println("Hundens namn:"); 
     String namn = sc.nextLine(); 
     System.out.println("Hundens ras: "); 
     String ras = sc.nextLine(); 
     System.out.println("Hundens ålder: "); 
     int ålder=sc.nextInt(); 
     System.out.println("Hundens vikt: "); 
     double vikt=sc.nextDouble(); 
     String tax = "tax"; 
     double svans; 
     if (ras.equals(tax)) { 
      svans = 3.7; 
      } 
      else { 
       svans = (ålder*vikt)/10; 
      } 
     System.out.println("Hundens svans är "+svans+"cm lång"); 
     Hund nyhund = new Hund(namn, ras, ålder, vikt, svans); 
     HundLista.add(nyhund); 
    } 


    public static void listaHundarna(){ 
     Scanner sc=new Scanner(System.in); 
     System.out.println("Ange svanslängd:"); 
     double minstasvanslängd=sc.nextDouble(); 
     int h=0; 
     while(h<HundLista.size()){ 
      if(HundLista.get(h)>minstasvanslängd){ 
       System.out.println(HundLista.get(h)); 
     } 
     } 
    } 

    public static void taBortHund(){ 
     Scanner sc=new Scanner(System.in); 
     System.out.println("Ange hundens namn:"); 
     String radera= sc.nextLine(); 
     for(int x=0;x<HundLista.size();x++){ 
      if (HundLista.get(x).equals(radera)){ 
       HundLista.remove(x); 
       System.out.println("Hunden har tagits bort"); 
      } 
      else{ 
       System.out.println("Hundens namn är inte korrekt"); 
      } 


     } 
    } 

    public static void avsluta(){ 
    System.out.println("Programmet avslutas"); 

    } 

    public static void main(String[] args) { 
    kör(); 
    avsluta(); 
    } 

} 
+3

你会得到什么错误? – 2014-12-05 08:50:53

if(HundLista.get(h)>minstasvanslängd){ 

HundLista.get(H)返回一个对象洪特和minstasvanslängd是双,您不能使用基本运算符“>”来比较对象和基元。 if条件应该是

if(HundLista.get(h).HundSvansLängd>minstasvanslängd){ 

假设HundSvansLängd是公开的。

+0

谢谢我写的,它部分解决了这个问题。现在我得到的是,假设我加了两条狗,第一条尾巴长3厘米,第二条长5厘米,当我搜寻尾巴长至少2厘米的狗时,结果是无限的包含有关我添加的第一只狗的信息的列表循环...我做错了什么? – 2014-12-05 09:04:03

+0

这是因为“h”没有变化,它保持等于零。如果(HundLista.get(h)> minstasvanslng))System.out.println(HundLista.get(h));' – Moses 2014-12-05 09:35:47

+0

i(h ++ 2014-12-05 09:38:31

您正试图以比较洪特对象为双变量:

if(HundLista.get(h)>minstasvanslängd){ 

您应该比较的相关属性追踪对象minstasvanslängd

if(HundLista.get(h).getTailLength()>minstasvanslängd){ 

其中getTailLength()应该用返回狗的尾部长度的方法替换。

+0

和我应该写什么呢? – 2014-12-05 08:53:29

+0

@AndreaDossena查看编辑 – Eran 2014-12-05 08:55:05

+0

谢谢我写的,它部分解决了这个问题。现在我得到的是,假设我加了两条狗,第一条尾巴长3厘米,第二条长5厘米,当我搜寻尾巴长至少2厘米的狗时,结果是无限的包含有关我添加的第一只狗的信息的列表循环...我做错了什么? – 2014-12-05 09:10:29

if(HundLista.get(h)>minstasvanslängd) 

在这里,您尝试Hund类型的对象比作double。这应该是

if(HundLista.get(h).getSvansLängd() > minstasvanslängd) 

只要你在Hund类添加一个getter getSvansLängd()这样的:

public class Hund { 

    private String HundNamn; 
    private String HundRas; 
    private int HundÅlder; 
    private double HundVikt; 
    private double HundSvansLängd; 
    private String tax = "tax"; 

    Hund(String namn, String ras, int ålder, double vikt, double svans){ //Skapa hundmetod som tar emot datan från super/main-klassen (Kennel.java); 
    HundNamn = namn; 
    HundRas = ras; 
    HundÅlder = ålder; 
    HundVikt = vikt; 
    HundSvansLängd = svans; 
    } 


    public String toString() { 
     return HundNamn+" "+HundRas+" "+HundÅlder+" years old "+HundVikt+" kg "+"tail lenght= "+HundSvansLängd; 
     } 

    public String getNamn() { 
     return HundNamn; 
     } 

    public double getSvansLängd() { 
     return HundSvansLängd; 
    } 
}