2014-12-05 108 views
0

我製作了一個程序來管理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

回答

1
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

2

您正試圖以比較洪特對象爲雙變量:

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

1
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; 
    } 
} 
相關問題